linux/drivers/ide
Suleiman Souhlal 513daadd15 ide: use correct IDE error recovery
IDE error recovery is using IDLE IMMEDIATE if the drive is busy or has DRQ set.
This violates the ATA spec (can only send IDLE IMMEDIATE when drive is not
busy) and really hoses up some drives (modern drives will not be able to
recover using this error handling).  The correct thing to do is issue a SRST
followed by a SET FEATURES command.  This is what Western Digital recommends
for error recovery and what Western Digital says Windows does.  It also does
not violate the ATA spec as far as I can tell.

Bart:
* port the patch over the current tree
* undo the recalibration code removal
* send SET FEATURES command after checking for good drive status
* don't check whether the current request is of REQ_TYPE_ATA_{CMD,TASK}
  type because we need to send SET FEATURES before handling any requests
* some pre-ATA4 drives require INITIALIZE DEVICE PARAMETERS command before
  other commands (except IDENTIFY) so send SET FEATURES only if there are
  no pending drive->special requests
* update comments and patch description
* any bugs introduced by this patch are mine and not Suleiman's :-)

Signed-off-by: Suleiman Souhlal <suleiman@google.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
2007-03-26 23:03:20 +02:00
..
arm ide: remove CONFIG_IDEDMA_{ICS,PCI}_AUTO config options 2007-03-17 21:57:41 +01:00
cris ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
h8300
legacy ide: make legacy IDE VLB modules check for the "probe" kernel params (v2) 2007-03-03 17:48:55 +01:00
mips ide: au1xxx: fix use of mixed declarations and code 2007-03-17 21:57:24 +01:00
pci pdc202xx_new: Enable ATAPI DMA 2007-03-26 23:03:19 +02:00
ppc scc_pata: dependency fix 2007-03-17 21:57:25 +01:00
Kconfig ide: cosmetic adaption of drivers/ide/Kconfig concerning SATA 2007-03-26 23:03:19 +02:00
Makefile scc_pata: dependency fix 2007-03-17 21:57:25 +01:00
ide-acpi.c
ide-cd.c ide: make ide_hwif_t.ide_dma_{host_off,off_quietly} void (v2) 2007-02-17 02:40:26 +01:00
ide-cd.h
ide-disk.c ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
ide-dma.c ide: don't allow DMA to be enabled if CONFIG_IDEDMA_{ICS,PCI}_AUTO=n 2007-03-17 21:57:39 +01:00
ide-floppy.c ide: make ide_hwif_t.ide_dma_{host_off,off_quietly} void (v2) 2007-02-17 02:40:26 +01:00
ide-generic.c
ide-io.c ide: use correct IDE error recovery 2007-03-26 23:03:20 +02:00
ide-iops.c ide: use correct IDE error recovery 2007-03-26 23:03:20 +02:00
ide-lib.c ide: ide_get_best_pio_mode() returns incorrect IORDY setting (take 2) 2007-03-03 17:48:53 +01:00
ide-pnp.c
ide-probe.c ide: remove a ton of pointless #undef REALLY_SLOW_IO 2007-03-03 17:48:54 +01:00
ide-proc.c
ide-tape.c ide: make ide_hwif_t.ide_dma_{host_off,off_quietly} void (v2) 2007-02-17 02:40:26 +01:00
ide-taskfile.c
ide-timing.h
ide.c ide: fix locking for manual DMA enable/disable ("hdparm -d") 2007-03-26 23:03:19 +02:00
setup-pci.c ide: remove CONFIG_IDEDMA_{ICS,PCI}_AUTO config options 2007-03-17 21:57:41 +01:00