• Pang Raymond's avatar
    AHCI: Clear GHC.IS to prevent unexpectly asserting INTx · 0516900a
    Pang Raymond authored
    Due to PCI subsystem behaviour, unloading AHCI driver will disable
    MSI and enable INTx. When HBA supports MSIx or Multiple MSI, Driver's
    irq handler doesn't clear GHC.IS register. It works well when reading or
    writing data and GHC.IS is always non-zero. But when unloading driver
    (or any other operation which causes disable MSIx and enable INTx), PCI
     subsystem uses config write(Rx04.bit10) to enable INTx. Because
    GHC.IS is non-zero, HBA will falsely assume some port needs interrupt
    service. Then it asserts INTx. To make things worse, when AHCI controller
    shares the same interrupt pin with other PCI device, that PCI device's ISR
    will be called and nobody de-asserts previous INTx.
    This patch clears GHC.IS in ahci_port_stop() even when using MSIx or
    MMSI to prevent this case. It ensures GHC.IS is zero before PCI subsystem
    enables INTx.
    
    tj: Minor updates to the comment.
    Signed-off-by: default avatarRaymond Pang <raymond_rule@hotmail.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    0516900a
libahci.c 66.5 KB