@@ -17,25 +17,8 @@
# ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/RTSMHelper.S
#
#**/
-
#include <AsmMacroIoLibV8.h>
-#include <Base.h>
#include <Library/ArmLib.h>
-#include <Library/PcdLib.h>
-#include <AutoGen.h>
-
-.text
-.align 2
-
-GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
-GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
-GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
-GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
-GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)
-
-GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)
-GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)
-GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdCoreCount)
PrimaryCoreMpid: .word 0x0
PrimaryCoreBoot: .word 0x0
@@ -44,18 +27,15 @@ PrimaryCoreBoot: .word 0x0
//ArmPlatformPeiBootAction (
// VOID
// );
-ASM_PFX(ArmPlatformPeiBootAction):
+ASM_FUNC(ArmPlatformPeiBootAction)
+ ldr w0, PrimaryCoreBoot
+ cbnz w0, 1f
+
// Save the primary CPU MPID
- ldr x1, =PrimaryCoreBoot
- ldrh w0, [x1]
- cmp wzr, w0
- b.ne 1f
mrs x0, mpidr_el1
- ldr x1, =PrimaryCoreMpid
- str w0, [x1]
- mov w0, 1
- ldr x1, =PrimaryCoreBoot
- str w0, [x1]
+ adr x2, PrimaryCoreMpid
+ mov w1, #1
+ stp w0, w1, [x2]
1:
ret
@@ -63,34 +43,28 @@ ASM_PFX(ArmPlatformPeiBootAction):
//ArmPlatformGetPrimaryCoreMpId (
// VOID
// );
-ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
- ldr x0, =PrimaryCoreMpid
- ldrh w0, [x0]
+ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
+ ldr w0, PrimaryCoreMpid
ret
# IN None
# OUT x0 = number of cores present in the system
-ASM_PFX(ArmGetCpuCountPerCluster):
- LoadConstantToReg (_gPcd_FixedAtBuild_PcdCoreCount, x0)
- ldrh w0, [x0]
+ASM_FUNC(ArmGetCpuCountPerCluster)
+ MOV32 (w0, FixedPcdGet32 (PcdCoreCount))
ret
//UINTN
//ArmPlatformIsPrimaryCore (
// IN UINTN MpId
// );
-ASM_PFX(ArmPlatformIsPrimaryCore):
- LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, x1)
- ldrh w1, [x1]
+ASM_FUNC(ArmPlatformIsPrimaryCore)
+ MOV32 (w1, FixedPcdGet32 (PcdArmPrimaryCoreMask))
and x0, x0, x1
- ldr x1, =PrimaryCoreMpid
- ldrh w1, [x1]
+ ldr w1, PrimaryCoreMpid
cmp w0, w1
- mov x0, #1
- mov x1, #0
- csel x0, x0, x1, eq
+ cset x0, eq
ret
//UINTN
@@ -98,7 +72,7 @@ ASM_PFX(ArmPlatformIsPrimaryCore):
// IN UINTN MpId
// );
// With this function: CorePos = (ClusterId * 2) + CoreId
-ASM_PFX(ArmPlatformGetCorePosition):
+ASM_FUNC(ArmPlatformGetCorePosition)
and x1, x0, #ARM_CORE_MASK
and x0, x0, #ARM_CLUSTER_MASK
add x0, x1, x0, LSR #7
@@ -63,14 +63,15 @@
gArmTokenSpaceGuid.PcdFvBaseAddress
gArmTokenSpaceGuid.PcdFdBaseAddress
+ gAmdStyxTokenSpaceGuid.PcdTrustedFWMemoryBase
+ gAmdStyxTokenSpaceGuid.PcdTrustedFWMemorySize
+
+[FixedPcd]
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
gArmTokenSpaceGuid.PcdArmPrimaryCore
gArmPlatformTokenSpaceGuid.PcdCoreCount
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase
- gAmdStyxTokenSpaceGuid.PcdTrustedFWMemoryBase
- gAmdStyxTokenSpaceGuid.PcdTrustedFWMemorySize
-
[Depex]
gAmdStyxPlatInitPpiGuid
@@ -61,6 +61,7 @@
gArmTokenSpaceGuid.PcdSystemMemorySize
gArmTokenSpaceGuid.PcdFvBaseAddress
+[FixedPcd]
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
gArmTokenSpaceGuid.PcdArmPrimaryCore
Annotate functions with ASM_FUNC() so that they are emitted into separate sections. While we're at it, clean up some inefficient uses of LoadConstantToReg() and other indirect absolute references (which require runtime relocation). Since this requires fixed PCDs to be declared as such in the module .inf, update those as well. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/AMD/Styx/Library/AmdStyxLib/AArch64/Helper.S | 58 ++++++-------------- Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLib.inf | 7 ++- Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLibSec.inf | 1 + 3 files changed, 21 insertions(+), 45 deletions(-) -- 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel