]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/AArch64/RTSMFoundationBoot.S
ArmPlatformPkg: Added Aarch64 Foundation Model
[mirror_edk2.git] / ArmPlatformPkg / ArmVExpressPkg / Library / ArmVExpressSecLibRTSM / AArch64 / RTSMFoundationBoot.S
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/AArch64/RTSMFoundationBoot.S b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/AArch64/RTSMFoundationBoot.S
new file mode 100644 (file)
index 0000000..b2ebeca
--- /dev/null
@@ -0,0 +1,75 @@
+//\r
+//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
+//\r
+//  This program and the accompanying materials\r
+//  are licensed and made available under the terms and conditions of the BSD License\r
+//  which accompanies this distribution.  The full text of the license may be found at\r
+//  http://opensource.org/licenses/bsd-license.php\r
+//\r
+//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+//\r
+\r
+#include <AsmMacroIoLib.h>\r
+#include <Base.h>\r
+#include <Library/ArmPlatformLib.h>\r
+#include <AutoGen.h>\r
+#include <ArmPlatform.h>\r
+\r
+.text\r
+.align 3\r
+\r
+ASM_GLOBAL ASM_PFX(ArmPlatformSecBootAction)\r
+ASM_GLOBAL ASM_PFX(ArmPlatformSecBootMemoryInit)\r
+ASM_GLOBAL ASM_PFX(ArmSecMpCoreSecondariesWrite)\r
+ASM_GLOBAL ASM_PFX(ArmSecMpCoreSecondariesRead)\r
+\r
+/**\r
+  Call at the beginning of the platform boot up\r
+\r
+  This function allows the firmware platform to do extra actions at the early\r
+  stage of the platform power up.\r
+\r
+  Note: This function must be implemented in assembler as there is no stack set up yet\r
+\r
+**/\r
+ASM_PFX(ArmPlatformSecBootAction):\r
+  ret\r
+\r
+/**\r
+  Initialize the memory where the initial stacks will reside\r
+\r
+  This memory can contain the initial stacks (Secure and Secure Monitor stacks).\r
+  In some platform, this region is already initialized and the implementation of this function can\r
+  do nothing. This memory can also represent the Secure RAM.\r
+  This function is called before the stack has been set up. Its implementation must ensure the stack\r
+  pointer is not used (probably required to use assembly language)\r
+\r
+**/\r
+ASM_PFX(ArmPlatformSecBootMemoryInit):\r
+  // The SMC does not need to be initialized for RTSM\r
+  ret\r
+\r
+\r
+// NOTE:\r
+// The foundation model does not have the VE_SYS_REGS like all the other VE\r
+// platforms. We pick a spot in RAM that *should* be safe in the simple case\r
+// of no UEFI apps interfering (Only the Linux loader getting used). By the\r
+// time we come to load Linux we should have all the cores in a safe place.\r
+// The image expects to be loaded at 0xa0000000. We also place the mailboxes\r
+// here as it does not matter if we corrupt the image at this time.\r
+// NOTE also see: "ArmVExpressLibRTSM/RTSMFoundation.c"\r
+\r
+/* Write the flag register used to start Secondary cores */\r
+ASM_PFX(ArmSecMpCoreSecondariesWrite):\r
+  ldr x1, =0xa0000000\r
+  str w0, [x1]\r
+  ret\r
+\r
+\r
+/* Read the flag register used to start Secondary cores */\r
+ASM_PFX(ArmSecMpCoreSecondariesRead):\r
+  ldr x1, =0xa0000000\r
+  ldr w0, [x1]\r
+  ret\r