irqchip/gic-v3: Support pseudo-NMIs when SCR_EL3.FIQ == 0
authorAlexandru Elisei <alexandru.elisei@arm.com>
Sat, 12 Sep 2020 15:37:07 +0000 (16:37 +0100)
committerMarc Zyngier <maz@kernel.org>
Sun, 13 Sep 2020 16:52:04 +0000 (17:52 +0100)
commit336780590990efa69596884114cad3f517b6333b
tree7476d504610b041dfeb517d447ff5022b9073e84
parent4e594ad1068ea1db359d6161f580f03edecf6cb0
irqchip/gic-v3: Support pseudo-NMIs when SCR_EL3.FIQ == 0

The GIC's internal view of the priority mask register and the assigned
interrupt priorities are based on whether GIC security is enabled and
whether firmware routes Group 0 interrupts to EL3. At the moment, we
support priority masking when ICC_PMR_EL1 and interrupt priorities are
either both modified by the GIC, or both left unchanged.

Trusted Firmware-A's default interrupt routing model allows Group 0
interrupts to be delivered to the non-secure world (SCR_EL3.FIQ == 0).
Unfortunately, this is precisely the case that the GIC driver doesn't
support: ICC_PMR_EL1 remains unchanged, but the GIC's view of interrupt
priorities is different from the software programmed values.

Support pseudo-NMIs when SCR_EL3.FIQ == 0 by using a different value to
mask regular interrupts. All the other values remain the same.

Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200912153707.667731-3-alexandru.elisei@arm.com
arch/arm64/include/asm/arch_gicv3.h
arch/arm64/include/asm/ptrace.h
arch/arm64/kernel/image-vars.h
drivers/irqchip/irq-gic-v3.c