ArmPlatformPkg/PrePeiCore: Drop secondary stack handling
This SEC driver is single CPU only now, so all of the secondary stack handling is dead code, and can be removed. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
96c8e75681
commit
9c1bc36ad1
|
@ -30,41 +30,23 @@ ASM_FUNC(_ModuleEntryPoint)
|
|||
b ASM_PFX(MainEntryPoint)
|
||||
|
||||
ASM_PFX(MainEntryPoint):
|
||||
// Identify CPU ID
|
||||
bl ASM_PFX(ArmReadMpidr)
|
||||
// Keep a copy of the MpId register value
|
||||
mov x5, x0
|
||||
|
||||
// Is it the Primary Core ?
|
||||
bl ASM_PFX(ArmPlatformIsPrimaryCore)
|
||||
|
||||
// Get the top of the primary stacks (and the base of the secondary stacks)
|
||||
MOV64 (x1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
||||
|
||||
// x0 is equal to 1 if I am the primary core
|
||||
cmp x0, #1
|
||||
b.eq _SetupPrimaryCoreStack
|
||||
// Set up the stack pointer
|
||||
mov sp, x1
|
||||
|
||||
_SetupSecondaryCoreStack:
|
||||
// x1 contains the base of the secondary stacks
|
||||
// Apply the init value to the entire stack
|
||||
MOV64 (x8, FixedPcdGet64 (PcdCPUCoresStackBase))
|
||||
MOV64 (x9, FixedPcdGet32 (PcdInitValueInTempStack) |\
|
||||
FixedPcdGet32 (PcdInitValueInTempStack) << 32)
|
||||
0:stp x9, x9, [x8], #16
|
||||
cmp x8, x1
|
||||
b.lt 0b
|
||||
|
||||
// Get the Core Position
|
||||
mov x6, x1 // Save base of the secondary stacks
|
||||
mov x0, x5
|
||||
bl ASM_PFX(ArmPlatformGetCorePosition)
|
||||
// The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack
|
||||
add x0, x0, #1
|
||||
|
||||
// StackOffset = CorePos * StackSize
|
||||
MOV32 (x2, FixedPcdGet32(PcdCPUCoreSecondaryStackSize))
|
||||
mul x0, x0, x2
|
||||
// SP = StackBase + StackOffset
|
||||
add sp, x6, x0
|
||||
|
||||
_PrepareArguments:
|
||||
// The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector
|
||||
MOV64 (x2, FixedPcdGet64(PcdFvBaseAddress))
|
||||
ldr x1, [x2, #8]
|
||||
ldr x0, [x2, #8]
|
||||
|
||||
// Move sec startup address into a data register
|
||||
// Ensure we're jumping to FV version of the code (not boot remapped alias)
|
||||
|
@ -74,17 +56,6 @@ _PrepareArguments:
|
|||
mov x29, xzr
|
||||
|
||||
// Jump to PrePeiCore C code
|
||||
// x0 = mp_id
|
||||
// x1 = pei_core_address
|
||||
// x0 = pei_core_address
|
||||
mov x0, x5
|
||||
blr x3
|
||||
|
||||
_SetupPrimaryCoreStack:
|
||||
mov sp, x1
|
||||
MOV64 (x8, FixedPcdGet64 (PcdCPUCoresStackBase))
|
||||
MOV64 (x9, FixedPcdGet32 (PcdInitValueInTempStack) |\
|
||||
FixedPcdGet32 (PcdInitValueInTempStack) << 32)
|
||||
0:stp x9, x9, [x8], #16
|
||||
cmp x8, x1
|
||||
b.lt 0b
|
||||
b _PrepareArguments
|
||||
|
|
|
@ -11,54 +11,13 @@ ASM_FUNC(_ModuleEntryPoint)
|
|||
// Do early platform specific actions
|
||||
bl ASM_PFX(ArmPlatformPeiBootAction)
|
||||
|
||||
// Identify CPU ID
|
||||
bl ASM_PFX(ArmReadMpidr)
|
||||
// Keep a copy of the MpId register value
|
||||
mov r5, r0
|
||||
|
||||
// Is it the Primary Core ?
|
||||
bl ASM_PFX(ArmPlatformIsPrimaryCore)
|
||||
|
||||
// Get the top of the primary stacks (and the base of the secondary stacks)
|
||||
MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
||||
|
||||
// r0 is equal to 1 if I am the primary core
|
||||
cmp r0, #1
|
||||
beq _SetupPrimaryCoreStack
|
||||
|
||||
_SetupSecondaryCoreStack:
|
||||
// r1 contains the base of the secondary stacks
|
||||
|
||||
// Get the Core Position
|
||||
mov r6, r1 // Save base of the secondary stacks
|
||||
mov r0, r5
|
||||
bl ASM_PFX(ArmPlatformGetCorePosition)
|
||||
// The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack
|
||||
add r0, r0, #1
|
||||
|
||||
// StackOffset = CorePos * StackSize
|
||||
MOV32 (r2, FixedPcdGet32(PcdCPUCoreSecondaryStackSize))
|
||||
mul r0, r0, r2
|
||||
// SP = StackBase + StackOffset
|
||||
add sp, r6, r0
|
||||
|
||||
_PrepareArguments:
|
||||
// The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector
|
||||
MOV32 (r2, FixedPcdGet32(PcdFvBaseAddress))
|
||||
ldr r1, [r2, #4]
|
||||
|
||||
// Move sec startup address into a data register
|
||||
// Ensure we're jumping to FV version of the code (not boot remapped alias)
|
||||
ldr r3, =ASM_PFX(CEntryPoint)
|
||||
|
||||
// Jump to PrePeiCore C code
|
||||
// r0 = mp_id
|
||||
// r1 = pei_core_address
|
||||
mov r0, r5
|
||||
blx r3
|
||||
|
||||
_SetupPrimaryCoreStack:
|
||||
// Set up the stack pointer
|
||||
mov sp, r1
|
||||
|
||||
// Apply the init value to the entire stack
|
||||
MOV32 (r8, FixedPcdGet64 (PcdCPUCoresStackBase))
|
||||
MOV32 (r9, FixedPcdGet32 (PcdInitValueInTempStack))
|
||||
mov r10, r9
|
||||
|
@ -67,7 +26,15 @@ _SetupPrimaryCoreStack:
|
|||
0:stm r8!, {r9-r12}
|
||||
cmp r8, r1
|
||||
blt 0b
|
||||
b _PrepareArguments
|
||||
|
||||
_NeverReturn:
|
||||
b _NeverReturn
|
||||
// The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector
|
||||
MOV32 (r2, FixedPcdGet32(PcdFvBaseAddress))
|
||||
ldr r0, [r2, #4]
|
||||
|
||||
// Move sec startup address into a data register
|
||||
// Ensure we're jumping to FV version of the code (not boot remapped alias)
|
||||
ldr r3, =ASM_PFX(CEntryPoint)
|
||||
|
||||
// Jump to PrePeiCore C code
|
||||
// r0 = pei_core_address
|
||||
blx r3
|
||||
|
|
|
@ -81,7 +81,6 @@ PrintFirmwareVersion (
|
|||
|
||||
VOID
|
||||
CEntryPoint (
|
||||
IN UINTN MpId,
|
||||
IN EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint
|
||||
)
|
||||
{
|
||||
|
@ -128,7 +127,7 @@ CEntryPoint (
|
|||
SaveAndSetDebugTimerInterrupt (TRUE);
|
||||
|
||||
// Initialize the platform specific controllers
|
||||
ArmPlatformInitialize (MpId);
|
||||
ArmPlatformInitialize (ArmReadMpidr ());
|
||||
|
||||
// Goto primary Main.
|
||||
PrimaryMain (PeiCoreEntryPoint);
|
||||
|
|
|
@ -62,6 +62,5 @@
|
|||
|
||||
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase
|
||||
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
|
||||
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize
|
||||
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack
|
||||
|
|
Loading…
Reference in New Issue