Commit 19f71153 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (24 commits)
  ide: use only ->set_pio_mode method for programming PIO modes (take 2)
  sis5513: don't change UDMA settings when programming PIO
  it8213/piix/slc90e66: don't change DMA settings when programming PIO
  alim15x3: PIO mode setup fixes
  siimage: fix ->set_pio_mode method to select PIO data transfer
  cs5520: don't enable VDMA in ->speedproc
  sc1200: remove redundant warning message from sc1200_tune_chipset()
  ide-pmac: PIO mode setup fixes (take 3)
  icside: fix ->speedproc to return on unsupported modes (take 5)
  sgiioc4: use ide_tune_dma()
  amd74xx/via82cxxx: use ide_tune_dma()
  ide: add ide_set{_max}_pio() (take 4)
  ide: Kconfig face-lift
  ide: move ide_rate_filter() calls to the upper layer (take 2)
  sis5513: add ->udma_filter method for chipset_family >= ATA_133
  ide: mode limiting fixes for user requested speed changes
  ide: add missing ide_rate_filter() calls to ->speedproc()-s
  ide: call udma_filter() before resorting to the UltraDMA mask
  ide: make jmicron match vendor and device class
  pdc202xx_new: switch to using pci_get_slot() (take 2)
  ...
parents e6005a85 8f4dd2e4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -262,10 +262,12 @@ int acpi_bus_set_power(acpi_handle handle, int state)
		printk(KERN_WARNING PREFIX
			      "Transitioning device [%s] to D%d\n",
			      device->pnp.bus_id, state);
	else
	else {
		device->power.state = state;
		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
				  "Device [%s] transitioned to D%d\n",
				  device->pnp.bus_id, state));
	}

	return result;
}
+60 −50
Original line number Diff line number Diff line
@@ -308,6 +308,14 @@ config IDE_GENERIC
	help
	  If unsure, say N.

config BLK_DEV_PLATFORM
	tristate "Platform driver for IDE interfaces"
	help
	  This is the platform IDE driver, used mostly for Memory Mapped
	  IDE devices, like Compact Flashes running in True IDE mode.

	  If unsure, say N.

config BLK_DEV_CMD640
	bool "CMD640 chipset bugfix/support"
	depends on X86
@@ -351,17 +359,16 @@ config BLK_DEV_IDEPNP
	  would like the kernel to automatically detect and activate
	  it, say Y here.

if PCI

comment "PCI IDE chipsets support"

config BLK_DEV_IDEPCI
	bool "PCI IDE chipset support" if PCI
	default BLK_DEV_IDEDMA_PMAC if PPC_PMAC && BLK_DEV_IDEDMA_PMAC
	help
	  Say Y here for PCI systems which use IDE drive(s).
	  This option helps the IDE driver to automatically detect and
	  configure all PCI-based IDE interfaces in your system.
	bool

config IDEPCI_SHARE_IRQ
	bool "Sharing PCI IDE interrupts support"
	depends on PCI && BLK_DEV_IDEPCI
	depends on BLK_DEV_IDEPCI
	help
	  Some ATA/IDE chipsets have hardware support which allows for
	  sharing a single IRQ with other cards. To enable support for
@@ -371,11 +378,11 @@ config IDEPCI_SHARE_IRQ
	  If unsure, say N.

config IDEPCI_PCIBUS_ORDER
	def_bool PCI && BLK_DEV_IDE=y && BLK_DEV_IDEPCI
	def_bool BLK_DEV_IDE=y && BLK_DEV_IDEPCI

config BLK_DEV_OFFBOARD
	bool "Boot off-board chipsets first support"
	depends on PCI && BLK_DEV_IDEPCI
	depends on BLK_DEV_IDEPCI
	help
	  Normally, IDE controllers built into the motherboard (on-board
	  controllers) are assigned to ide0 and ide1 while those on add-in PCI
@@ -398,21 +405,23 @@ config BLK_DEV_OFFBOARD

config BLK_DEV_GENERIC
	tristate "Generic PCI IDE Chipset Support"
	depends on BLK_DEV_IDEPCI
	select BLK_DEV_IDEPCI
        help
          This option provides generic support for various PCI IDE Chipsets
          which otherwise might not be supported.

