--- /dev/null
+//\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