diff options
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-core.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index e85c2f8cf193..753b0152afd1 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -616,8 +616,11 @@ ata_dev_try_classify(struct ata_port *ap, unsigned int device, u8 *r_err) | |||
616 | if (r_err) | 616 | if (r_err) |
617 | *r_err = err; | 617 | *r_err = err; |
618 | 618 | ||
619 | /* see if device passed diags */ | 619 | /* see if device passed diags: if master then continue and warn later */ |
620 | if (err == 1) | 620 | if (err == 0 && device == 0) |
621 | /* diagnostic fail : do nothing _YET_ */ | ||
622 | ap->device[device].horkage |= ATA_HORKAGE_DIAGNOSTIC; | ||
623 | else if (err == 1) | ||
621 | /* do nothing */ ; | 624 | /* do nothing */ ; |
622 | else if ((device == 0) && (err == 0x81)) | 625 | else if ((device == 0) && (err == 0x81)) |
623 | /* do nothing */ ; | 626 | /* do nothing */ ; |
@@ -1523,6 +1526,18 @@ int ata_dev_configure(struct ata_device *dev, int print_info) | |||
1523 | cdb_intr_string); | 1526 | cdb_intr_string); |
1524 | } | 1527 | } |
1525 | 1528 | ||
1529 | if (dev->horkage & ATA_HORKAGE_DIAGNOSTIC) { | ||
1530 | /* Let the user know. We don't want to disallow opens for | ||
1531 | rescue purposes, or in case the vendor is just a blithering | ||
1532 | idiot */ | ||
1533 | if (print_info) { | ||
1534 | ata_dev_printk(dev, KERN_WARNING, | ||
1535 | "Drive reports diagnostics failure. This may indicate a drive\n"); | ||
1536 | ata_dev_printk(dev, KERN_WARNING, | ||
1537 | "fault or invalid emulation. Contact drive vendor for information.\n"); | ||
1538 | } | ||
1539 | } | ||
1540 | |||
1526 | ata_set_port_max_cmd_len(ap); | 1541 | ata_set_port_max_cmd_len(ap); |
1527 | 1542 | ||
1528 | /* limit bridge transfers to udma5, 200 sectors */ | 1543 | /* limit bridge transfers to udma5, 200 sectors */ |