aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorShane Huang <shane.huang@amd.com>2012-11-17 15:44:41 -0500
committerJeff Garzik <jgarzik@redhat.com>2012-12-03 04:57:37 -0500
commitde90cd71f68e947d3bd6c3f2ef5731ead010a768 (patch)
tree0a5f7196d4026847fcfa26ecb04389975e8abe9e /drivers/ata
parent0d0cdb028f9d9771e2b346038707734121f906e3 (diff)
libata: check SATA_SETTINGS log with HW Feature Ctrl
NCQ capability was used to check availability of SATA Settings page from Identify Device Data Log, which contains DevSlp timing variables. It does not work on some HDDs and leads to error messages. IDENTIFY word 78 bit 5(Hardware Feature Control) should be used. Quoting SATA spec 3.1: If Hardware Feature Control is supported, then: a) IDENTIFY DEVICE data word 78 bit 5 (see 13.2.1.18) shall be set to one; b) the SET FEATURES Select Hardware Feature Control subcommand shall be supported (see 13.3.8); c) page 08h of the Identify Device Data log (see 13.7.7) shall be supported; This patch is not tested on SATA HDD with DevSlp supported. Reported-by: Borislav Petkov <bp@amd64.org> Signed-off-by: Shane Huang <shane.huang@amd.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index f46fbd3bd3fb..caffe73c1e4a 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2330,9 +2330,8 @@ int ata_dev_configure(struct ata_device *dev)
2330 2330
2331 /* Obtain SATA Settings page from Identify Device Data Log, 2331 /* Obtain SATA Settings page from Identify Device Data Log,
2332 * which contains DevSlp timing variables etc. 2332 * which contains DevSlp timing variables etc.
2333 * Exclude old devices with ata_id_has_ncq()
2334 */ 2333 */
2335 if (ata_id_has_ncq(dev->id)) { 2334 if (ata_id_has_hw_feature_ctrl(dev->id)) {
2336 err_mask = ata_read_log_page(dev, 2335 err_mask = ata_read_log_page(dev,
2337 ATA_LOG_SATA_ID_DEV_DATA, 2336 ATA_LOG_SATA_ID_DEV_DATA,
2338 ATA_LOG_SATA_SETTINGS, 2337 ATA_LOG_SATA_SETTINGS,