libata: disable LPM for some WD SATA-I devices
authorTejun Heo <tj@kernel.org>
Thu, 16 Jan 2014 14:47:17 +0000 (09:47 -0500)
committerTejun Heo <tj@kernel.org>
Thu, 16 Jan 2014 14:49:10 +0000 (09:49 -0500)
commitecd75ad514d73efc1bbcc5f10a13566c3ace5f53
tree1b391d57f21f809ce35043106a2dc288c8a6bca0
parent6e1af69780a4df749d28a129596ed576a0d7996c
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
drivers/ata/libata-core.c
drivers/ata/libata-scsi.c
include/linux/libata.h