config BLK_DEV_OPTI621
	tristate "OPTi 82C621 chipset enhanced support (EXPERIMENTAL)"
	depends on PCI && BLK_DEV_IDEPCI && EXPERIMENTAL
	depends on EXPERIMENTAL
	select BLK_DEV_IDEPCI
	help
	  This is a driver for the OPTi 82C621 EIDE controller.
	  Please read the comments at the top of <file:drivers/ide/pci/opti621.c>.

config BLK_DEV_RZ1000
	tristate "RZ1000 chipset bugfix/support"
	depends on PCI && BLK_DEV_IDEPCI && X86
	depends on X86
	select BLK_DEV_IDEPCI
	help
	  The PC-Technologies RZ1000 IDE chip is used on many common 486 and
	  Pentium motherboards, usually along with the "Neptune" chipset.
@@ -423,35 +432,21 @@ config BLK_DEV_RZ1000
	  things will operate 100% reliably.

config BLK_DEV_IDEDMA_PCI
	bool "Generic PCI bus-master DMA support"
	depends on PCI && BLK_DEV_IDEPCI
	---help---
	  If your PCI system uses IDE drive(s) (as opposed to SCSI, say) and
	  is capable of bus-master DMA operation (most Pentium PCI systems),
	  you will want to say Y here to reduce CPU overhead. You can then use
	  the "hdparm" utility to enable DMA for drives for which it was not
	  enabled automatically. By default, DMA is not enabled automatically
	  for these drives, but you can change that by saying Y to the
	  following question "Use DMA by default when available". You can get
	  the latest version of the hdparm utility from
	  <ftp://ibiblio.org/pub/Linux/system/hardware/>.

	  Read the comments at the beginning of <file:drivers/ide/ide-dma.c>
	  and the file <file:Documentation/ide.txt> for more information.

	  It is safe to say Y to this question.

if BLK_DEV_IDEDMA_PCI
	bool
	select BLK_DEV_IDEPCI

config BLK_DEV_IDEDMA_FORCED
	bool "Force enable legacy 2.0.X HOSTS to use DMA"
	depends on BLK_DEV_IDEDMA_PCI
	help
	  This is an old piece of lost code from Linux 2.0 Kernels.

	  Generally say N here.

# TODO: remove it
config IDEDMA_ONLYDISK
	bool "Enable DMA only for disks "
	depends on BLK_DEV_IDEDMA_PCI
	help
	  This is used if you know your ATAPI Devices are going to fail DMA
	  Transfers.
@@ -460,6 +455,7 @@ config IDEDMA_ONLYDISK

config BLK_DEV_AEC62XX
	tristate "AEC62XX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for Acard AEC62xx (Artop ATP8xx)
	  IDE controllers. This allows the kernel to change PIO, DMA and UDMA
@@ -467,6 +463,7 @@ config BLK_DEV_AEC62XX

config BLK_DEV_ALI15X3
	tristate "ALI M15x3 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for ALI 1533, 1543 and 1543C
	  onboard chipsets.  It also tests for Simplex mode and enables
@@ -495,6 +492,7 @@ config WDC_ALI15X3

config BLK_DEV_AMD74XX
	tristate "AMD and nVidia IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for AMD-7xx and AMD-8111 chips
	  and also for the nVidia nForce chip.  This allows the kernel to
@@ -504,6 +502,7 @@ config BLK_DEV_AMD74XX
config BLK_DEV_ATIIXP
	tristate "ATI IXP chipset IDE support"
	depends on X86
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for ATI IXP chipset.
	  This allows the kernel to change PIO, DMA and UDMA speeds
@@ -513,18 +512,21 @@ config BLK_DEV_ATIIXP

config BLK_DEV_CMD64X
	tristate "CMD64{3|6|8|9} chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Say Y here if you have an IDE controller which uses any of these
	  chipsets: CMD643, CMD646, or CMD648.

config BLK_DEV_TRIFLEX
	tristate "Compaq Triflex IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Say Y here if you have a Compaq Triflex IDE controller, such
	  as those commonly found on Compaq Pentium-Pro systems

config BLK_DEV_CY82C693
	tristate "CY82C693 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds detection and support for the CY82C693 chipset
	  used on Digital's PC-Alpha 164SX boards.
@@ -535,6 +537,7 @@ config BLK_DEV_CY82C693
config BLK_DEV_CS5520
	tristate "Cyrix CS5510/20 MediaGX chipset support (VERY EXPERIMENTAL)"
	depends on EXPERIMENTAL
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for PIO tuning and virtual DMA on the Cyrix MediaGX
	  5510/5520 chipset. This will automatically be detected and
