• Joseph Lo's avatar
    ARM: tegra114: Reprogram GIC CPU interface to bypass IRQ on CPU PM entry · 7e8b15db
    Joseph Lo authored
    There is a difference between GICv1 and v2 when CPU in power management
    mode (aka CPU power down on Tegra). For GICv1, IRQ/FIQ interrupt lines
    going to CPU are same lines which are also used for wake-interrupt.
    Therefore, we cannot disable the GIC CPU interface if we need to use same
    interrupts for CPU wake purpose. This creates a race condition for CPU
    power off entry. Also, in GICv1, disabling GICv1 CPU interface puts GICv1
    into bypass mode such that incoming legacy IRQ/FIQ are sent to CPU, which
    means disabling GIC CPU interface doesn't really disable IRQ/FIQ to CPU.
    
    GICv2 provides a wake IRQ/FIQ (for wake-event purpose), which are not
    disabled by GIC CPU interface. This is done by adding a bypass override
    capability when the interrupts are disabled at the CPU interface. To
    support this, there are four bits about IRQ/FIQ BypassDisable in CPU
    interface Control Register. When the IRQ/FIQ not being driver by the
    CPU interface, each interrupt output signal can be deasserted rather
    than being driven by the legacy interrupt input.
    
    So the wake-event can be used as wakeup signals to SoC (system power
    controller).
    
    To prevent race conditions and ensure proper interrupt routing on
    Cortex-A15 CPUs when they are power-gated, add a CPU PM notifier
    call-back to reprogram the GIC CPU interface on PM entry. The
    GIC CPU interface will be reset back to its normal state by
    the common GIC CPU PM exit callback when the CPU wakes up.
    
    Based on the work by: Scott Williams <scwilliams@nvidia.com>
    Signed-off-by: default avatarJoseph Lo <josephl@nvidia.com>
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    7e8b15db
irq.c 6.92 KB