@@ -2644,14 +2644,23 @@ static void mv_err_intr(struct ata_port *ap)
ata_ehi_clear_desc(ehi);
ata_ehi_push_desc(ehi, "edma_err_cause=%08x pp_flags=%08x",
edma_err_cause, pp->pp_flags);
-
if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause);
if (fis_cause & FIS_IRQ_CAUSE_AN) {
u32 ec = edma_err_cause &
~(EDMA_ERR_TRANS_IRQ_7 | EDMA_ERR_IRQ_TRANSIENT);
+ u32 *gscr = ap->link.device->gscr;
+
sata_async_notification(ap);
- if (!ec)
+
+ /* Handle AN for JMB350 */
+ if (sata_pmp_attached(ap) &&
+ sata_pmp_gscr_vendor(gscr) == 0x197b &&
+ sata_pmp_gscr_devid(gscr) == 0x2352) {
+ err_mask |= AC_ERR_DEV;
+ action |= ATA_EH_RESET;
+ ata_ehi_push_desc(ehi, "JMB350 AN");
+ } else if (!ec)
return; /* Just an AN; no need for the nukes */
ata_ehi_push_desc(ehi, "SDB notify");
}