diff options
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-pmp.c | 33 |
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) { |