mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-31 01:24:12 +02:00
ArmPlatformPkg/ArmPlatformStackLib: Do not directly use PcdArmPrimaryCore
To make the code platform independent we should not use PcdArmPrimaryCore in libraries other than the platform specific libraries. Some platforms allow to change the primary core with external registers. These platforms do not use PcdArmPrimaryCore to identify the primary CPU. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14938 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
99267097f3
commit
8a25bd7c54
@ -22,10 +22,11 @@ GCC_ASM_EXPORT(ArmPlatformStackSet)
|
|||||||
GCC_ASM_EXPORT(ArmPlatformStackSetPrimary)
|
GCC_ASM_EXPORT(ArmPlatformStackSetPrimary)
|
||||||
GCC_ASM_EXPORT(ArmPlatformStackSetSecondary)
|
GCC_ASM_EXPORT(ArmPlatformStackSetSecondary)
|
||||||
|
|
||||||
|
GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)
|
||||||
GCC_ASM_IMPORT(ArmPlatformGetCorePosition)
|
GCC_ASM_IMPORT(ArmPlatformGetCorePosition)
|
||||||
|
GCC_ASM_IMPORT(ArmPlatformGetPrimaryCoreMpId)
|
||||||
|
|
||||||
GCC_ASM_IMPORT(gPcd_FixedAtBuild_PcdCoreCount)
|
GCC_ASM_IMPORT(gPcd_FixedAtBuild_PcdCoreCount)
|
||||||
GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)
|
|
||||||
|
|
||||||
//VOID
|
//VOID
|
||||||
//ArmPlatformStackSet (
|
//ArmPlatformStackSet (
|
||||||
@ -35,14 +36,29 @@ GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)
|
|||||||
// IN UINTN SecondaryStackSize
|
// IN UINTN SecondaryStackSize
|
||||||
// );
|
// );
|
||||||
ASM_PFX(ArmPlatformStackSet):
|
ASM_PFX(ArmPlatformStackSet):
|
||||||
|
// Save parameters
|
||||||
|
mov r6, r3
|
||||||
|
mov r5, r2
|
||||||
|
mov r4, r1
|
||||||
|
mov r3, r0
|
||||||
|
|
||||||
|
// Save the Link register
|
||||||
|
mov r7, lr
|
||||||
|
|
||||||
// Identify Stack
|
// Identify Stack
|
||||||
// Mask for ClusterId|CoreId
|
mov r0, r1
|
||||||
LoadConstantToReg (0xFFFF, r4)
|
bl ASM_PFX(ArmPlatformIsPrimaryCore)
|
||||||
and r1, r1, r4
|
cmp r0, #1
|
||||||
// Is it the Primary Core ?
|
|
||||||
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r4)
|
// Restore parameters
|
||||||
ldr r4, [r4]
|
mov r0, r3
|
||||||
cmp r1, r4
|
mov r1, r4
|
||||||
|
mov r2, r5
|
||||||
|
mov r3, r6
|
||||||
|
|
||||||
|
// Restore the Link register
|
||||||
|
mov lr, r7
|
||||||
|
|
||||||
beq ASM_PFX(ArmPlatformStackSetPrimary)
|
beq ASM_PFX(ArmPlatformStackSetPrimary)
|
||||||
bne ASM_PFX(ArmPlatformStackSetSecondary)
|
bne ASM_PFX(ArmPlatformStackSetSecondary)
|
||||||
|
|
||||||
@ -87,8 +103,7 @@ ASM_PFX(ArmPlatformStackSetSecondary):
|
|||||||
mov r5, r0
|
mov r5, r0
|
||||||
|
|
||||||
// Get Primary Core Position
|
// Get Primary Core Position
|
||||||
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
|
bl ASM_PFX(ArmPlatformGetPrimaryCoreMpId)
|
||||||
ldr r0, [r0]
|
|
||||||
bl ASM_PFX(ArmPlatformGetCorePosition)
|
bl ASM_PFX(ArmPlatformGetCorePosition)
|
||||||
|
|
||||||
// Get Secondary Core Position. We should get consecutive secondary stack number from 1...(CoreCount-1)
|
// Get Secondary Core Position. We should get consecutive secondary stack number from 1...(CoreCount-1)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// Copyright (c) 2012, ARM Limited. All rights reserved.
|
// Copyright (c) 2012-2013, ARM Limited. All rights reserved.
|
||||||
//
|
//
|
||||||
// This program and the accompanying materials
|
// This program and the accompanying materials
|
||||||
// are licensed and made available under the terms and conditions of the BSD License
|
// are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -21,10 +21,11 @@
|
|||||||
EXPORT ArmPlatformStackSetPrimary
|
EXPORT ArmPlatformStackSetPrimary
|
||||||
EXPORT ArmPlatformStackSetSecondary
|
EXPORT ArmPlatformStackSetSecondary
|
||||||
|
|
||||||
|
IMPORT ArmPlatformIsPrimaryCore
|
||||||
IMPORT ArmPlatformGetCorePosition
|
IMPORT ArmPlatformGetCorePosition
|
||||||
|
IMPORT ArmPlatformGetPrimaryCoreMpId
|
||||||
|
|
||||||
IMPORT _gPcd_FixedAtBuild_PcdCoreCount
|
IMPORT _gPcd_FixedAtBuild_PcdCoreCount
|
||||||
IMPORT _gPcd_FixedAtBuild_PcdArmPrimaryCore
|
|
||||||
|
|
||||||
PRESERVE8
|
PRESERVE8
|
||||||
AREA ArmPlatformStackLib, CODE, READONLY
|
AREA ArmPlatformStackLib, CODE, READONLY
|
||||||
@ -37,14 +38,29 @@
|
|||||||
// IN UINTN SecondaryStackSize
|
// IN UINTN SecondaryStackSize
|
||||||
// );
|
// );
|
||||||
ArmPlatformStackSet FUNCTION
|
ArmPlatformStackSet FUNCTION
|
||||||
|
// Save parameters
|
||||||
|
mov r6, r3
|
||||||
|
mov r5, r2
|
||||||
|
mov r4, r1
|
||||||
|
mov r3, r0
|
||||||
|
|
||||||
|
// Save the Link register
|
||||||
|
mov r7, lr
|
||||||
|
|
||||||
// Identify Stack
|
// Identify Stack
|
||||||
// Mask for ClusterId|CoreId
|
mov r0, r1
|
||||||
LoadConstantToReg (0xFFFF, r4)
|
bl ArmPlatformIsPrimaryCore
|
||||||
and r1, r1, r4
|
cmp r0, #1
|
||||||
// Is it the Primary Core ?
|
|
||||||
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r4)
|
// Restore parameters
|
||||||
ldr r4, [r4]
|
mov r0, r3
|
||||||
cmp r1, r4
|
mov r1, r4
|
||||||
|
mov r2, r5
|
||||||
|
mov r3, r6
|
||||||
|
|
||||||
|
// Restore the Link register
|
||||||
|
mov lr, r7
|
||||||
|
|
||||||
beq ArmPlatformStackSetPrimary
|
beq ArmPlatformStackSetPrimary
|
||||||
bne ArmPlatformStackSetSecondary
|
bne ArmPlatformStackSetSecondary
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
@ -91,8 +107,7 @@ ArmPlatformStackSetSecondary FUNCTION
|
|||||||
mov r5, r0
|
mov r5, r0
|
||||||
|
|
||||||
// Get Primary Core Position
|
// Get Primary Core Position
|
||||||
LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
|
bl ArmPlatformGetPrimaryCoreMpId
|
||||||
ldr r0, [r0]
|
|
||||||
bl ArmPlatformGetCorePosition
|
bl ArmPlatformGetCorePosition
|
||||||
|
|
||||||
// Get Secondary Core Position. We should get consecutive secondary stack number from 1...(CoreCount-1)
|
// Get Secondary Core Position. We should get consecutive secondary stack number from 1...(CoreCount-1)
|
||||||
|
@ -33,10 +33,8 @@
|
|||||||
[Sources.AARCH64]
|
[Sources.AARCH64]
|
||||||
AArch64/ArmPlatformStackLib.S | GCC
|
AArch64/ArmPlatformStackLib.S | GCC
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
ArmPlatformLib
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
||||||
|
|
||||||
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
|
||||||
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
|
||||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user