From: oliviermartin Date: Mon, 26 Mar 2012 10:46:25 +0000 (+0000) Subject: ArmPkg/PL390Gic: Introduced PcdGicSgiIntId to define which SGI is used for core synch... X-Git-Tag: edk2-stable201903~13551 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=be613c8b2cae701a0449c21e1c9df28a04daacbf;hp=9253410646466768a15099ac169f9ee852b2f563 ArmPkg/PL390Gic: Introduced PcdGicSgiIntId to define which SGI is used for core synchronisation By default this PCD is set to use SGI #0. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13123 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec index c12de9481b..65d4274877 100644 --- a/ArmPkg/ArmPkg.dec +++ b/ArmPkg/ArmPkg.dec @@ -83,6 +83,7 @@ gArmTokenSpaceGuid.PcdGicDistributorBase|0|UINT32|0x0000000C gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0|UINT32|0x0000000D gArmTokenSpaceGuid.PcdGicNumInterrupts|96|UINT32|0x00000023 + gArmTokenSpaceGuid.PcdGicSgiIntId|0|UINT32|0x00000025 # # ARM Secure Firmware PCDs diff --git a/ArmPkg/Drivers/PL390Gic/PL390Gic.c b/ArmPkg/Drivers/PL390Gic/PL390Gic.c index 9da5cc4b59..25daabeb1d 100644 --- a/ArmPkg/Drivers/PL390Gic/PL390Gic.c +++ b/ArmPkg/Drivers/PL390Gic/PL390Gic.c @@ -15,6 +15,7 @@ #include #include #include +#include VOID EFIAPI @@ -24,7 +25,7 @@ ArmGicSendSgiTo ( IN INTN CPUTargetList ) { - MmioWrite32 (GicDistributorBase + ARM_GIC_ICDSGIR, ((TargetListFilter & 0x3) << 24) | ((CPUTargetList & 0xFF) << 16)); + MmioWrite32 (GicDistributorBase + ARM_GIC_ICDSGIR, ((TargetListFilter & 0x3) << 24) | ((CPUTargetList & 0xFF) << 16) | PcdGet32(PcdGicSgiIntId)); } UINT32 @@ -39,7 +40,7 @@ ArmGicAcknowledgeSgiFrom ( InterruptId = MmioRead32 (GicInterruptInterfaceBase + ARM_GIC_ICCIAR); // Check if the Interrupt ID is valid, The read from Interrupt Ack register returns CPU ID and Interrupt ID - if (((CoreId & 0x7) << 10) == (InterruptId & 0x1C00)) { + if ((((CoreId & 0x7) << 10) | PcdGet32(PcdGicSgiIntId)) == InterruptId) { // Got SGI number 0 hence signal End of Interrupt by writing to ICCEOIR MmioWrite32 (GicInterruptInterfaceBase + ARM_GIC_ICCEIOR, InterruptId); return 1; diff --git a/ArmPkg/Drivers/PL390Gic/PL390GicLib.inf b/ArmPkg/Drivers/PL390Gic/PL390GicLib.inf index cae5c2b24c..805ed4fcc7 100644 --- a/ArmPkg/Drivers/PL390Gic/PL390GicLib.inf +++ b/ArmPkg/Drivers/PL390Gic/PL390GicLib.inf @@ -26,3 +26,6 @@ [Packages] ArmPkg/ArmPkg.dec MdePkg/MdePkg.dec + +[FixedPcd] + gArmTokenSpaceGuid.PcdGicSgiIntId diff --git a/ArmPkg/Drivers/PL390Gic/PL390GicSecLib.inf b/ArmPkg/Drivers/PL390Gic/PL390GicSecLib.inf index cf575e4cf2..13085221ca 100644 --- a/ArmPkg/Drivers/PL390Gic/PL390GicSecLib.inf +++ b/ArmPkg/Drivers/PL390Gic/PL390GicSecLib.inf @@ -34,4 +34,4 @@ [FixedPcd.common] gArmTokenSpaceGuid.PcdGicNumInterrupts - + gArmTokenSpaceGuid.PcdGicSgiIntId