@@ -544,6 +547,7 @@ config BLK_DEV_CS5520

config BLK_DEV_CS5530
	tristate "Cyrix/National Semiconductor CS5530 MediaGX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for UDMA on the Cyrix MediaGX 5530 chipset. This
	  will automatically be detected and configured if found.
@@ -553,6 +557,7 @@ config BLK_DEV_CS5530
config BLK_DEV_CS5535
	tristate "AMD CS5535 chipset support"
	depends on X86 && !X86_64
	select BLK_DEV_IDEDMA_PCI
	help
	  Include support for UDMA on the NSC/AMD CS5535 companion chipset.
	  This will automatically be detected and configured if found.
@@ -561,6 +566,7 @@ config BLK_DEV_CS5535

config BLK_DEV_HPT34X
	tristate "HPT34X chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds up to 4 more EIDE devices sharing a single
	  interrupt. The HPT343 chipset in its current form is a non-bootable
@@ -581,7 +587,8 @@ config HPT34X_AUTODMA

config BLK_DEV_HPT366
	tristate "HPT36X/37X chipset support"
	---help---
	select BLK_DEV_IDEDMA_PCI
	help
	  HPT366 is an Ultra DMA chipset for ATA-66.
	  HPT368 is an Ultra DMA chipset for ATA-66 RAID Based.
	  HPT370 is an Ultra DMA chipset for ATA-100.
@@ -605,18 +612,21 @@ config BLK_DEV_HPT366

config BLK_DEV_JMICRON
	tristate "JMicron JMB36x support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Basic support for the JMicron ATA controllers. For full support
	  use the libata drivers.

config BLK_DEV_SC1200
	tristate "National SCx200 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for the built in IDE on the National
	  SCx200 series of embedded x86 "Geode" systems

config BLK_DEV_PIIX
	tristate "Intel PIIXn chipsets support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for Intel PIIX and ICH chips
	  and also for the Efar Victory66 (slc90e66) chip.  This allows
@@ -625,17 +635,20 @@ config BLK_DEV_PIIX

config BLK_DEV_IT8213
	tristate "IT8213 IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	 This driver adds support for the ITE 8213 IDE controller.

config BLK_DEV_IT821X
	tristate "IT821X IDE support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for the ITE 8211 IDE controller and the
	  IT 8212 IDE RAID controller in both RAID and pass-through mode.

config BLK_DEV_NS87415
	tristate "NS87415 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds detection and support for the NS87415 chip
	  (used mainly on SPARC64 and PA-RISC machines).
@@ -644,6 +657,7 @@ config BLK_DEV_NS87415

config BLK_DEV_PDC202XX_OLD
	tristate "PROMISE PDC202{46|62|65|67} support"
	select BLK_DEV_IDEDMA_PCI
	help
	  Promise Ultra33 or PDC20246
	  Promise Ultra66 or PDC20262
@@ -685,9 +699,11 @@ config PDC202XX_BURST

config BLK_DEV_PDC202XX_NEW
	tristate "PROMISE PDC202{68|69|70|71|75|76|77} support"
	select BLK_DEV_IDEDMA_PCI

config BLK_DEV_SVWKS
	tristate "ServerWorks OSB4/CSB5/CSB6 chipsets support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO/(U)DMA support for the ServerWorks OSB4/CSB5
	  chipsets.
@@ -696,6 +712,7 @@ config BLK_DEV_SGIIOC4
	tristate "Silicon Graphics IOC4 chipset ATA/ATAPI support"
	depends on (IA64_SGI_SN2 || IA64_GENERIC) && SGI_IOC4
	select IDEPCI_SHARE_IRQ
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO & MultiMode DMA-2 support for the SGI IOC4
	  chipset, which has one channel and can support two devices.
@@ -703,6 +720,7 @@ config BLK_DEV_SGIIOC4

config BLK_DEV_SIIMAGE
	tristate "Silicon Image chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds PIO/(U)DMA support for the SI CMD680 and SII
	  3112 (Serial ATA) chips.
@@ -710,7 +728,8 @@ config BLK_DEV_SIIMAGE
config BLK_DEV_SIS5513
	tristate "SiS5513 chipset support"
	depends on X86
	---help---
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for SIS5513 chipset family based
	  mainboards.

