ppc/pnv: Fix loss of LPC SERIRQ interrupts
authorGlenn Miles <milesg@linux.vnet.ibm.com>
Fri, 24 May 2024 18:24:14 +0000 (13:24 -0500)
committerNicholas Piggin <npiggin@gmail.com>
Thu, 25 Jul 2024 23:21:06 +0000 (09:21 +1000)
commitc6e07f03f7270799a26eb79e17ac40078ad94e5c
tree987dd44bc798cdc843f660034f53f91942430eec
parent977e789c4a8ed813d4ab03f17ea20a575bf20cd1
ppc/pnv: Fix loss of LPC SERIRQ interrupts

The LPC HC irq status register bits are set when an LPC IRQSER input is
asserted. These irq status bits drive the PSI irq to the CPU interrupt
controller. The LPC HC irq status bits are cleared by software writing
to the register with 1's for the bits to clear.

Existing register write was clearing the irq status bits even when the
input was asserted, this results in interrupts being lost.

This fix changes the behavior to keep track of the device IRQ status
in internal state that is separate from the irq status register, and
only allowing the irq status bits to be cleared if the associated
input is not asserted.

Signed-off-by: Glenn Miles <milesg@linux.ibm.com>
[np: rebased before P9 PSI SERIRQ patch, adjust changelog/comments]
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
hw/ppc/pnv_lpc.c
include/hw/ppc/pnv_lpc.h