summaryrefslogtreecommitdiffstats
path: root/ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S
diff options
context:
space:
mode:
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-02 12:00:00 +0000
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-02 12:00:00 +0000
commitafdfe8f02bdf8d563554bb620c001072862b064e (patch)
tree133edcc99dcde42e92643907f76a093647a322c2 /ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S
parent7ee525b2c1f8d3d6da5f788364fe5be36a979c9c (diff)
downloadedk2-afdfe8f02bdf8d563554bb620c001072862b064e.tar.gz
edk2-afdfe8f02bdf8d563554bb620c001072862b064e.tar.bz2
edk2-afdfe8f02bdf8d563554bb620c001072862b064e.zip
Remove ArmEbPkg and replace with ArmRealViewEbPkg. Ported ArmRealViewEbPkg to have a PEI phase, and added place holder CPU PEIM to ArmPkg. This ArmRealViewEbPkg now boots from SEC, PEI, DXE, BDS, to EBL in the ARM RealView system emulator that comes with RealView Pro.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10621 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S')
-rwxr-xr-xArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S79
1 files changed, 79 insertions, 0 deletions
diff --git a/ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S b/ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S
new file mode 100755
index 0000000000..f87aa58037
--- /dev/null
+++ b/ArmRealViewEbPkg/SecForPei/Arm/ModuleEntryPoint.S
@@ -0,0 +1,79 @@
+#------------------------------------------------------------------------------
+#
+# ARM EB Entry point. Reset vector in FV header will brach to
+# _ModuleEntryPoint.
+#
+# We use crazy macros, like LoadConstantToReg, since Xcode assembler
+# does not support = assembly syntax for ldr.
+#
+# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
+#
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#------------------------------------------------------------------------------
+
+#include <AsmMacroIoLib.h>
+#include <Base.h>
+#include <Library/PcdLib.h>
+#include <ArmEb/ArmEb.h>
+
+.text
+.align 3
+
+.globl ASM_PFX(CEntryPoint)
+.globl ASM_PFX(_ModuleEntryPoint)
+.globl ASM_PFX(StartupAddr)
+
+ASM_PFX(_ModuleEntryPoint):
+
+ // Turn off remapping NOR to 0. We can now use DRAM in low memory
+ // CAN'T DO THIS HERE -- BRANCH FROM RESET VECTOR IS RELATIVE AND REMAINS IN REMAPPED NOR
+ //MmioOr32 (0x10001000 ,BIT8) //EB_SP810_CTRL_BASE
+
+ // Enable NEON register in case folks want to use them for optimizations (CopyMem)
+ mrc p15, 0, r0, c1, c0, 2
+ orr r0, r0, #0x00f00000 // Enable VFP access (V* instructions)
+ mcr p15, 0, r0, c1, c0, 2
+ mov r0, #0x40000000 // Set EN bit in FPEXC
+ mcr p10,#0x7,r0,c8,c0,#0 // msr FPEXC,r0 in ARM assembly
+
+ // Set CPU vectors to 0 (which is currently flash)
+ LoadConstantToReg (FixedPcdGet32(PcdCpuVectorBaseAddress) ,r0) // Get vector base
+ mcr p15, 0, r0, c12, c0, 0
+ isb // Sync changes to control registers
+
+ //
+ // Set stack based on PCD values. Need to do it this way to make C code work
+ // when it runs from FLASH.
+ //
+ LoadConstantToReg (FixedPcdGet32(PcdPrePiStackBase) ,r0) // temp ram base arg 0 TODO: change "stackbase" to "temprambase"
+ LoadConstantToReg (FixedPcdGet32(PcdPrePiStackSize) ,r1) // temp ram size arg 1
+ lsr r3, r1, #1 // r4 = size of temp mem / 2
+ add r3, r3, r0 // r2 = temp ram base + r4
+ mov r13, r3 // result: stack pointer = temp ram base + (size of temp mem / 2)
+
+ // lr points to area in reset vector block containing PEI core address
+ ldr r2, [lr] // pei core arg 3
+
+ // move sec startup address into a data register
+ // ensure we're jumping to FV version of the code (not boot remapped alias)
+#ifndef __APPLE__
+// This does not generate a valid relocation for Xcode. Fix me...
+ ldr r4, ASM_PFX(StartupAddr)
+
+ // jump to SEC C code
+ blx r4
+#endif
+
+
+ASM_PFX(ShouldNeverGetHere):
+ // _CEntryPoint should never return
+ b ASM_PFX(ShouldNeverGetHere)
+
+