linux/drivers/ide/pci
Bartlomiej Zolnierkiewicz 7670df73fb ide: mode limiting fixes for user requested speed changes
* Add an extra argument to ide_max_dma_mode() for passing requested transfer
  mode.  Use it as an upper limit when finding the best DMA for device/host.

* Rename ide_max_dma_mode() to ide_find_dma_mode() and at the same time add
  ide_max_dma_mode() wrapper which passes XFER_UDMA_6 as a requested mode to
  ide_find_dma_mode().  Also add inline ide_find_dma_mode() version for
  CONFIG_BLK_DEV_IDEDMA=n case.

* Pass requested transfer mode from ide_find_dma_mode() to ide_get_mode_mask()
  to avoid false warning from eighty_ninty_three().

* Use ide_find_dma_mode() to limit the user requested transfer mode in
  ide_rate_filter().  Also limit the requested mode by host max PIO mode.


Above changes make ide_rate_filter() to:

* Clip desired transfer mode down if it is invalid (values 0x0F, 0x13-0x19
  and 0x25-0x39, values > 0x46 were already clipped down, same for values
  0x25-0x39 but iff UDMA was not supported by the host).

* Clip desired transfer mode down if it is currently unsupported by IDE core
  (PIO6 and MWDMA3-4, the latter were already clipped down but iff UDMA was
  not supported by the host).

* Clip desired transfer mode down according to the host capabilities
  (UDMA modes were already clipped down but MWDMA/SWDMA/PIO weren't,
  also ->atapi_dma flag was not respected).

* Clip desired transfer mode down according to the device capabilities
  (except PIO modes for now which require mode work) - shouldn't be a
  problem since ide_set_xfer_rate() is called _after_ device has accepted
  given transfer mode.

and also result in a number of host driver specific bugfixes:

* icside
  - clip unsupported PIO5 mode down
  - fix unsupported/invalid modes being set in drive->current_speed

* ide-cris
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - clip DMA modes down for ATAPI devices
  - fix BUG() on unsupported/invalid modes

* au1xxx-ide
  - clip unsupported PIO5, SWDMA0-2 and MWDMA0-2
    (if BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=n) modes down

* aec62xx
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - clip DMA modes down for ATAPI devices
  - fix 0x00 being programmed as PIO timing for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* alim15x3
  - clip DMA modes down for ATAPI devices (chipset revision == 0x20 only)
  - fix theoretical OOPS for 0x0F mode
  - fix unsupported/invalid modes being set on the device

* amd74xx
  - clip unsupported SWDMA0-2 (on COBRA_7401 revs <= 7) modes down
  - fix random PIO timings being set for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* atiixp
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix cached MWDMA mode being cleared for unsupported/invalid modes
  - fix PIO{0,2} timings being programmed for unsupported/invalid modes
  - fix theoretical OOPS for PIO5-6 and 0x0F modes
  - fix unsupported/invalid modes being set on the device

* cmd64x
  - clip unsupported SWDMA0-2 modes down

* cs5530
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix unsupported/invalid modes being set on the device
  - fix BUG() on unsupported/invalid modes
    (which happened if the device accepted the setting)

* cs5535
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix unsupported/invalid modes being set on the device
  - fix theoretical OOPS for PIO5-6 and 0x0F modes

* hpt34x
  - clip DMA modes down for ATAPI devices
  - fix invalid timings being programmed for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* hpt366
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix PIO0 timings being programmed for unsupported/invalid modes
  - fix DMA timings being cleared for MWDMA3-4 and 0x25-0x39 modes
  - fix unsupported/invalid modes being set on the device

* it8213
  - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down

* it821x
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - clip DMA modes down for ATAPI devices
    (chipset in smart mode and revision 0x10 in pass-through mode)

* jmicron
  - clip unsupported SWDMA0-2 modes down
  - fix unsupported/invalid modes being set on the device

* pdc202xx_new
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix unsupported/invalid modes being set on the device

* pdc202xx_old
  - clip unsupported PIO5 mode down
  - fix incorrect timings being set for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* piix
  - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down

* sc1200
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix unsupported/invalid modes being set on the device
  - fix BUG() on unsupported/invalid modes
    (which happened if the device accepted the setting)

* scc_pata
  - clip unsupported PIO5, SWDMA0-2 and MWDMA0-2 modes down

* serverworks
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix DMA/UDMA timings/settings being cleared for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* siimage
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - clip DMA modes down for ATAPI devices (SATA chipsets)

* sis5513
  - clip unsupported PIO5 mode down
  - fix BUG() on unsupported/invalid modes

* sl82c105
  - clip unsupported SWDMA0-2 modes down