@@ -729,6 +748,7 @@ config BLK_DEV_SIS5513
config BLK_DEV_SL82C105
	tristate "Winbond SL82c105 support"
	depends on (PPC || ARM)
	select BLK_DEV_IDEDMA_PCI
	help
	  If you have a Winbond SL82c105 IDE controller, say Y here to enable
	  special configuration for this chip. This is common on various CHRP
@@ -736,6 +756,7 @@ config BLK_DEV_SL82C105

config BLK_DEV_SLC90E66
	tristate "SLC90E66 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver ensures (U)DMA support for Victory66 SouthBridges for
	  SMsC with Intel NorthBridges.  This is an Ultra66 based chipset.
@@ -751,6 +772,7 @@ config BLK_DEV_SLC90E66

config BLK_DEV_TRM290
	tristate "Tekram TRM290 chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds support for bus master DMA transfers
	  using the Tekram TRM290 PCI IDE chip. Volunteers are
@@ -759,6 +781,7 @@ config BLK_DEV_TRM290

config BLK_DEV_VIA82CXXX
	tristate "VIA82CXXX chipset support"
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver adds explicit support for VIA BusMastering IDE chips.
	  This allows the kernel to change PIO, DMA and UDMA speeds and to
@@ -766,12 +789,14 @@ config BLK_DEV_VIA82CXXX

config BLK_DEV_TC86C001
	tristate "Toshiba TC86C001 support"
	select BLK_DEV_IDEDMA_PCI
	help
	This driver adds support for Toshiba TC86C001 GOKU-S chip.

config BLK_DEV_CELLEB
	tristate "Toshiba's Cell Reference Set IDE support"
	depends on PPC_CELLEB
	select BLK_DEV_IDEDMA_PCI
	help
	  This driver provides support for the built-in IDE controller on
	  Toshiba Cell Reference Board.
@@ -985,24 +1010,9 @@ config IDE_EXT_DIRECT
endchoice

# no isa -> no vlb
config IDE_CHIPSETS
	bool "Other IDE chipset support"
	depends on ISA
	---help---
	  Say Y here if you want to include enhanced support for various IDE
	  interface chipsets used on motherboards and add-on cards. You can
	  then pick your particular IDE chip from among the following options.
	  This enhanced support may be necessary for Linux to be able to
	  access the 3rd/4th drives in some systems. It may also enable
	  setting of higher speed I/O rates to improve system performance with
	  these chipsets. Most of these also require special kernel boot
	  parameters to actually turn on the support at runtime; you can find
	  a list of these in the file <file:Documentation/ide.txt>.

	  People with SCSI-only systems can say N here.

if IDE_CHIPSETS
if ISA

comment "Other IDE chipsets support"
comment "Note: most of these also require special kernel boot parameters"

config BLK_DEV_4DRIVES
+9 −20
Original line number Diff line number Diff line
@@ -248,15 +248,9 @@ static void icside_build_sglist(ide_drive_t *drive, struct request *rq)
 *	MW1	80	50	50	150	C
 *	MW2	70	25	25	120	C
 */
