[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 6/9] hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is
From: |
John Snow |
Subject: |
Re: [PATCH 6/9] hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is cleared |
Date: |
Wed, 17 May 2023 17:21:39 -0400 |
On Fri, Apr 28, 2023 at 9:23 AM Niklas Cassel <nks@flawful.org> wrote:
>
> From: Niklas Cassel <niklas.cassel@wdc.com>
>
> According to AHCI 1.3.1 definition of PxSACT:
> This field is cleared when PxCMD.ST is written from a '1' to a '0' by
> software. This field is not cleared by a COMRESET or a software reset.
>
> According to AHCI 1.3.1 definition of PxCI:
> This field is also cleared when PxCMD.ST is written from a '1' to a '0'
> by software.
>
> Clearing PxCMD.ST is part of the error recovery procedure, see
> AHCI 1.3.1, section "6.2 Error Recovery".
>
> If we don't clear PxCI on error recovery, the previous command will
> incorrectly still be marked as pending after error recovery.
>
> Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
ACK.
> ---
> hw/ide/ahci.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> index 366929132b..2a59d0e0f5 100644
> --- a/hw/ide/ahci.c
> +++ b/hw/ide/ahci.c
> @@ -329,6 +329,11 @@ static void ahci_port_write(AHCIState *s, int port, int
> offset, uint32_t val)
> ahci_check_irq(s);
> break;
> case AHCI_PORT_REG_CMD:
> + if ((pr->cmd & PORT_CMD_START) && !(val & PORT_CMD_START)) {
> + pr->scr_act = 0;
> + pr->cmd_issue = 0;
> + }
> +
> /* Block any Read-only fields from being set;
> * including LIST_ON and FIS_ON.
> * The spec requires to set ICC bits to zero after the ICC change
> --
> 2.40.0
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH 6/9] hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is cleared,
John Snow <=