* slc90e66
  - clip unsupported PIO5, SWDMA0-1 and MWDMA0 modes down

* tc86c001
  - clip unsupported PIO5 and SWDMA0-2 modes down
  - fix PIO0 timings being programmed for PIO5/0x0F/SWDMA0-2/0x13-0x19 modes
  - fix invalid 0x00 DMA timing being programmed for MWDMA3-4/0x25-0x39 modes
  - fix unsupported/invalid modes being set on the device

* triflex
  - clip unsupported PIO5 mode down

* via82cxxx
  - fix random PIO timings being set for unsupported/invalid modes
  - fix unsupported/invalid modes being set on the device

* pmac
  - clip unsupported PIO5 and SWDMA0-2 modes down

* cmd640/ht6560b
  - clip DMA modes down (if CONFIG_BLK_DEV_IDEDMA=y)
  - fix PIO5 being clipped to PIO4 (if CONFIG_BLK_DEV_IDEDMA=n)

* opti621
  - clip DMA modes down (if CONFIG_BLK_DEV_IDEDMA=y)
  - clip unsupported PIO4 to PIO3 (if CONFIG_BLK_DEV_IDEDMA=n)


While at it:

* Use ide_rate_filter() in cs5520.c::cs5520_tune_chipset().

* Remove no longer needed checks from hpt366.c::hpt3{6,7}x_tune_chipset().

Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
2007-10-11 23:53:59 +02:00
..
aec62xx.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
alim15x3.c pata_ali/alim15x3: override 80-wire cable detection for Toshiba S1800-814 2007-09-11 22:28:36 +02:00
amd74xx.c ide: add missing ide_rate_filter() calls to ->speedproc()-s 2007-10-11 23:53:59 +02:00
atiixp.c atiixp: SB700 contains more than one IDE channel 2007-10-11 23:53:58 +02:00
cmd64x.c ide: fix runtogether printk's in cmd64x IDE driver 2007-08-01 23:46:44 +02:00
cmd640.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
cs5520.c ide: mode limiting fixes for user requested speed changes 2007-10-11 23:53:59 +02:00
cs5530.c cs5530: add missing ->dma_base check 2007-08-20 22:42:56 +02:00
cs5535.c cs5535: PIO fixes 2007-08-01 23:46:45 +02:00
cy82c693.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
delkin_cb.c ide: add "initializing" argument to ide_register_hw() 2007-05-10 00:01:10 +02:00
generic.c ide: add ide_pci_device_t.host_flags (take 2) 2007-07-20 01:11:55 +02:00
hpt34x.c hpt34x: fix CONFIG_HPT34X_AUTODMA=n handling 2007-08-20 22:42:57 +02:00
hpt366.c ide: mode limiting fixes for user requested speed changes 2007-10-11 23:53:59 +02:00
it821x.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
it8213.c it8213: PIO fixes (take 2) 2007-08-01 23:46:46 +02:00
jmicron.c ide: make jmicron match vendor and device class 2007-10-11 23:53:59 +02:00
Makefile scc_pata: dependency fix 2007-03-17 21:57:25 +01:00
ns87415.c ide: config_drive_for_dma() fixes 2007-08-20 22:42:55 +02:00
opti621.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
pdc202xx_new.c pdc202xx_new: switch to using pci_get_slot() (take 2) 2007-10-11 23:53:58 +02:00
pdc202xx_old.c pdc202xx_old: add missing ->dma_base check 2007-08-20 22:42:56 +02:00
piix.c piix/slc90e66: fix PIO1 handling in ->speedproc method (take 2) 2007-08-01 23:46:46 +02:00
rz1000.c ide: add ide_pci_device_t.host_flags (take 2) 2007-07-20 01:11:55 +02:00
sc1200.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
scc_pata.c scc_pata: PIO fixes 2007-08-01 23:46:46 +02:00
serverworks.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
sgiioc4.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
siimage.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
sis5513.c sis5513: Add FSC Amilo A1630 PCI subvendor/dev to laptops 2007-08-01 23:46:44 +02:00
sl82c105.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
slc90e66.c piix/slc90e66: fix PIO1 handling in ->speedproc method (take 2) 2007-08-01 23:46:46 +02:00
tc86c001.c ide: add PIO masks 2007-07-20 01:11:59 +02:00
triflex.c triflex: add missing ->dma_base check 2007-08-20 22:42:56 +02:00
trm290.c ide: add ide_pci_device_t.host_flags (take 2) 2007-07-20 01:11:55 +02:00
via82cxxx.c ide: add missing ide_rate_filter() calls to ->speedproc()-s 2007-10-11 23:53:59 +02:00