linux/drivers/ata
Tejun Heo 6a6b97d360 libata: improve phantom device detection
Currently libata uses four methods to detect device presence.

1. PHY status if available.
2. TF register R/W test (only promotes presence, never demotes)
3. device signature after reset
4. IDENTIFY failure detection in SFF state machine

Combination of the above works well in most cases but recently there
have been a few reports where a phantom device causes unnecessary
delay during probe.  In both cases, PHY status wasn't available.  In
one case, it passed #2 and #3 and failed IDENTIFY with ATA_ERR which
didn't qualify as #4.  The other failed #2 but as it passed #3 and #4,
it still caused failure.

In both cases, phantom device reported diagnostic failure, so these
cases can be safely worked around by considering any !ATA_DRQ IDENTIFY
failure as NODEV_HINT if diagnostic failure is set.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
2008-11-14 18:51:57 -05:00
..
ahci.c libata: ahci enclosure management bit mask 2008-10-28 00:37:15 -04:00
ata_generic.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
ata_piix.c ATA: remove excess kernel-doc notation 2008-10-31 01:42:49 -04:00
Kconfig Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-10-11 12:39:35 -07:00
libata-acpi.c dock: introduce .uevent for devices in dock, eg libata 2008-09-23 23:23:00 -04:00
libata-core.c libata: Avoid overflow in ata_tf_read_block() when tf->hba_lbal > 127 2008-11-11 02:59:27 -05:00
libata-eh.c libata: fix last_reset timestamp handling 2008-11-11 03:01:21 -05:00
libata-pmp.c libata: improve EH retry delay handling 2008-07-14 15:59:32 -04:00
libata-scsi.c libata: revert convert-to-block-tagging patches 2008-11-10 08:04:47 -08:00
libata-sff.c libata: improve phantom device detection 2008-11-14 18:51:57 -05:00
libata.h libata: revert convert-to-block-tagging patches 2008-11-10 08:04:47 -08:00
Makefile libata: Add Intel SCH PATA driver 2008-05-06 11:33:58 -04:00
pata_acpi.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_ali.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_amd.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_artop.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_at32.c avr32: Use <mach/foo.h> instead of <asm/arch/foo.h> 2008-08-05 14:36:57 +02:00
pata_atiixp.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_bf54x.c [libata] pata_bf54x: Add proper PM operation 2008-09-29 00:28:29 -04:00
pata_cmd64x.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cmd640.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cs5520.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_cs5530.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_cs5535.c [libata] pata_cs553*.c: cleanup kernel-doc 2008-11-11 02:58:30 -05:00
pata_cs5536.c [libata] pata_cs553*.c: cleanup kernel-doc 2008-11-11 02:58:30 -05:00
pata_cypress.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_efar.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_hpt3x2n.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_hpt3x3.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_hpt37x.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_hpt366.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_icside.c libata-sff: Fix oops reported in kerneloops.org for pnp devices with no ctl 2008-06-04 06:40:41 -04:00
pata_isapnp.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_it821x.c libata: Fix LBA48 on pata_it821x RAID volumes. 2008-10-27 23:56:33 -04:00
pata_it8213.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_ixp4xx_cf.c [ARM] 5179/1: Replace obsolete IRQT_* and __IRQT_* values with IRQ_TYPE_* 2008-07-27 09:46:18 +01:00
pata_jmicron.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_legacy.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_marvell.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_mpc52xx.c powerpc/pata_mpc52xx: use linux/of_platform.h instead of asm 2008-07-12 12:10:52 -06:00
pata_mpiix.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_netcell.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_ninja32.c pata_ninja32: suspend/resume support 2008-10-28 00:35:59 -04:00
pata_ns87410.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_ns87415.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_of_platform.c powerpc: Fix no interrupt handling in pata_of_platform 2008-10-10 15:55:17 +11:00
pata_oldpiix.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_opti.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_optidma.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_pcmcia.c [libata] pata_pcmcia: another memory card support 2008-11-11 02:59:13 -05:00
pata_pdc202xx_old.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_pdc2027x.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_platform.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_qdi.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_radisys.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_rb532_cf.c libata-sff: Fix oops reported in kerneloops.org for pnp devices with no ctl 2008-06-04 06:40:41 -04:00
pata_rz1000.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
pata_sc1200.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_scc.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_sch.c [libata] pata_sch: notice attached slave devices 2008-11-11 02:58:59 -05:00
pata_serverworks.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_sil680.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_sis.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_sl82c105.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_triflex.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_via.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pata_winbond.c ata: Switch all my stuff to a common address 2008-10-27 23:54:50 -04:00
pdc_adma.c libata: rename SFF functions 2008-04-17 15:44:21 -04:00
sata_fsl.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_inic162x.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_mv.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_nv.c sata_nv: fix generic, nf2/3 detection regression 2008-11-04 01:08:11 -05:00
sata_promise.c sata_promise: add ATA engine reset to reset ops 2008-11-04 01:08:03 -05:00
sata_promise.h libata annotations and fixes 2008-01-23 05:24:15 -05:00
sata_qstor.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_sil24.c sata_sil24: configure max read request size to 4k 2008-10-27 23:55:27 -04:00
sata_sil.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_sis.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_svw.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_sx4.c libata: add qc_fill_rtf port operation 2008-04-17 15:44:23 -04:00
sata_uli.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sata_via.c sata_via: restore vt*_prepare_host error handling 2008-11-04 01:08:06 -05:00
sata_vsc.c libata: make SCR access ops per-link 2008-09-29 00:22:28 -04:00
sis.h libata: PATA-mode fixes for sis_sata 2007-07-02 10:17:42 -04:00