|
@@ -1911,6 +1911,27 @@ static void ata_eh_link_report(struct ata_link *link)
|
|
|
ata_link_printk(link, KERN_ERR, "%s\n", desc);
|
|
|
}
|
|
|
|
|
|
+ if (ehc->i.serror)
|
|
|
+ ata_port_printk(ap, KERN_ERR,
|
|
|
+ "SError: { %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s}\n",
|
|
|
+ ehc->i.serror & SERR_DATA_RECOVERED ? "RecovData " : "",
|
|
|
+ ehc->i.serror & SERR_COMM_RECOVERED ? "RecovComm " : "",
|
|
|
+ ehc->i.serror & SERR_DATA ? "UnrecovData " : "",
|
|
|
+ ehc->i.serror & SERR_PERSISTENT ? "Persist " : "",
|
|
|
+ ehc->i.serror & SERR_PROTOCOL ? "Proto " : "",
|
|
|
+ ehc->i.serror & SERR_INTERNAL ? "HostInt " : "",
|
|
|
+ ehc->i.serror & SERR_PHYRDY_CHG ? "PHYRdyChg " : "",
|
|
|
+ ehc->i.serror & SERR_PHY_INT_ERR ? "PHYInt " : "",
|
|
|
+ ehc->i.serror & SERR_COMM_WAKE ? "CommWake " : "",
|
|
|
+ ehc->i.serror & SERR_10B_8B_ERR ? "10B8B " : "",
|
|
|
+ ehc->i.serror & SERR_DISPARITY ? "Dispar " : "",
|
|
|
+ ehc->i.serror & SERR_CRC ? "BadCRC " : "",
|
|
|
+ ehc->i.serror & SERR_HANDSHAKE ? "Handshk " : "",
|
|
|
+ ehc->i.serror & SERR_LINK_SEQ_ERR ? "LinkSeq " : "",
|
|
|
+ ehc->i.serror & SERR_TRANS_ST_ERROR ? "TrStaTrns " : "",
|
|
|
+ ehc->i.serror & SERR_UNRECOG_FIS ? "UnrecFIS " : "",
|
|
|
+ ehc->i.serror & SERR_DEV_XCHG ? "DevExch " : "" );
|
|
|
+
|
|
|
for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
|
|
|
static const char *dma_str[] = {
|
|
|
[DMA_BIDIRECTIONAL] = "bidi",
|
|
@@ -1942,6 +1963,30 @@ static void ata_eh_link_report(struct ata_link *link)
|
|
|
res->hob_lbal, res->hob_lbam, res->hob_lbah,
|
|
|
res->device, qc->err_mask, ata_err_string(qc->err_mask),
|
|
|
qc->err_mask & AC_ERR_NCQ ? " <F>" : "");
|
|
|
+
|
|
|
+ if (res->command & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ |
|
|
|
+ ATA_ERR) ) {
|
|
|
+ if (res->command & ATA_BUSY)
|
|
|
+ ata_dev_printk(qc->dev, KERN_ERR,
|
|
|
+ "status: { Busy }\n" );
|
|
|
+ else
|
|
|
+ ata_dev_printk(qc->dev, KERN_ERR,
|
|
|
+ "status: { %s%s%s%s}\n",
|
|
|
+ res->command & ATA_DRDY ? "DRDY " : "",
|
|
|
+ res->command & ATA_DF ? "DF " : "",
|
|
|
+ res->command & ATA_DRQ ? "DRQ " : "",
|
|
|
+ res->command & ATA_ERR ? "ERR " : "" );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cmd->command != ATA_CMD_PACKET &&
|
|
|
+ (res->feature & (ATA_ICRC | ATA_UNC | ATA_IDNF |
|
|
|
+ ATA_ABORTED)))
|
|
|
+ ata_dev_printk(qc->dev, KERN_ERR,
|
|
|
+ "error: { %s%s%s%s}\n",
|
|
|
+ res->feature & ATA_ICRC ? "ICRC " : "",
|
|
|
+ res->feature & ATA_UNC ? "UNC " : "",
|
|
|
+ res->feature & ATA_IDNF ? "IDNF " : "",
|
|
|
+ res->feature & ATA_ABORTED ? "ABRT " : "" );
|
|
|
}
|
|
|
}
|
|
|
|