]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/PrePeiCore: switch to ASM_FUNC() asm macro
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 10 Aug 2016 14:24:24 +0000 (16:24 +0200)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 11 Aug 2016 11:25:05 +0000 (13:25 +0200)
Annotate functions with ASM_FUNC() so that they are emitted into
separate sections.

While we're at it, replace some inefficient uses of LoadConstantToReg()

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
ArmPlatformPkg/PrePeiCore/AArch64/Helper.S
ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S
ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S
ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S
ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S

index 8e23b0389653d9efb9797c296f3649698301af24..5f35484b1259f8b85c370de2cde945db2b799c13 100644 (file)
 #include <AsmMacroIoLibV8.h>\r
 #include <Chipset/AArch64.h>\r
 \r
-#start of the code section\r
-.text\r
-.align 3\r
-\r
-GCC_ASM_EXPORT(SetupExceptionLevel1)\r
-GCC_ASM_EXPORT(SetupExceptionLevel2)\r
-\r
 // Setup EL1 while in EL1\r
-ASM_PFX(SetupExceptionLevel1):\r
+ASM_FUNC(SetupExceptionLevel1)\r
    mov  x5, x30                   // Save LR\r
 \r
    mov  x0, #CPACR_CP_FULL_ACCESS\r
@@ -31,7 +24,7 @@ ASM_PFX(SetupExceptionLevel1):
    ret  x5\r
 \r
 // Setup EL2 while in EL2\r
-ASM_PFX(SetupExceptionLevel2):\r
+ASM_FUNC(SetupExceptionLevel2)\r
    msr     sctlr_el2, xzr\r
    mrs     x0, hcr_el2            // Read EL2 Hypervisor configuration Register\r
 \r
index 34bf3a4e68318d29058c751338e0ce22b2339d92..aab5edab0c4224b3b424550c698136e8fb450ec5 100644 (file)
 //\r
 \r
 #include <AsmMacroIoLibV8.h>\r
-#include <Base.h>\r
-#include <Library/PcdLib.h>\r
-#include <AutoGen.h>\r
 \r
-.text\r
-.align 3\r
-\r
-GCC_ASM_IMPORT(CEntryPoint)\r
-GCC_ASM_IMPORT(ArmPlatformGetCorePosition)\r
-GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)\r
-GCC_ASM_IMPORT(ArmReadMpidr)\r
-GCC_ASM_IMPORT(ArmPlatformPeiBootAction)\r
-GCC_ASM_EXPORT(_ModuleEntryPoint)\r
-\r
-StartupAddr: .8byte CEntryPoint\r
-\r
-ASM_PFX(_ModuleEntryPoint):\r
+ASM_FUNC(_ModuleEntryPoint)\r
   // Do early platform specific actions\r
   bl    ASM_PFX(ArmPlatformPeiBootAction)\r
 \r
@@ -60,9 +45,7 @@ ASM_PFX(MainEntryPoint):
   bl    ASM_PFX(ArmPlatformIsPrimaryCore)\r
 \r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
-  LoadConstantToReg (FixedPcdGet64(PcdCPUCoresStackBase), x1)\r
-  LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), x2)\r
-  add   x1, x1, x2\r
+  MOV64 (x1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))\r
 \r
   // x0 is equal to 1 if I am the primary core\r
   cmp   x0, #1\r
@@ -79,20 +62,19 @@ _SetupSecondaryCoreStack:
   add   x0, x0, #1\r
 \r
   // StackOffset = CorePos * StackSize\r
-  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecondaryStackSize), x2)\r
+  MOV32 (x2, FixedPcdGet32(PcdCPUCoreSecondaryStackSize))\r
   mul   x0, x0, x2\r
   // SP = StackBase + StackOffset\r
   add   sp, x6, x0\r
 \r
 _PrepareArguments:\r
   // The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector\r
