• Lorenzo Pieralisi's avatar
    irqchip/gic-v3: Workaround for GIC-700 erratum 2941627 · 6fe5c68e
    Lorenzo Pieralisi authored
    GIC700 erratum 2941627 may cause GIC-700 missing SPIs wake
    requests when SPIs are deactivated while targeting a
    sleeping CPU - ie a CPU for which the redistributor:
    
    GICR_WAKER.ProcessorSleep == 1
    
    This runtime situation can happen if an SPI that has been
    activated on a core is retargeted to a different core, it
    becomes pending and the target core subsequently enters a
    power state quiescing the respective redistributor.
    
    When this situation is hit, the de-activation carried out
    on the core that activated the SPI (through either ICC_EOIR1_EL1
    or ICC_DIR_EL1 register writes) does not trigger a wake
    requests for the sleeping GIC redistributor even if the SPI
    is pending.
    
    Work around the erratum by de-activating the SPI using the
    redistributor GICD_ICACTIVER register if the runtime
    conditions require it (ie the IRQ was retargeted between
    activation and de-activation).
    Signed-off-by: default avatarLorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230704155034.148262-1-lpieralisi@kernel.org
    6fe5c68e
irq-gic-v3.c 65.8 KB