[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] hw/ide/ahci: trigger either error IRQ or regular IRQ, not bo
|
From: |
Niklas Cassel |
|
Subject: |
Re: [PATCH] hw/ide/ahci: trigger either error IRQ or regular IRQ, not both |
|
Date: |
Thu, 26 Oct 2023 09:08:51 +0000 |
On Wed, Oct 11, 2023 at 03:12:20PM +0200, Niklas Cassel wrote:
> 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").
>
> Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
> ---
> hw/ide/ahci.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> index fcc5476e9e..7676e2d871 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);
> }
>
> --
> 2.41.0
>
Gentle ping :)
Kind regards,
Niklas