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 <huangming@linux.alibaba.com>
Reviewed-by: Leif Lindholm <leif@nuviainc.com>
Tested-by: Ard Biesheuvel <ardb@kernel.org> # QEMU/kvm guest on ThunderX2
Tested-by: Quan Nguyen <quan@os.amperecomputing.com>
This commit is contained in:
Ming Huang 2021-02-25 11:32:12 +08:00 committed by mergify[bot]
parent f7ee9e9253
commit 0996a7883c
1 changed files with 4 additions and 1 deletions

View File

@ -30,6 +30,9 @@
#define ICENABLER_ADDRESS(base,offset) ((base) + \ #define ICENABLER_ADDRESS(base,offset) ((base) + \
ARM_GICR_CTLR_FRAME_SIZE + ARM_GICR_ICENABLER + 4 * (offset)) 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) * Return whether the Source interrupt index refers to a shared interrupt (SPI)
@ -236,7 +239,7 @@ ArmGicSetInterruptPriority (
} }
MmioAndThenOr32 ( MmioAndThenOr32 (
GicCpuRedistributorBase + ARM_GIC_ICDIPR + (4 * RegOffset), IPRIORITY_ADDRESS (GicCpuRedistributorBase, RegOffset),
~(0xff << RegShift), ~(0xff << RegShift),
Priority << RegShift Priority << RegShift
); );