[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[qemu-xen stable-4.18] hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is cleared



commit 2eaf7775fc05d65c9254530ea0fdbbcf910c92cd
Author:     Niklas Cassel <niklas.cassel@xxxxxxx>
AuthorDate: Fri Jun 9 16:08:41 2023 +0200
Commit:     Michael Tokarev <mjt@xxxxxxxxxx>
CommitDate: Sun Sep 10 19:39:41 2023 +0300

    hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is cleared
    
    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@xxxxxxx>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
    Message-id: 20230609140844.202795-6-nks@xxxxxxxxxxx
    Signed-off-by: John Snow <jsnow@xxxxxxxxxx>
    (cherry picked from commit d73b84d0b664e60fffb66f46e84d0db4a8e1c713)
    Signed-off-by: Michael Tokarev <mjt@xxxxxxxxxx>
---
 hw/ide/ahci.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 6299320ffb..a93a1878de 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
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#stable-4.18



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.