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)
|
b ASM_PFX(MainEntryPoint)
|
||||||
|
|
||||||
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)
|
// Get the top of the primary stacks (and the base of the secondary stacks)
|
||||||
MOV64 (x1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
MOV64 (x1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
||||||
|
|
||||||
// x0 is equal to 1 if I am the primary core
|
// Set up the stack pointer
|
||||||
cmp x0, #1
|
mov sp, x1
|
||||||
b.eq _SetupPrimaryCoreStack
|
|
||||||
|
|
||||||
_SetupSecondaryCoreStack:
|
// Apply the init value to the entire stack
|
||||||
// x1 contains the base of the secondary stacks
|
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
|
// The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector
|
||||||
MOV64 (x2, FixedPcdGet64(PcdFvBaseAddress))
|
MOV64 (x2, FixedPcdGet64(PcdFvBaseAddress))
|
||||||
ldr x1, [x2, #8]
|
ldr x0, [x2, #8]
|
||||||
|
|
||||||
// Move sec startup address into a data register
|
// Move sec startup address into a data register
|
||||||
// Ensure we're jumping to FV version of the code (not boot remapped alias)
|
// Ensure we're jumping to FV version of the code (not boot remapped alias)
|
||||||
|
@ -74,17 +56,6 @@ _PrepareArguments:
|
||||||
mov x29, xzr
|
mov x29, xzr
|
||||||
|
|
||||||
// Jump to PrePeiCore C code
|
// Jump to PrePeiCore C code
|
||||||
// x0 = mp_id
|
// x0 = pei_core_address
|
||||||
// x1 = pei_core_address
|
|
||||||
mov x0, x5
|
mov x0, x5
|
||||||
blr x3
|
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
|
// Do early platform specific actions
|
||||||
bl ASM_PFX(ArmPlatformPeiBootAction)
|
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)
|
// Get the top of the primary stacks (and the base of the secondary stacks)
|
||||||
MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))
|
||||||
|
|
||||||
// r0 is equal to 1 if I am the primary core
|
// Set up the stack pointer
|
||||||
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:
|
|
||||||
mov sp, r1
|
mov sp, r1
|
||||||
|
|
||||||
|
// Apply the init value to the entire stack
|
||||||
MOV32 (r8, FixedPcdGet64 (PcdCPUCoresStackBase))
|
MOV32 (r8, FixedPcdGet64 (PcdCPUCoresStackBase))
|
||||||
MOV32 (r9, FixedPcdGet32 (PcdInitValueInTempStack))
|
MOV32 (r9, FixedPcdGet32 (PcdInitValueInTempStack))
|
||||||
mov r10, r9
|
mov r10, r9
|
||||||
|
@ -67,7 +26,15 @@ _SetupPrimaryCoreStack:
|
||||||
0:stm r8!, {r9-r12}
|
0:stm r8!, {r9-r12}
|
||||||
cmp r8, r1
|
cmp r8, r1
|
||||||
blt 0b
|
blt 0b
|
||||||
b _PrepareArguments
|
|
||||||
|
|
||||||
_NeverReturn:
|
// The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector
|
||||||
b _NeverReturn
|
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
|
VOID
|
||||||
CEntryPoint (
|
CEntryPoint (
|
||||||
IN UINTN MpId,
|
|
||||||
IN EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint
|
IN EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -128,7 +127,7 @@ CEntryPoint (
|
||||||
SaveAndSetDebugTimerInterrupt (TRUE);
|
SaveAndSetDebugTimerInterrupt (TRUE);
|
||||||
|
|
||||||
// Initialize the platform specific controllers
|
// Initialize the platform specific controllers
|
||||||
ArmPlatformInitialize (MpId);
|
ArmPlatformInitialize (ArmReadMpidr ());
|
||||||
|
|
||||||
// Goto primary Main.
|
// Goto primary Main.
|
||||||
PrimaryMain (PeiCoreEntryPoint);
|
PrimaryMain (PeiCoreEntryPoint);
|
||||||
|
|
|
@ -62,6 +62,5 @@
|
||||||
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase
|
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase
|
||||||
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
|
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
|
||||||
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize
|
|
||||||
|
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack
|
gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack
|
||||||
|
|
Loading…
Reference in New Issue