Add fix for SiI3114 and SiI3512 chips bug, which caused sending R_ERR in
response to DMA activate FIS under certain circumstances. This is recommended fix from chip datasheet. If triggered, this bug most likely cause write command timeout. MFC after: 2 weeks
This commit is contained in:
parent
a250a687f7
commit
a6c48c7c72
@ -365,7 +365,15 @@ ata_sii_status(device_t dev)
|
||||
static void
|
||||
ata_sii_reset(device_t dev)
|
||||
{
|
||||
struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
|
||||
struct ata_channel *ch = device_get_softc(dev);
|
||||
int offset = ((ch->unit & 1) << 7) + ((ch->unit & 2) << 8);
|
||||
uint32_t val;
|
||||
|
||||
/* Apply R_ERR on DMA activate FIS errata workaround. */
|
||||
val = ATA_INL(ctlr->r_res2, 0x14c + offset);
|
||||
if ((val & 0x3) == 0x1)
|
||||
ATA_OUTL(ctlr->r_res2, 0x14c + offset, val & ~0x3);
|
||||
|
||||
if (ata_sata_phy_reset(dev, -1, 1))
|
||||
ata_generic_reset(dev);
|
||||
|
Loading…
Reference in New Issue
Block a user