On Fri, Apr 28, 2023 at 9:23 AM Niklas Cassel <n...@flawful.org> wrote: > > From: Niklas Cassel <niklas.cas...@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.cas...@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 >