-  LoadConstantToReg (FixedPcdGet64(PcdFvBaseAddress), x2)\r
-  add   x2, x2, #8\r
-  ldr   x1, [x2]\r
+  MOV64 (x2, FixedPcdGet64(PcdFvBaseAddress))\r
+  ldr   x1, [x2, #8]\r
 \r
   // Move sec startup address into a data register\r
   // Ensure we're jumping to FV version of the code (not boot remapped alias)\r
-  ldr   x3, StartupAddr\r
+  ldr   x3, =ASM_PFX(CEntryPoint)\r
 \r
   // Jump to PrePeiCore C code\r
   //    x0 = mp_id\r
index 8d83510517b465d215b435b53faec4634ea99205..89b98e630f5c2e4a50ab8033da26be340b9cf474 100644 (file)
 #\r
 #------------------------------------------------------------------------------\r
 \r
-.text\r
-.align 3\r
-\r
-GCC_ASM_EXPORT(SecSwitchStack)\r
-\r
-\r
+#include <AsmMacroIoLibV8.h>\r
 \r
 #/**\r
 #  This allows the caller to switch the stack and return\r
@@ -35,7 +30,7 @@ GCC_ASM_EXPORT(SecSwitchStack)
 #  VOID  *StackDelta\r
 #  )#\r
 #\r
-ASM_PFX(SecSwitchStack):\r
+ASM_FUNC(SecSwitchStack)\r
     mov   x1, sp\r
     add   x1, x0, x1\r
     mov   sp, x1\r
index 1693f52e26c89b32977234966f4930b3a2d57261..14344425ad4cd93f47f08982e78ddb65c6800272 100644 (file)
 //\r
 \r
 #include <AsmMacroIoLib.h>\r
-#include <Base.h>\r
-#include <Library/PcdLib.h>\r
-#include <AutoGen.h>\r
 \r
-.text\r
-.align 3\r
-\r
-GCC_ASM_IMPORT(CEntryPoint)\r
-GCC_ASM_IMPORT(ArmPlatformGetCorePosition)\r
-GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)\r
-GCC_ASM_IMPORT(ArmReadMpidr)\r
-GCC_ASM_IMPORT(ArmPlatformPeiBootAction)\r
-GCC_ASM_EXPORT(_ModuleEntryPoint)\r
-\r
-StartupAddr: .word    CEntryPoint\r
-\r
-ASM_PFX(_ModuleEntryPoint):\r
+ASM_FUNC(_ModuleEntryPoint)\r
   // Do early platform specific actions\r
   bl    ASM_PFX(ArmPlatformPeiBootAction)\r
 \r
@@ -41,9 +26,7 @@ ASM_PFX(_ModuleEntryPoint):
   bl    ASM_PFX(ArmPlatformIsPrimaryCore)\r
 \r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
-  LoadConstantToReg (FixedPcdGet64(PcdCPUCoresStackBase), r1)\r
-  LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), r2)\r
-  add   r1, r1, r2\r
+  MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize))\r
 \r
   // r0 is equal to 1 if I am the primary core\r
   cmp   r0, #1\r
@@ -60,20 +43,19 @@ _SetupSecondaryCoreStack:
   add   r0, r0, #1\r
 \r
   // StackOffset = CorePos * StackSize\r
-  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecondaryStackSize), r2)\r
+  MOV32 (r2, FixedPcdGet32(PcdCPUCoreSecondaryStackSize))\r
   mul   r0, r0, r2\r
   // SP = StackBase + StackOffset\r
   add   sp, r6, r0\r
 \r
 _PrepareArguments:\r
   // The PEI Core Entry Point has been computed by GenFV and stored in the second entry of the Reset Vector\r
-  LoadConstantToReg (FixedPcdGet32(PcdFvBaseAddress), r2)\r
-  add   r2, r2, #4\r
-  ldr   r1, [r2]\r
+  MOV32 (r2, FixedPcdGet32(PcdFvBaseAddress))\r
+  ldr   r1, [r2, #4]\r
 \r
   // Move sec startup address into a data register\r
   // Ensure we're jumping to FV version of the code (not boot remapped alias)\r
-  ldr   r3, StartupAddr\r
+  ldr   r3, =ASM_PFX(CEntryPoint)\r
 \r
   // Jump to PrePeiCore C code\r
   //    r0 = mp_id\r
index 509dc205d992095b4d4bcb00432d6ab7277d0473..c419463b4f94e2e2bd61a6b1da3c466db7f92cf2 100644 (file)
 #\r
 #------------------------------------------------------------------------------\r
 \r
-.text\r
-.align 3\r
-\r
-GCC_ASM_EXPORT(SecSwitchStack)\r
-\r
-\r
+#include <AsmMacroIoLib.h>\r
 \r
 #/**\r
 #  This allows the caller to switch the stack and return\r
@@ -33,7 +28,7 @@ GCC_ASM_EXPORT(SecSwitchStack)
 #  VOID  *StackDelta\r
 #  )#\r
 #\r
-ASM_PFX(SecSwitchStack):\r
+ASM_FUNC(SecSwitchStack)\r
     mov   R1, R13\r
     add   R1, R0, R1\r
     mov   R13, R1\r