Message ID | 20231109134300.1461632-55-mjt@tls.msk.ru |
---|---|
State | New |
Headers | show |
Series | Patch Round-up for stable 8.1.3, freeze on 2023-11-19 | expand |
09.11.2023 16:42, Michael Tokarev: > From: Niklas Cassel <niklas.cassel@wdc.com> > > According to AHCI 1.3.1, 5.3.8.1 RegFIS:Entry, if ERR_STAT is set, > we jump to state ERR:FatalTaskfile, which will raise a TFES IRQ > unconditionally, regardless if the I bit is set in the FIS or not. > > Thus, we should never raise a normal IRQ after having sent an error > IRQ. > > NOTE: for QEMU platforms that use SeaBIOS, this patch depends on QEMU > commit 784155cdcb02 ("seabios: update submodule to git snapshot"), and > QEMU commit 14f5a7bae4cb ("seabios: update binaries to git snapshot"), > which update SeaBIOS to a version that contains SeaBIOS commit 1281e340 > ("ahci: handle TFES irq correctly"). And as carefully stated in the commit message, this change should not come alone without seabios fix. I'll drop it from both stable series for now. /mjt
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index d0a774bc17..0cc538dfce 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -897,11 +897,10 @@ static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i) pr->tfdata = (ad->port.ifs[0].error << 8) | ad->port.ifs[0].status; + /* TFES IRQ is always raised if ERR_STAT is set, regardless of I bit. */ if (d2h_fis[2] & ERR_STAT) { ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_TFES); - } - - if (d2h_fis_i) { + } else if (d2h_fis_i) { ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_DHRS); }