|
@@ -1227,10 +1227,19 @@ fsm_start:
|
|
|
/* ATA PIO protocol */
|
|
|
if (unlikely((status & ATA_DRQ) == 0)) {
|
|
|
/* handle BSY=0, DRQ=0 as error */
|
|
|
- if (likely(status & (ATA_ERR | ATA_DF)))
|
|
|
+ if (likely(status & (ATA_ERR | ATA_DF))) {
|
|
|
/* device stops HSM for abort/error */
|
|
|
qc->err_mask |= AC_ERR_DEV;
|
|
|
- else {
|
|
|
+
|
|
|
+ /* If diagnostic failed and this is
|
|
|
+ * IDENTIFY, it's likely a phantom
|
|
|
+ * device. Mark hint.
|
|
|
+ */
|
|
|
+ if (qc->dev->horkage &
|
|
|
+ ATA_HORKAGE_DIAGNOSTIC)
|
|
|
+ qc->err_mask |=
|
|
|
+ AC_ERR_NODEV_HINT;
|
|
|
+ } else {
|
|
|
/* HSM violation. Let EH handle this.
|
|
|
* Phantom devices also trigger this
|
|
|
* condition. Mark hint.
|