linux/drivers/ata
Tejun Heo ecd75ad514 libata: disable LPM for some WD SATA-I devices
For some reason, some early WD drives spin up and down drives
erratically when the link is put into slumber mode which can reduce
the life expectancy of the device significantly.  Unfortunately, we
don't have full list of devices and given the nature of the issue it'd
be better to err on the side of false positives than the other way
around.  Let's disable LPM on all WD devices which match one of the
known problematic model prefixes and are SATA-I.

As horkage list doesn't support matching SATA capabilities, this is
implemented as two horkages - WD_BROKEN_LPM and NOLPM.  The former is
set for the known prefixes and sets the latter if the matched device
is SATA-I.

Note that this isn't optimal as this disables all LPM operations and
partial link power state reportedly works fine on these; however, the
way LPM is implemented in libata makes it difficult to precisely map
libata LPM setting to specific link power state.  Well, these devices
are already fairly outdated.  Let's just disable whole LPM for now.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-and-tested-by: Nikos Barkas <levelwol@gmail.com>
Reported-and-tested-by: Ioannis Barkas <risc4all@yahoo.com>
References: https://bugzilla.kernel.org/show_bug.cgi?id=57211
Cc: stable@vger.kernel.org
2014-01-16 09:49:10 -05:00
..
acard-ahci.c Merge branch 'libata/for-3.10-fixes' into libata/for-3.11 2013-07-02 19:54:16 -07:00
ahci_imx.c ahci: imx: fix the error handling in imx_ahci_probe() 2013-12-12 10:59:09 -05:00
ahci_platform.c ahci: add support for IBM Akebono platform device 2013-11-22 17:38:18 -05:00
ahci.c Merge branch 'for-3.13-fixes' into for-3.14 2014-01-16 09:44:34 -05:00
ahci.h ahci: imx: setup power saving methods 2013-10-15 08:47:00 -04:00
ata_generic.c ahci: mcp89: enter AHCI mode under Apple BIOS emulation 2013-11-23 08:34:34 -05:00
ata_piix.c ata_piix: minor typo and a printk fix 2013-10-13 16:17:48 -04:00
Kconfig ahci_imx: depend on CONFIG_MFD_SYSCON 2013-07-26 08:57:56 -04:00
libahci.c drivers: ata: Mark the function as static in libahci.c 2013-12-14 16:21:42 -05:00
libata-acpi.c ACPI / driver core: Store an ACPI device pointer in struct acpi_dev_node 2013-11-14 23:14:43 +01:00
libata-core.c libata: disable LPM for some WD SATA-I devices 2014-01-16 09:49:10 -05:00
libata-eh.c ata: libata-eh: Remove unnecessary snprintf arithmetic 2013-11-22 17:21:10 -05:00
libata-pmp.c libata: apply behavioral quirks to sil3826 PMP 2013-08-19 09:38:21 -04:00
libata-scsi.c libata: disable LPM for some WD SATA-I devices 2014-01-16 09:49:10 -05:00
libata-sff.c libata: update "Maintained by:" tags 2013-05-14 11:13:04 -07:00
libata-transport.c libata: Fix display of sata speed 2013-10-27 07:43:25 -04:00
libata-transport.h [libata] Add ATA transport class 2010-10-21 20:21:03 -04:00
libata-zpodd.c ata: fix acpi_bus_get_device() return value check 2013-11-23 08:37:10 -05:00
libata.h ATA / ACPI: remove power dependent device handling 2013-10-17 15:38:53 +02:00
Makefile ahci_imx: add ahci sata support on imx platforms 2013-07-24 12:29:08 -04:00
pata_acpi.c ata: acpi: rework the ata acpi bind support 2013-08-23 12:09:23 -04:00
pata_ali.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_amd.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_arasan_cf.c pata_arasan_cf: add missing clk_disable_unprepare() on error path 2013-11-22 17:38:31 -05:00
pata_artop.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_at32.c ata: use dev_get_platdata() 2013-07-30 08:59:24 -04:00
pata_at91.c ata: use dev_get_platdata() 2013-07-30 08:59:24 -04:00
pata_atiixp.c pata_atiixp: override cable detection on MSI E350DM-E33 2012-08-17 13:26:51 -04:00
pata_atp867x.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_bf54x.c ata: use platform_{get,set}_drvdata() 2013-05-24 10:26:13 +09:00
pata_cmd64x.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_cmd640.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_cs5520.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_cs5530.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_cs5535.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_cs5536.c pata_cs5536: add quirk for broken udma 2012-11-28 12:38:41 -05:00
pata_cypress.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_efar.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_ep93xx.c drivers/ata: don't check resource with devm_ioremap_resource 2013-05-12 15:19:46 +02:00
pata_hpt3x2n.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_hpt3x3.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_hpt37x.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_hpt366.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_icside.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
pata_imx.c pata_imx: expose module alias for loading from device-tree 2013-07-29 12:13:08 -04:00
pata_isapnp.c pata_isapnp: Don't use invalid I/O ports 2013-10-07 15:17:32 -04:00
pata_it821x.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_it8213.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_ixp4xx_cf.c DMA-API: others: use dma_set_coherent_mask() 2013-10-31 14:49:07 +00:00
pata_jmicron.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_legacy.c pata_legacy: bogus clock in opti82c46x_set_piomode() 2013-04-03 19:53:10 -04:00
pata_macio.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_marvell.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_mpc52xx.c ata: use platform_{get,set}_drvdata() 2013-05-24 10:26:13 +09:00
pata_mpiix.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_netcell.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_ninja32.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_ns87410.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_ns87415.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_octeon_cf.c DMA-API: ata: pata_octeon_cf: convert to use dma_coerce_mask_and_coherent() 2013-10-31 14:48:49 +00:00
pata_of_platform.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
pata_oldpiix.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_opti.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_optidma.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_palmld.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
pata_pcmcia.c drivers/ata: use module_pcmcia_driver() in pcmcia drivers 2013-03-15 12:26:03 -07:00
pata_pdc202xx_old.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_pdc2027x.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_piccolo.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_platform.c ata: use dev_get_platdata() 2013-07-30 08:59:24 -04:00
pata_pxa.c ata: use dev_get_platdata() 2013-07-30 08:59:24 -04:00
pata_radisys.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_rb532_cf.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
pata_rdc.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_rz1000.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_samsung_cf.c ata: pata_samsung_cf: Remove unused macros 2014-01-12 06:56:04 -05:00
pata_sc1200.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_scc.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
pata_sch.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
pata_serverworks.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_sil680.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_sis.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_sl82c105.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_triflex.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pata_via.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
pdc_adma.c libata: update "Maintained by:" tags 2013-05-14 11:13:04 -07:00
sata_dwc_460ex.c powerpc: add missing explicit OF includes for ppc 2013-11-11 09:10:50 -06:00
sata_fsl.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
sata_highbank.c sata_highbank: clear whole array in highbank_initialize_phys() 2013-10-27 08:11:54 -04:00
sata_inic162x.c libata: make it clear that sata_inic162x is experimental 2013-07-22 17:11:14 -04:00
sata_mv.c ata: sata_mv: fix disk hotplug for Armada 370/XP SoCs 2014-01-15 07:44:02 -05:00
sata_nv.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
sata_promise.c update contact information for Mikael Pettersson 2013-09-25 13:27:42 -07:00
sata_promise.h
sata_qstor.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
sata_rcar.c sata_rcar: Add R-Car Gen2 SATA PHY support 2013-11-29 15:41:17 -05:00
sata_sil24.c ata: use pci_get_drvdata() 2013-06-02 22:22:03 -07:00
sata_sil.c Merge branch 'libata/for-3.10-fixes' into libata/for-3.11 2013-07-02 19:54:16 -07:00
sata_sis.c sata_sis: missing PM support 2014-01-01 15:14:40 -05:00
sata_svw.c sata_svw: switch to ->show_info() 2013-04-09 14:13:28 -04:00
sata_sx4.c libata: update "Maintained by:" tags 2013-05-14 11:13:04 -07:00
sata_uli.c ata: use module_pci_driver 2012-07-25 15:12:11 -04:00
sata_via.c libata: update "Maintained by:" tags 2013-05-14 11:13:04 -07:00
sata_vsc.c Drivers: ata: remove __dev* attributes. 2013-01-03 15:57:03 -08:00
sis.h