• P
    PCI: aardvark: Fix support for PME requester on emulated bridge · 273ddd86
    Pali Rohár 提交于
    Enable aardvark PME interrupt unconditionally by unmasking it and read PME
    requester ID to emulated bridge config space immediately after receiving
    interrupt.
    
    PME requester ID is stored in the PCIE_MSG_LOG_REG register, which contains
    the last inbound message. So when new inbound message is received by HW
    (including non-PM), the content in PCIE_MSG_LOG_REG register is replaced by
    a new value.
    
    PCIe specification mandates that subsequent PMEs are kept pending until the
    PME Status Register bit is cleared by software by writing a 1b.
    
    Support for masking/unmasking PME interrupt on emulated bridge via
    PCI_EXP_RTCTL_PMEIE bit is now implemented only in emulated bridge config
    space, to ensure that we do not miss any aardvark PME interrupt.
    
    Reading of PCI_EXP_RTCAP and PCI_EXP_RTSTA registers is simplified as final
    value is now always stored into emulated bridge config space by the
    interrupt handler, so there is no need to implement support for these
    registers in read_pcie callback.
    
    Clearing of W1C bit PCI_EXP_RTSTA_PME is now also simplified as it is done
    by pci-bridge-emul.c code for emulated bridge config space. So there is no
    need to implement support for clearing this bit in write_pcie callback.
    
    Link: https://lore.kernel.org/r/20220110015018.26359-18-kabel@kernel.orgSigned-off-by: NPali Rohár <pali@kernel.org>
    Signed-off-by: NMarek Behún <kabel@kernel.org>
    Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    273ddd86
pci-aardvark.c 54.5 KB