mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-17 01:17:23 +07:00
[libata sata_mv] handle lack of hardware nIEN support
Handle errata (it was unintentional on this h/w, whereas its intentional on others) whereby the nIEN bit in Device Control is ignored, leading to a situation where a hardware interrupt completes the qc before the polling code has a chance to. This will get fixed The Right Way(tm) once Albert Lee's irq-pio branch is merged, as the more natural PIO method on this hardware is interrupt-driven.
This commit is contained in:
parent
22374677d1
commit
a2c91a8819
@ -1219,6 +1219,10 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
|
|||||||
handled++;
|
handled++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ap &&
|
||||||
|
(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)))
|
||||||
|
continue;
|
||||||
|
|
||||||
err_mask = ac_err_mask(ata_status);
|
err_mask = ac_err_mask(ata_status);
|
||||||
|
|
||||||
shift = port << 1; /* (port * 2) */
|
shift = port << 1; /* (port * 2) */
|
||||||
@ -1237,7 +1241,8 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
|
|||||||
VPRINTK("port %u IRQ found for qc, "
|
VPRINTK("port %u IRQ found for qc, "
|
||||||
"ata_status 0x%x\n", port,ata_status);
|
"ata_status 0x%x\n", port,ata_status);
|
||||||
/* mark qc status appropriately */
|
/* mark qc status appropriately */
|
||||||
ata_qc_complete(qc, err_mask);
|
if (!(qc->tf.ctl & ATA_NIEN))
|
||||||
|
ata_qc_complete(qc, err_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user