From bebda7ceec3d3024c76b3c2ed0c9b4e502a13d61 Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Fri, 10 May 2013 12:41:27 +0000 Subject: ArmPlatformPkg/ArmPlatformLib: Added support for ArmPlatformIsPrimaryCore() Checking if a core if the primary/boot core used to be done with the macro IS_PRIMARY_CORE(). Some platforms exposes configuration registers to change the primary core. Replacing the macro IS_PRIMARY_CORE() by ArmPlatformIsPrimaryCore() allows some flexibility in the way to check the primary core. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin Reviewed-by: Leif Lindholm Acked-by: Ryan Harkin git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14344 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPkg/Include/AsmMacroIoLib.h | 22 +++++++++++++++------- ArmPkg/Include/AsmMacroIoLib.inc | 4 ++++ ArmPkg/Include/Library/ArmLib.h | 1 - 3 files changed, 19 insertions(+), 8 deletions(-) (limited to 'ArmPkg/Include') diff --git a/ArmPkg/Include/AsmMacroIoLib.h b/ArmPkg/Include/AsmMacroIoLib.h index c8692fcfd7..c507329741 100644 --- a/ArmPkg/Include/AsmMacroIoLib.h +++ b/ArmPkg/Include/AsmMacroIoLib.h @@ -122,9 +122,12 @@ // Convert the (ClusterId,CoreId) into a Core Position // We assume there are 4 cores per cluster -#define GetCorePositionFromMpId(Pos, MpId, Tmp) \ - lsr Pos, MpId, #6 ; \ - and Tmp, MpId, #3 ; \ +// Note: 0xFFFF is the magic value for ARM_CORE_MASK | ARM_CLUSTER_MASK +#define GetCorePositionFromMpId(Pos, MpId, Tmp) \ + ldr Tmp, =0xFFFF \ + and MpId, Tmp \ + lsr Pos, MpId, #6 ; \ + and Tmp, MpId, #3 ; \ add Pos, Pos, Tmp // Reserve a region at the top of the Primary Core stack @@ -207,10 +210,15 @@ _InitializePrimaryStackEnd: #define LoadConstantToReg(Data, Reg) \ ldr Reg, =Data - -#define GetCorePositionFromMpId(Pos, MpId, Tmp) \ - lsr Pos, MpId, #6 ; \ - and Tmp, MpId, #3 ; \ + +// Convert the (ClusterId,CoreId) into a Core Position +// We assume there are 4 cores per cluster +// Note: 0xFFFF is the magic value for ARM_CORE_MASK | ARM_CLUSTER_MASK +#define GetCorePositionFromMpId(Pos, MpId, Tmp) \ + ldr Tmp, =0xFFFF ; \ + and MpId, Tmp ; \ + lsr Pos, MpId, #6 ; \ + and Tmp, MpId, #3 ; \ add Pos, Pos, Tmp #define SetPrimaryStack(StackTop, GlobalSize, Tmp) \ diff --git a/ArmPkg/Include/AsmMacroIoLib.inc b/ArmPkg/Include/AsmMacroIoLib.inc index 1ca99fdd1d..5796adcb12 100644 --- a/ArmPkg/Include/AsmMacroIoLib.inc +++ b/ArmPkg/Include/AsmMacroIoLib.inc @@ -82,6 +82,10 @@ MACRO GetCorePositionFromMpId $Pos, $MpId, $Tmp + ;Note: The ARM macro does not support the pre-processing. 0xFF and (0xFF << 8) are the values of + ; ARM_CORE_MASK and ARM_CLUSTER_MASK + mov $Tmp, #(0xFF :OR: (0xFF << 8)) + and $MpId, $Tmp lsr $Pos, $MpId, #6 and $Tmp, $MpId, #3 add $Pos, $Pos, $Tmp diff --git a/ArmPkg/Include/Library/ArmLib.h b/ArmPkg/Include/Library/ArmLib.h index b12be1424e..75f7755362 100644 --- a/ArmPkg/Include/Library/ArmLib.h +++ b/ArmPkg/Include/Library/ArmLib.h @@ -112,7 +112,6 @@ typedef enum { // // ARM MP Core IDs // -#define IS_PRIMARY_CORE(MpId) (((MpId) & PcdGet32(PcdArmPrimaryCoreMask)) == PcdGet32(PcdArmPrimaryCore)) #define ARM_CORE_MASK 0xFF #define ARM_CLUSTER_MASK (0xFF << 8) #define GET_CORE_ID(MpId) ((MpId) & ARM_CORE_MASK) -- cgit v1.2.3