From 2dbcb8f0a3250395c0ea8436ac519b6908dc0ee7 Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Thu, 22 Sep 2011 23:05:20 +0000 Subject: ArmPlatformPkg: Changed memory model for the stacks In the previous version, every cores had the same stack size. To avoid to waste memory with secondary core stacks, the primary core stack size is now different from the secondary cores stack size. These are the Stack PCDs and their default values: gArmPlatformTokenSpaceGuid.PcdCPUCoresSecStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecPrimaryStackSize|0x10000 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecSecondaryStackSize|0x1000 gArmPlatformTokenSpaceGuid.PcdCPUCoresSecMonStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecMonStackSize|0x1000 gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0 gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize|0x1000 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12415 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPkg/Include/AsmMacroIoLib.h | 15 ++++++++++++++- ArmPkg/Include/AsmMacroIoLib.inc | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'ArmPkg') diff --git a/ArmPkg/Include/AsmMacroIoLib.h b/ArmPkg/Include/AsmMacroIoLib.h index 1ea2c33ffb..9ef3430aaa 100644 --- a/ArmPkg/Include/AsmMacroIoLib.h +++ b/ArmPkg/Include/AsmMacroIoLib.h @@ -168,6 +168,17 @@ #define LoadConstantToReg(Data, Reg) \ ldr Reg, =Data +#define GetCorePositionInStack(Pos, MpId, Tmp) \ + lsr Pos, MpId, #6 ; \ + and Tmp, MpId, #3 ; \ + add Pos, Pos, Tmp + +#define SetPrimaryStack(StackTop, GlobalSize, Tmp) \ + and Tmp, GlobalSize, #7 ; \ + rsbne Tmp, Tmp, #8 ; \ + add GlobalSize, GlobalSize, Tmp ; \ + sub sp, StackTop, GlobalSize + #else // @@ -229,8 +240,10 @@ // conditional load testing eq flag #define LoadConstantToRegIfEq(Data, Reg) LoadConstantToRegIfEqMacro Data, Reg +#define GetCorePositionInStack(Pos, MpId, Tmp) GetCorePositionInStack Pos, MpId, Tmp -#endif +#define SetPrimaryStack(StackTop,GlobalSize,Tmp) SetPrimaryStack StackTop, GlobalSize, Tmp +#endif #endif diff --git a/ArmPkg/Include/AsmMacroIoLib.inc b/ArmPkg/Include/AsmMacroIoLib.inc index 78e2ae2945..5644bf9b30 100644 --- a/ArmPkg/Include/AsmMacroIoLib.inc +++ b/ArmPkg/Include/AsmMacroIoLib.inc @@ -77,5 +77,21 @@ LoadConstantToRegMacro $Data, $Reg ldr $Reg, =($Data) MEND + + MACRO + GetCorePositionInStack $Pos, $MpId, $Tmp + lsr $Pos, $MpId, #6 + and $Tmp, $MpId, #3 + add $Pos, $Pos, $Tmp + MEND + + ; The reserved place must be 8-bytes aligned for pushing 64-bit variable on the stack + MACRO + SetPrimaryStack $StackTop, $GlobalSize, $Tmp + and $Tmp, $GlobalSize, #7 + rsbne $Tmp, $Tmp, #8 + add $GlobalSize, $GlobalSize, $Tmp + sub sp, $StackTop, $GlobalSize + MEND END -- cgit v1.2.3