From 0996a7883c6dd939d6e769b1ce1fd2b2e250bcfb Mon Sep 17 00:00:00 2001 From: Ming Huang Date: Thu, 25 Feb 2021 11:32:12 +0800 Subject: [PATCH] ArmPkg/ArmGicLib: Fix GICR_IPRIORITYR address wrong issue The register address of GICR_IPRIORITYR is in SGI_base frame. Add IPRIORITY_ADDRESS macro for getting GICR_IPRIORITYR address. Otherwise GIC RAS error(Uncorrected software error) may report in ArmGicDxe. This resolves BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3236 Signed-off-by: Ming Huang Reviewed-by: Leif Lindholm Tested-by: Ard Biesheuvel # QEMU/kvm guest on ThunderX2 Tested-by: Quan Nguyen --- ArmPkg/Drivers/ArmGic/ArmGicLib.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ArmPkg/Drivers/ArmGic/ArmGicLib.c b/ArmPkg/Drivers/ArmGic/ArmGicLib.c index 5d04ed3dac..6b01c88206 100644 --- a/ArmPkg/Drivers/ArmGic/ArmGicLib.c +++ b/ArmPkg/Drivers/ArmGic/ArmGicLib.c @@ -30,6 +30,9 @@ #define ICENABLER_ADDRESS(base,offset) ((base) + \ ARM_GICR_CTLR_FRAME_SIZE + ARM_GICR_ICENABLER + 4 * (offset)) +#define IPRIORITY_ADDRESS(base,offset) ((base) + \ + ARM_GICR_CTLR_FRAME_SIZE + ARM_GIC_ICDIPR + 4 * (offset)) + /** * * Return whether the Source interrupt index refers to a shared interrupt (SPI) @@ -236,7 +239,7 @@ ArmGicSetInterruptPriority ( } MmioAndThenOr32 ( - GicCpuRedistributorBase + ARM_GIC_ICDIPR + (4 * RegOffset), + IPRIORITY_ADDRESS (GicCpuRedistributorBase, RegOffset), ~(0xff << RegShift), Priority << RegShift );