aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/sata_mv.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 52e992ce59a4..239ea4778c56 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -133,7 +133,7 @@ enum {
133 133
134 MV_GENIIE_FLAGS = MV_COMMON_FLAGS | MV_6XXX_FLAGS | 134 MV_GENIIE_FLAGS = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
135 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA | 135 ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
136 ATA_FLAG_NCQ, 136 ATA_FLAG_NCQ | ATA_FLAG_AN,
137 137
138 CRQB_FLAG_READ = (1 << 0), 138 CRQB_FLAG_READ = (1 << 0),
139 CRQB_TAG_SHIFT = 1, 139 CRQB_TAG_SHIFT = 1,
@@ -226,6 +226,7 @@ enum {
226 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */ 226 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */
227 SATA_ACTIVE_OFS = 0x350, 227 SATA_ACTIVE_OFS = 0x350,
228 SATA_FIS_IRQ_CAUSE_OFS = 0x364, 228 SATA_FIS_IRQ_CAUSE_OFS = 0x364,
229 SATA_FIS_IRQ_AN = (1 << 9), /* async notification */
229 230
230 LTMODE_OFS = 0x30c, 231 LTMODE_OFS = 0x30c,
231 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */ 232 LTMODE_BIT8 = (1 << 8), /* unknown, but necessary */
@@ -1849,8 +1850,17 @@ static void mv_err_intr(struct ata_port *ap)
1849 ata_ehi_push_desc(ehi, "edma_err_cause=%08x pp_flags=%08x", 1850 ata_ehi_push_desc(ehi, "edma_err_cause=%08x pp_flags=%08x",
1850 edma_err_cause, pp->pp_flags); 1851 edma_err_cause, pp->pp_flags);
1851 1852
1852 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) 1853 if (IS_GEN_IIE(hpriv) && (edma_err_cause & EDMA_ERR_TRANS_IRQ_7)) {
1853 ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause); 1854 ata_ehi_push_desc(ehi, "fis_cause=%08x", fis_cause);
1855 if (fis_cause & SATA_FIS_IRQ_AN) {
1856 u32 ec = edma_err_cause &
1857 ~(EDMA_ERR_TRANS_IRQ_7 | EDMA_ERR_IRQ_TRANSIENT);
1858 sata_async_notification(ap);
1859 if (!ec)
1860 return; /* Just an AN; no need for the nukes */
1861 ata_ehi_push_desc(ehi, "SDB notify");
1862 }
1863 }
1854 /* 1864 /*
1855 * All generations share these EDMA error cause bits: 1865 * All generations share these EDMA error cause bits:
1856 */ 1866 */