From patchwork Wed Aug 10 15:17:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 73671 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp456330qga; Wed, 10 Aug 2016 08:19:25 -0700 (PDT) X-Received: by 10.98.202.202 with SMTP id y71mr8216907pfk.10.1470842363825; Wed, 10 Aug 2016 08:19:23 -0700 (PDT) Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id 65si49010685pfj.237.2016.08.10.08.19.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Aug 2016 08:19:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 2DF2F1A1E63; Wed, 10 Aug 2016 08:19:11 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received: from mail-wm0-x22c.google.com (mail-wm0-x22c.google.com [IPv6:2a00:1450:400c:c09::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 361F01A1E63 for ; Wed, 10 Aug 2016 08:19:09 -0700 (PDT) Received: by mail-wm0-x22c.google.com with SMTP id o80so111039471wme.1 for ; Wed, 10 Aug 2016 08:19:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Jo4/uUv/2nPexFZQXKwoYliGVtemEN9nWdrJw2fpaUs=; b=LBSc2p15wDmNuMQEl57vPJKtF2RNM8acCAdY2tyAwfTABCz3pZMKNIhWymUkUYu9e2 5GoVhQiVrHUp6Wn2LmPjn2w3ld3Bf7rpCfc7sdo5ZMK6jSLCSjW8SUGoEmruRTbhNQT8 vLhQjI091+qYzDoAhIEp53NUohmXeqpGef/sQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Jo4/uUv/2nPexFZQXKwoYliGVtemEN9nWdrJw2fpaUs=; b=FyRfvFsgUcVWTQIf61+5YEBibFBtlo0Bdmex5WkmVIHIkPnlrHI6BljgWwI/z0z2Az cUndClZEujkoxA6OzpcBb/+qn2Z4k9YRvJmnofSdDgceJ+prT0td8D+LW9z+0ve6mmD+ MG/rtig7vGL4RYubykD68p5jjBPG9nxt9dAHj6qU/izwMU7xdgEYzU263sIwOuT2am+P HhQtpAbu22ae65eihgNyLyjFz6eLYMGMUcBmPS2tCydATgIJS0xqKEu1cDtsx/f0PxHp QKwI/wzCrxLGdHX/KLv1QmwRIupY1RMOdJ2K9Glx7zZR/+r9eQOWDXusBLtQxWU8oC9w Lq0g== X-Gm-Message-State: AEkoouteaHlcA2pS/rAmB8kK/HTw+p0Llje7eqboB7xpQjzH1EzwbyW2LaXSC9BsROUqwavg X-Received: by 10.28.186.138 with SMTP id k132mr3604514wmf.65.1470842347607; Wed, 10 Aug 2016 08:19:07 -0700 (PDT) Received: from localhost.localdomain (46.red-81-37-107.dynamicip.rima-tde.net. [81.37.107.46]) by smtp.gmail.com with ESMTPSA id c16sm8908374wme.4.2016.08.10.08.19.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Aug 2016 08:19:06 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, leif.lindholm@linaro.org, eugene@hp.com Date: Wed, 10 Aug 2016 17:17:59 +0200 Message-Id: <1470842282-8415-24-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470842282-8415-1-git-send-email-ard.biesheuvel@linaro.org> References: <1470842282-8415-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH 23/26] ArmPlatformPkg/PrePeiCore: switch to ASM_FUNC() asm macro X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lersek@redhat.com, Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" Annotate functions with ASM_FUNC() so that they are emitted into separate sections. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel --- ArmPlatformPkg/PrePeiCore/AArch64/Helper.S | 11 ++----- ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S | 30 ++++---------------- ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S | 9 ++---- ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S | 30 ++++---------------- ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S | 9 ++---- 5 files changed, 18 insertions(+), 71 deletions(-) -- 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel Reviewed-by: Leif Lindholm diff --git a/ArmPlatformPkg/PrePeiCore/AArch64/Helper.S b/ArmPlatformPkg/PrePeiCore/AArch64/Helper.S index 8e23b0389653..5f35484b1259 100644 --- a/ArmPlatformPkg/PrePeiCore/AArch64/Helper.S +++ b/ArmPlatformPkg/PrePeiCore/AArch64/Helper.S @@ -14,15 +14,8 @@ #include #include -#start of the code section -.text -.align 3 - -GCC_ASM_EXPORT(SetupExceptionLevel1) -GCC_ASM_EXPORT(SetupExceptionLevel2) - // Setup EL1 while in EL1 -ASM_PFX(SetupExceptionLevel1): +ASM_FUNC(SetupExceptionLevel1) mov x5, x30 // Save LR mov x0, #CPACR_CP_FULL_ACCESS @@ -31,7 +24,7 @@ ASM_PFX(SetupExceptionLevel1): ret x5 // Setup EL2 while in EL2 -ASM_PFX(SetupExceptionLevel2): +ASM_FUNC(SetupExceptionLevel2) msr sctlr_el2, xzr mrs x0, hcr_el2 // Read EL2 Hypervisor configuration Register diff --git a/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S b/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S index 34bf3a4e6831..aab5edab0c42 100644 --- a/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S +++ b/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S @@ -12,23 +12,8 @@ // #include -#include -#include -#include -.text -.align 3 - -GCC_ASM_IMPORT(CEntryPoint) -GCC_ASM_IMPORT(ArmPlatformGetCorePosition) -GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore) -GCC_ASM_IMPORT(ArmReadMpidr) -GCC_ASM_IMPORT(ArmPlatformPeiBootAction) -GCC_ASM_EXPORT(_ModuleEntryPoint) - -StartupAddr: .8byte CEntryPoint - -ASM_PFX(_ModuleEntryPoint): +ASM_FUNC(_ModuleEntryPoint) // Do early platform specific actions bl ASM_PFX(ArmPlatformPeiBootAction) @@ -60,9 +45,7 @@ ASM_PFX(MainEntryPoint): bl ASM_PFX(ArmPlatformIsPrimaryCore) // Get the top of the primary stacks (and the base of the secondary stacks) - LoadConstantToReg (FixedPcdGet64(PcdCPUCoresStackBase), x1) - LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), x2) - add x1, x1, x2 + MOV64 (x1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize)) // x0 is equal to 1 if I am the primary core cmp x0, #1 @@ -79,20 +62,19 @@ _SetupSecondaryCoreStack: add x0, x0, #1 // StackOffset = CorePos * StackSize - LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecondaryStackSize), x2) + 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 - LoadConstantToReg (FixedPcdGet64(PcdFvBaseAddress), x2) - add x2, x2, #8 - ldr x1, [x2] + MOV64 (x2, FixedPcdGet64(PcdFvBaseAddress)) + ldr x1, [x2, #8] // Move sec startup address into a data register // Ensure we're jumping to FV version of the code (not boot remapped alias) - ldr x3, StartupAddr + ldr x3, =ASM_PFX(CEntryPoint) // Jump to PrePeiCore C code // x0 = mp_id diff --git a/ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S b/ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S index 8d83510517b4..89b98e630f5c 100644 --- a/ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S +++ b/ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S @@ -14,12 +14,7 @@ # #------------------------------------------------------------------------------ -.text -.align 3 - -GCC_ASM_EXPORT(SecSwitchStack) - - +#include #/** # This allows the caller to switch the stack and return @@ -35,7 +30,7 @@ GCC_ASM_EXPORT(SecSwitchStack) # VOID *StackDelta # )# # -ASM_PFX(SecSwitchStack): +ASM_FUNC(SecSwitchStack) mov x1, sp add x1, x0, x1 mov sp, x1 diff --git a/ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S b/ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S index 1693f52e26c8..14344425ad4c 100644 --- a/ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S +++ b/ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S @@ -12,23 +12,8 @@ // #include -#include -#include -#include -.text -.align 3 - -GCC_ASM_IMPORT(CEntryPoint) -GCC_ASM_IMPORT(ArmPlatformGetCorePosition) -GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore) -GCC_ASM_IMPORT(ArmReadMpidr) -GCC_ASM_IMPORT(ArmPlatformPeiBootAction) -GCC_ASM_EXPORT(_ModuleEntryPoint) - -StartupAddr: .word CEntryPoint - -ASM_PFX(_ModuleEntryPoint): +ASM_FUNC(_ModuleEntryPoint) // Do early platform specific actions bl ASM_PFX(ArmPlatformPeiBootAction) @@ -41,9 +26,7 @@ ASM_PFX(_ModuleEntryPoint): bl ASM_PFX(ArmPlatformIsPrimaryCore) // Get the top of the primary stacks (and the base of the secondary stacks) - LoadConstantToReg (FixedPcdGet64(PcdCPUCoresStackBase), r1) - LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), r2) - add r1, r1, r2 + MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) + FixedPcdGet32(PcdCPUCorePrimaryStackSize)) // r0 is equal to 1 if I am the primary core cmp r0, #1 @@ -60,20 +43,19 @@ _SetupSecondaryCoreStack: add r0, r0, #1 // StackOffset = CorePos * StackSize - LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecondaryStackSize), r2) + 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 - LoadConstantToReg (FixedPcdGet32(PcdFvBaseAddress), r2) - add r2, r2, #4 - ldr r1, [r2] + 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, StartupAddr + ldr r3, =ASM_PFX(CEntryPoint) // Jump to PrePeiCore C code // r0 = mp_id diff --git a/ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S b/ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S index 509dc205d992..c419463b4f94 100644 --- a/ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S +++ b/ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S @@ -12,12 +12,7 @@ # #------------------------------------------------------------------------------ -.text -.align 3 - -GCC_ASM_EXPORT(SecSwitchStack) - - +#include #/** # This allows the caller to switch the stack and return @@ -33,7 +28,7 @@ GCC_ASM_EXPORT(SecSwitchStack) # VOID *StackDelta # )# # -ASM_PFX(SecSwitchStack): +ASM_FUNC(SecSwitchStack) mov R1, R13 add R1, R0, R1 mov R13, R1