aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c19
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 */