diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 4b6b209..7d68db9 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -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");
                }
