linux/drivers/ata
Tejun Heo 9b89391cc8 libata: improve 0xff status handling
For PATA, 0xff status indicates empty port.  For SATA, it depends on
how the controller emulates status register.  On some controllers,
0xff is used to represent broken link or certain stage during reset.

libata currently deals SATA the same.  This hasn't caused any problem
because problematic situations usually only occur after hotplug or
other link disruption events and libata blindly waited for the device
to spin up and settle after hotplug giving the link and device
whatever time to go through those stages.

libata is going to replace unconditional spinup wait with generic
timed sequence of resets, so not only getting 0xff handling right for
SATA is, well, the right thing to do, it's much more important now.

This patch makes the following changes.

* Make ata_bus_softreset() return -ENODEV if any of its wait fails
  due to 0xff status.

* Fail soft/hardreset if status wait returns -ENODEV indicating 0xff
  status while SStatus says the link is online.  e.g. Reset fails if
  status is 0xff after reset when SStatus reports the linke is online.
  If SCR registers are not available, everything is the same as
  before.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-05-01 07:49:54 -04:00
..
ahci.c libata: improve 0xff status handling 2007-05-01 07:49:54 -04:00
ata_generic.c pata: cable methods 2007-04-28 14:16:01 -04:00
ata_piix.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
Kconfig libata/IDE: remove combined mode quirk 2007-04-28 14:15:59 -04:00
libata-acpi.c [libata] Disable ACPI by default; fix namespace problems 2007-03-28 01:57:37 -04:00
libata-core.c libata: improve 0xff status handling 2007-05-01 07:49:54 -04:00
libata-eh.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
libata-scsi.c libata: separate out ata_host_alloc() and ata_host_register() 2007-04-28 14:16:03 -04:00
libata-sff.c libata: honour host controllers that want just one host 2007-04-30 17:43:48 -07:00
libata.h libata: kill probe_ent and related helpers 2007-04-28 14:16:06 -04:00
Makefile pata_cmd640: CMD640 PCI support 2007-04-28 14:15:55 -04:00
pata_ali.c pata_ali: remove all the crap again and switch to cable_detect method 2007-04-28 14:16:00 -04:00
pata_amd.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_artop.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_atiixp.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_cmd64x.c [libata] More PATA driver ->cable_detect support 2007-04-28 14:15:57 -04:00
pata_cmd640.c drivers/ata/pata_cmd640.c: fix build with CONFIG_PM=n 2007-04-28 15:16:40 -04:00
pata_cs5520.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_cs5530.c [libata] More PATA driver ->cable_detect support 2007-04-28 14:15:57 -04:00
pata_cs5535.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_cypress.c pata: cable methods 2007-04-28 14:16:01 -04:00
pata_efar.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_hpt3x2n.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_hpt3x3.c [libata] More PATA driver ->cable_detect support 2007-04-28 14:15:57 -04:00
pata_hpt37x.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_hpt366.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_isapnp.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_it821x.c [libata] Update several PATA drivers for new ->cable_detect hook 2007-04-28 14:15:56 -04:00
pata_it8213.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_ixp4xx_cf.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_jmicron.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_legacy.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_marvell.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_mpc52xx.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_mpiix.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_netcell.c pata_netcell: re-remove all the crud 2007-04-28 14:16:00 -04:00
pata_ns87410.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_oldpiix.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_opti.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_optidma.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_pcmcia.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_pdc202xx_old.c [libata] Update several PATA drivers for new ->cable_detect hook 2007-04-28 14:15:56 -04:00
pata_pdc2027x.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_platform.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_qdi.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_radisys.c pata_radisys: support cable_detect 2007-04-28 14:15:57 -04:00
pata_rz1000.c pata_rz1000: support cable_detect 2007-04-28 14:15:57 -04:00
pata_sc1200.c pata_sc1200: restore cable type 2007-04-28 14:15:57 -04:00
pata_scc.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
pata_serverworks.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_sil680.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_sis.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_sl82c105.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_triflex.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_via.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
pata_winbond.c SPIN_LOCK_UNLOCKED cleanup in drivers/ata/pata_winbond.c 2007-04-28 15:16:40 -04:00
pdc_adma.c libata: convert the remaining PATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_inic162x.c libata: improve 0xff status handling 2007-05-01 07:49:54 -04:00
sata_mv.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_nv.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
sata_promise.c libata: convert drivers with combined SATA/PATA ports to new init model 2007-04-28 14:16:03 -04:00
sata_promise.h Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
sata_qstor.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_sil24.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
sata_sil.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_sis.c libata: convert ata_pci_init_native_mode() users to new init model 2007-04-28 14:16:03 -04:00
sata_svw.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_sx4.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sata_uli.c libata: convert ata_pci_init_native_mode() users to new init model 2007-04-28 14:16:03 -04:00
sata_via.c libata: add deadline support to prereset and reset methods 2007-05-01 07:49:53 -04:00
sata_vsc.c libata: convert the remaining SATA drivers to new init model 2007-04-28 14:16:06 -04:00
sis.h SiS warning fixes 2007-02-21 04:58:17 -05:00