linux/drivers/ide/pci
Bartlomiej Zolnierkiewicz 0380dad45e it821x: RAID mode fixes
The DMA support for RAID mode broke after:

	commit 71ef51cc17
	Author: Jens Axboe <axboe@suse.de>
	Date:   Fri Jul 28 09:02:17 2006 +0200

	    [PATCH] it821x: fix ide dma setup bug

	    Only enable dma for a valid speed setting.

	    Signed-off-by: Jens Axboe <axboe@suse.de>

	commit 0a8348d086
	Author: Jens Axboe <axboe@suse.de>
	Date:   Fri Jul 28 08:58:26 2006 +0200

	    [PATCH] ide: if the id fields looks screwy, disable DMA

	    It's the safer choice. Originally due to a bug in itx821x, but a
	    generally sound thing to do.

	    Signed-off-by: Jens Axboe <axboe@suse.de>

However it worked by pure luck before Jens' fixes: bogus ide_dma_enable()
usage in it821x driver combined with loosy check in ide_dma_verbose() allowed
the hardware to operate in DMA mode.  When these problems were fixed the DMA
support broke...

The source root for the regression turned out to be that the it821x.c code
was clearing too much of id->field_valid.  The IDE core code was using the
original value of id->field_valid to do the tuning but later DMA got disabled
in ide_dma_verbose() because of the incorrect id->field_valid fixup.  Fix it.

While at it:

* Do fixup() after probing the drives but before tuning them (which is also
  OK w.r.t. ide_undecoded_slave() fixup).  This change fixes device IDENTIFY
  data to be consistent before/after the tuning and allows us to remove extra
  re-tuning of drives from it821x_fixups().

* Fake MWDMA0 enabled/supported bits in IDENTIFY data if the device has
  DMA capable bit set (this is just to tell the IDE core that DMA is
  supported since it821x firmware takes care of DMA mode programming).

* Don't touch timing registers and don't program transfer modes on devices
  et all when in RAID mode - depend solely on firmware to do the tuning
  (as suggested by Alan Cox and done in libata pata_it821x driver).

Thanks for testing the patch goes out to Thomas Kuther.

Cc: Thomas Kuther <gimpel@sonnenkinder.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Jens Axboe <axboe@suse.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
2007-06-08 15:14:29 +02:00
..
aec62xx.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
alim15x3.c alim15x3: use ide_tune_dma() 2007-05-16 00:51:43 +02:00
amd74xx.c ide: make /proc/ide/ optional 2007-05-10 00:01:09 +02:00
atiixp.c add the IDE device ID for ATI SB700 2007-05-24 02:42:37 +02:00
cmd64x.c ide: remove ide_dma_enable() 2007-05-16 00:51:46 +02:00
cmd640.c ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
cs5520.c ide: add ide_proc_register_port() 2007-05-10 00:01:11 +02:00
cs5530.c ide: remove ide_dma_enable() 2007-05-16 00:51:46 +02:00
cs5535.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
cy82c693.c ide: use PIO/MMIO operations directly where possible (v2) 2007-02-17 02:40:25 +01:00
delkin_cb.c ide: add "initializing" argument to ide_register_hw() 2007-05-10 00:01:10 +02:00
generic.c ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
hpt34x.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
hpt366.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
it821x.c it821x: RAID mode fixes 2007-06-08 15:14:29 +02:00
it8213.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
jmicron.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
Makefile scc_pata: dependency fix 2007-03-17 21:57:25 +01:00
ns87415.c ide: add ide_set_dma() helper (v2) 2007-02-17 02:40:26 +01:00
opti621.c ide: remove some obsoleted kernel params (v2) 2007-03-03 17:48:55 +01:00
pdc202xx_new.c pdc202xx_new: use ide_tune_dma() 2007-05-16 00:51:43 +02:00
pdc202xx_old.c ide: use ide_tune_dma() part #2 2007-05-16 00:51:43 +02:00
piix.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
rz1000.c ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
sc1200.c ide: remove ide_dma_enable() 2007-05-16 00:51:46 +02:00
scc_pata.c ide: remove ide_dma_enable() 2007-05-16 00:51:46 +02:00
serverworks.c serverworks: fix CSB6 tuning logic 2007-06-08 15:14:28 +02:00
sgiioc4.c ide: add ide_proc_register_port() 2007-05-10 00:01:11 +02:00
siimage.c ide: remove ide_dma_enable() 2007-05-16 00:51:46 +02:00
sis5513.c sis5513: PIO mode setup fixes 2007-05-16 00:51:42 +02:00
sl82c105.c sl82c105: Switch to ref counting API 2007-05-16 00:51:46 +02:00
slc90e66.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
tc86c001.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
triflex.c ide: add ide_tune_dma() helper 2007-05-10 00:01:09 +02:00
trm290.c ide: use PIO/MMIO operations directly where possible (v2) 2007-02-17 02:40:25 +01:00
via82cxxx.c ide: add ide_set_dma() helper (v2) 2007-02-17 02:40:26 +01:00