static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode)
static int icside_set_speed(ide_drive_t *drive, const u8 xfer_mode)
{
	int on = 0, cycle_time = 0, use_dma_info = 0;

	/*
	 * Limit the transfer speed to MW_DMA_2.
	 */
	if (xfer_mode > XFER_MW_DMA_2)
		xfer_mode = XFER_MW_DMA_2;
	int cycle_time, use_dma_info = 0;

	switch (xfer_mode) {
	case XFER_MW_DMA_2:
@@ -278,6 +272,8 @@ static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode)
	case XFER_SW_DMA_0:
		cycle_time = 480;
		break;
	default:
		return 1;
	}

	/*
@@ -289,17 +285,10 @@ static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode)

	drive->drive_data = cycle_time;

	if (cycle_time && ide_config_drive_speed(drive, xfer_mode) == 0)
		on = 1;
	else
		drive->drive_data = 480;

	printk("%s: %s selected (peak %dMB/s)\n", drive->name,
		ide_xfer_verbose(xfer_mode), 2000 / drive->drive_data);

	drive->current_speed = xfer_mode;

	return on;
	return ide_config_drive_speed(drive, xfer_mode);
}

static void icside_dma_host_off(ide_drive_t *drive)
@@ -326,8 +315,7 @@ static int icside_dma_check(ide_drive_t *drive)
{
	struct hd_driveid *id = drive->id;
	ide_hwif_t *hwif = HWIF(drive);
	int xfer_mode = XFER_PIO_2;
	int on;
	int xfer_mode = 0;

	if (!(id->capability & 1) || !hwif->autodma)
		goto out;
@@ -356,9 +344,10 @@ static int icside_dma_check(ide_drive_t *drive)
	}

out:
	on = icside_set_speed(drive, xfer_mode);
	if (xfer_mode == 0)
		return -1;

	return on ? 0 : -1;
	return icside_set_speed(drive, xfer_mode) ? -1 : 0;
}

static int icside_dma_end(ide_drive_t *drive)
+3 −10
Original line number Diff line number Diff line
@@ -680,12 +680,10 @@ static void cris_dma_off(ide_drive_t *drive)
{
}

static void tune_cris_ide(ide_drive_t *drive, u8 pio)
static void cris_set_pio_mode(ide_drive_t *drive, const u8 pio)
{
	int setup, strobe, hold;

	pio = ide_get_best_pio_mode(drive, pio, 4);

	switch(pio)
	{
		case 0:
@@ -722,15 +720,10 @@ static void tune_cris_ide(ide_drive_t *drive, u8 pio)
	(void)ide_config_drive_speed(drive, XFER_PIO_0 + pio);
}

static int speed_cris_ide(ide_drive_t *drive, u8 speed)
static int speed_cris_ide(ide_drive_t *drive, const u8 speed)
{
	int cyc = 0, dvs = 0, strobe = 0, hold = 0;

	if (speed >= XFER_PIO_0 && speed <= XFER_PIO_4) {
		tune_cris_ide(drive, speed - XFER_PIO_0);
		return ide_config_drive_speed(drive, speed);
	}

	switch(speed)
	{
		case XFER_UDMA_0:
@@ -797,7 +790,7 @@ init_e100_ide (void)
		ide_register_hw(&hw, 1, &hwif);
		hwif->mmio = 1;
		hwif->chipset = ide_etrax100;
		hwif->tuneproc = &tune_cris_ide;
		hwif->set_pio_mode = &cris_set_pio_mode;
		hwif->speedproc = &speed_cris_ide;
		hwif->ata_input_data = &cris_ide_input_data;
		hwif->ata_output_data = &cris_ide_output_data;
+42 −0
Original line number Diff line number Diff line
@@ -611,6 +611,46 @@ void ide_acpi_push_timing(ide_hwif_t *hwif)
}
EXPORT_SYMBOL_GPL(ide_acpi_push_timing);

/**
 * ide_acpi_set_state - set the channel power state
 * @hwif: target IDE interface
 * @on: state, on/off
 *
 * This function executes the _PS0/_PS3 ACPI method to set the power state.
 * ACPI spec requires _PS0 when IDE power on and _PS3 when power off
 */
void ide_acpi_set_state(ide_hwif_t *hwif, int on)
{
	int unit;

	if (ide_noacpi)
		return;

	DEBPRINT("ENTER:\n");

	if (!hwif->acpidata) {
		DEBPRINT("no ACPI data for %s\n", hwif->name);
		return;
	}
	/* channel first and then drives for power on and verse versa for power off */
	if (on)
		acpi_bus_set_power(hwif->acpidata->obj_handle, ACPI_STATE_D0);
	for (unit = 0; unit < MAX_DRIVES; ++unit) {
		ide_drive_t *drive = &hwif->drives[unit];

		if (!drive->acpidata->obj_handle)
			drive->acpidata->obj_handle = ide_acpi_drive_get_handle(drive);

		if (drive->acpidata->obj_handle && drive->present) {
			acpi_bus_set_power(drive->acpidata->obj_handle,
				on? ACPI_STATE_D0: ACPI_STATE_D3);
		}
	}
	if (!on)
		acpi_bus_set_power(hwif->acpidata->obj_handle, ACPI_STATE_D3);
}
EXPORT_SYMBOL_GPL(ide_acpi_set_state);

/**
 * ide_acpi_init - initialize the ACPI link for an IDE interface
 * @hwif: target IDE interface (channel)
@@ -679,6 +719,8 @@ void ide_acpi_init(ide_hwif_t *hwif)
		return;
	}

	/* ACPI _PS0 before _STM */
	ide_acpi_set_state(hwif, 1);
	/*
	 * ACPI requires us to call _STM on startup
	 */
Loading