From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: jordan.l.justen@intel.com) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Wed, 10 Apr 2019 01:41:13 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Apr 2019 01:41:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,332,1549958400"; d="scan'208";a="130116370" Received: from askirtik-mobl1.amr.corp.intel.com (HELO jljusten-skl.amr.corp.intel.com) ([10.254.188.249]) by orsmga007.jf.intel.com with ESMTP; 10 Apr 2019 01:41:11 -0700 From: "Jordan Justen" To: devel@edk2.groups.io Cc: Jordan Justen , Leif Lindholm , Ard Biesheuvel Subject: [PATCH v2 3/6] MdeModulePkg/Core/Pei: Add ARM assembly for TemporaryRamMigration Date: Wed, 10 Apr 2019 01:39:57 -0700 Message-Id: <20190410084000.19660-4-jordan.l.justen@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190410084000.19660-1-jordan.l.justen@intel.com> References: <20190410084000.19660-1-jordan.l.justen@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Signed-off-by: Jordan Justen Cc: Leif Lindholm Cc: Ard Biesheuvel --- .../Dispatcher/Arm/TemporaryRamMigration.S | 68 +++++++++++++++++++ .../Dispatcher/Arm/TemporaryRamMigration.asm | 68 +++++++++++++++++++ MdeModulePkg/Core/Pei/PeiMain.inf | 5 ++ 3 files changed, 141 insertions(+) create mode 100644 MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.S create mode 100644 MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.asm diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.S b/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.S new file mode 100644 index 0000000000..872bbcf27d --- /dev/null +++ b/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.S @@ -0,0 +1,68 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2019, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#------------------------------------------------------------------------------ + +.text +.align 5 + +GCC_ASM_EXPORT(PeiTemporaryRamMigration) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# PeiTemporaryRamMigration ( +# IN PEI_CORE_TEMPORARY_RAM_TRANSITION *TempRamTransitionData +# ); +# +# @param[in] r0 Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION +# +# @return None This routine does not return +#------------------------------------------------------------------------------ +ASM_PFX(PeiTemporaryRamMigration): + + # + # We store the TempRamTransitionData pointer in r6. By the + # Arm calling convention we should normally save r6, but we + # won't be returning to the caller, so we don't need to save it. + # By the same rule, the TemporaryRamMigration PPI call should + # preserve r6 for us. + # + mov r6, r0 + + # + # Setup parameters and call TemporaryRamSupport->TemporaryRamMigration + # (r0) PeiServices + # (r2,r3) TemporaryMemoryBase + # (stack) PermanentMemoryBase + # (stack) CopySize + # + add r7, r6, #4 + ldmia r7, {r0-r5} + stmfd sp!, {r3, r4, r5} + mov r3, r2 + mov r2, r1 + + # + # (r6) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION on stack + # + # Adjusted based on stack change made during + # TemporaryRamSupport->TemporaryRamMigration call + # + ldr r4, [r6] + mov r5, sp + sub r6, r6, r5 + mov lr, pc + bx r4 + mov r0, sp + add r6, r6, r0 + add sp, sp, #0xc + + # + # Setup parameters and call PeiTemporaryRamMigrated + # (r0) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + # + mov r0, r6 + bl ASM_PFX(PeiTemporaryRamMigrated) diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.asm b/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.asm new file mode 100644 index 0000000000..1cfb0e0dd8 --- /dev/null +++ b/MdeModulePkg/Core/Pei/Dispatcher/Arm/TemporaryRamMigration.asm @@ -0,0 +1,68 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2019, Intel Corporation. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +;------------------------------------------------------------------------------ + + EXPORT PeiTemporaryRamMigration + AREA PeiCore_LowLevel, CODE, READONLY + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; PeiTemporaryRamMigration ( +; IN PEI_CORE_TEMPORARY_RAM_TRANSITION *TempRamTransitionData +; ); +; +; @param[in] r0 Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION +; +; @return None This routine does not return +;------------------------------------------------------------------------------ +PeiTemporaryRamMigration + + ; + ; We store the TempRamTransitionData pointer in r6. By the + ; Arm calling convention we should normally save r6, but we + ; won't be returning to the caller, so we don't need to save it. + ; By the same rule, the TemporaryRamMigration PPI call should + ; preserve r6 for us. + ; + mov r6, r0 + + ; + ; Setup parameters and call TemporaryRamSupport->TemporaryRamMigration + ; (r0) PeiServices + ; (r2,r3) TemporaryMemoryBase + ; (stack) PermanentMemoryBase + ; (stack) CopySize + ; + add r7, r6, #4 + ldmia r7, {r0-r5} + stmfd sp!, {r3, r4, r5} + mov r3, r2 + mov r2, r1 + + ; + ; (r6) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION on stack + ; + ; Adjusted based on stack change made during + ; TemporaryRamSupport->TemporaryRamMigration call + ; + ldr r4, [r6] + mov r5, sp + sub r6, r6, r5 + mov lr, pc + bx r4 + mov r0, sp + add r6, r6, r0 + add sp, sp, #0xc + + ; + ; Setup parameters and call PeiTemporaryRamMigrated + ; (r0) Pointer to PEI_CORE_TEMPORARY_RAM_TRANSITION + ; + mov r0, r6 + bl ASM_PFX(PeiTemporaryRamMigrated) + + END diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf index 95ef7bb006..1be898bb91 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.inf +++ b/MdeModulePkg/Core/Pei/PeiMain.inf @@ -51,6 +51,11 @@ Dispatcher/AArch64/TemporaryRamMigration.asm | MSFT Dispatcher/AArch64/TemporaryRamMigration.S | GCC +[Sources.ARM] + Dispatcher/Arm/TemporaryRamMigration.asm | RVCT + Dispatcher/Arm/TemporaryRamMigration.asm | MSFT + Dispatcher/Arm/TemporaryRamMigration.S | GCC + [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec -- 2.20.1