aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-pmp.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
index 61c59ee45ce9..1c41722bb7e2 100644
--- a/drivers/ata/libata-pmp.c
+++ b/drivers/ata/libata-pmp.c
@@ -389,9 +389,13 @@ static void sata_pmp_quirks(struct ata_port *ap)
389 /* link reports offline after LPM */ 389 /* link reports offline after LPM */
390 link->flags |= ATA_LFLAG_NO_LPM; 390 link->flags |= ATA_LFLAG_NO_LPM;
391 391
392 /* Class code report is unreliable. */ 392 /*
393 * Class code report is unreliable and SRST times
394 * out under certain configurations.
395 */
393 if (link->pmp < 5) 396 if (link->pmp < 5)
394 link->flags |= ATA_LFLAG_ASSUME_ATA; 397 link->flags |= ATA_LFLAG_NO_SRST |
398 ATA_LFLAG_ASSUME_ATA;
395 399
396 /* port 5 is for SEMB device and it doesn't like SRST */ 400 /* port 5 is for SEMB device and it doesn't like SRST */
397 if (link->pmp == 5) 401 if (link->pmp == 5)
@@ -399,20 +403,17 @@ static void sata_pmp_quirks(struct ata_port *ap)
399 ATA_LFLAG_ASSUME_SEMB; 403 ATA_LFLAG_ASSUME_SEMB;
400 } 404 }
401 } else if (vendor == 0x1095 && devid == 0x4723) { 405 } else if (vendor == 0x1095 && devid == 0x4723) {
402 /* sil4723 quirks */ 406 /*
403 ata_for_each_link(link, ap, EDGE) { 407 * sil4723 quirks
404 /* link reports offline after LPM */ 408 *
405 link->flags |= ATA_LFLAG_NO_LPM; 409 * Link reports offline after LPM. Class code report is
406 410 * unreliable. SIMG PMPs never got SRST reliable and the
407 /* class code report is unreliable */ 411 * config device at port 2 locks up on SRST.
408 if (link->pmp < 2) 412 */
409 link->flags |= ATA_LFLAG_ASSUME_ATA; 413 ata_for_each_link(link, ap, EDGE)
410 414 link->flags |= ATA_LFLAG_NO_LPM |
411 /* the config device at port 2 locks up on SRST */ 415 ATA_LFLAG_NO_SRST |
412 if (link->pmp == 2) 416 ATA_LFLAG_ASSUME_ATA;
413 link->flags |= ATA_LFLAG_NO_SRST |
414 ATA_LFLAG_ASSUME_ATA;
415 }
416 } else if (vendor == 0x1095 && devid == 0x4726) { 417 } else if (vendor == 0x1095 && devid == 0x4726) {
417 /* sil4726 quirks */ 418 /* sil4726 quirks */
418 ata_for_each_link(link, ap, EDGE) { 419 ata_for_each_link(link, ap, EDGE) {