mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 05:25:45 +01:00 
			
		
		
		
	ArmPlatformPkg: remove unused Sec library
The Sec library was built by the AARCH64 FVP models, but the binary was unused because it was part of a legacy booting strategy from before ARM Trusted Firmware came along. This change requires changes in OpenPlatformPkg to remove the Sec binary from the FVP build. Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
This commit is contained in:
		
							parent
							
								
									bfc7793bd2
								
							
						
					
					
						commit
						9a8f6fb407
					
				@ -1,25 +0,0 @@
 | 
				
			|||||||
/** @file
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  Copyright (c) 2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  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 <Chipset/AArch64.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
EFIAPI
 | 
					 | 
				
			||||||
ArmSecArchTrustzoneInit (
 | 
					 | 
				
			||||||
  VOID
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  // Do not trap any access to Floating Point and Advanced SIMD in EL3.
 | 
					 | 
				
			||||||
  ArmWriteCptr (0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,93 +0,0 @@
 | 
				
			|||||||
#========================================================================================
 | 
					 | 
				
			||||||
#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#  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 <AsmMacroIoLibV8.h>
 | 
					 | 
				
			||||||
#include <Chipset/AArch64.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#start of the code section
 | 
					 | 
				
			||||||
.text
 | 
					 | 
				
			||||||
.align 3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(SwitchToNSExceptionLevel1)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(enter_monitor_mode)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(return_from_exception)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(copy_cpsr_into_spsr)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(set_non_secure_mode)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Switch from EL3 to NS-EL1
 | 
					 | 
				
			||||||
ASM_PFX(SwitchToNSExceptionLevel1):
 | 
					 | 
				
			||||||
   // Now setup our EL1. Controlled by EL2 config on Model
 | 
					 | 
				
			||||||
   mrs     x0, hcr_el2            // Read EL2 Hypervisor configuration Register
 | 
					 | 
				
			||||||
   orr     x0, x0, #(1 << 31)     // Set EL1 to be 64bit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   // Send all interrupts to their respective Exception levels for EL2
 | 
					 | 
				
			||||||
   and     x0, x0, #~(ARM_HCR_FMO | ARM_HCR_IMO | ARM_HCR_AMO) // Disable virtual FIQ, IRQ, SError and Abort
 | 
					 | 
				
			||||||
   msr     hcr_el2, x0            // Write back our settings
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   msr     cptr_el2, xzr          // Disable copro traps to EL2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   msr     sctlr_el2, xzr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   // Enable architected timer access
 | 
					 | 
				
			||||||
   mrs     x0, cnthctl_el2
 | 
					 | 
				
			||||||
   orr     x0, x0, #3             // Enable EL1 access to timers
 | 
					 | 
				
			||||||
   msr     cnthctl_el2, x0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   mrs     x0, cntkctl_el1
 | 
					 | 
				
			||||||
   orr     x0, x0, #3             // EL0 access to counters
 | 
					 | 
				
			||||||
   msr     cntkctl_el1, x0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   // Set ID regs
 | 
					 | 
				
			||||||
   mrs     x0, midr_el1
 | 
					 | 
				
			||||||
   mrs     x1, mpidr_el1
 | 
					 | 
				
			||||||
   msr     vpidr_el2, x0
 | 
					 | 
				
			||||||
   msr     vmpidr_el2, x1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EL3 on AArch64 is Secure/monitor so this funtion is reduced vs ARMv7
 | 
					 | 
				
			||||||
// we don't need a mode switch, just setup the Arguments and jump.
 | 
					 | 
				
			||||||
// x0: Monitor World EntryPoint
 | 
					 | 
				
			||||||
// x1: MpId
 | 
					 | 
				
			||||||
// x2: SecBootMode
 | 
					 | 
				
			||||||
// x3: Secure Monitor mode stack
 | 
					 | 
				
			||||||
ASM_PFX(enter_monitor_mode):
 | 
					 | 
				
			||||||
   mov     x4, x0                 // Swap EntryPoint and MpId registers
 | 
					 | 
				
			||||||
   mov     x0, x1
 | 
					 | 
				
			||||||
   mov     x1, x2
 | 
					 | 
				
			||||||
   mov     x2, x3
 | 
					 | 
				
			||||||
   br      x4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Put the address in correct ELR_ELx and do a eret.
 | 
					 | 
				
			||||||
// We may need to do some config before we change to another Mode.
 | 
					 | 
				
			||||||
ASM_PFX(return_from_exception):
 | 
					 | 
				
			||||||
   msr     elr_el3, x0
 | 
					 | 
				
			||||||
   eret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// For AArch64 we need to construct the spsr we want from individual bits and pieces.
 | 
					 | 
				
			||||||
ASM_PFX(copy_cpsr_into_spsr):
 | 
					 | 
				
			||||||
   mrs     x0, CurrentEl  // Get the current exception level we  are running at.
 | 
					 | 
				
			||||||
   mrs     x1, SPSel      // Which Stack are we using
 | 
					 | 
				
			||||||
   orr     x0, x0, x1
 | 
					 | 
				
			||||||
   mrs     x1, daif       // Which interrupts are enabled
 | 
					 | 
				
			||||||
   orr     x0, x0, x1
 | 
					 | 
				
			||||||
   msr     spsr_el3, x0   // Write to spsr
 | 
					 | 
				
			||||||
   ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Get this from platform file.
 | 
					 | 
				
			||||||
ASM_PFX(set_non_secure_mode):
 | 
					 | 
				
			||||||
   msr     spsr_el3, x0
 | 
					 | 
				
			||||||
   ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
 | 
					 | 
				
			||||||
@ -1,139 +0,0 @@
 | 
				
			|||||||
//
 | 
					 | 
				
			||||||
//  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  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 <AutoGen.h>
 | 
					 | 
				
			||||||
#include <AsmMacroIoLibV8.h>
 | 
					 | 
				
			||||||
#include "SecInternal.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.text
 | 
					 | 
				
			||||||
.align 3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(CEntryPoint)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformGetCorePosition)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformSecBootAction)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformSecBootMemoryInit)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmDisableInterrupts)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmDisableCachesAndMmu)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmReadMpidr)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmCallWFE)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(_ModuleEntryPoint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
StartupAddr:        .8byte       ASM_PFX(CEntryPoint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_PFX(_ModuleEntryPoint):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// NOTE: We could be booting from EL3, EL2 or EL1. Need to correctly detect
 | 
					 | 
				
			||||||
//       and configure the system accordingly. EL2 is default if possible.
 | 
					 | 
				
			||||||
// If we started in EL3 we need to switch and run at EL2.
 | 
					 | 
				
			||||||
// If we are running at EL2 stay in EL2
 | 
					 | 
				
			||||||
// If we are starting at EL1 stay in EL1.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Sec only runs in EL3. Othewise we jump to PEI without changing anything.
 | 
					 | 
				
			||||||
// If Sec runs we change to EL2 before switching to PEI.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Which EL are we running at? Every EL needs some level of setup...
 | 
					 | 
				
			||||||
  EL1_OR_EL2_OR_EL3(x0)
 | 
					 | 
				
			||||||
1:// If we are at EL1 or EL2 leave SEC for PEI.
 | 
					 | 
				
			||||||
2:b     ASM_PFX(JumpToPEI)
 | 
					 | 
				
			||||||
  // If we are at EL3 we need to configure it and switch to EL2
 | 
					 | 
				
			||||||
3:b     ASM_PFX(MainEntryPoint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_PFX(MainEntryPoint):
 | 
					 | 
				
			||||||
  // First ensure all interrupts are disabled
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmDisableInterrupts)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Ensure that the MMU and caches are off
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmDisableCachesAndMmu)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // By default, we are doing a cold boot
 | 
					 | 
				
			||||||
  mov   x10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to Platform Specific Boot Action function
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformSecBootAction)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_IdentifyCpu:
 | 
					 | 
				
			||||||
  // Identify CPU ID
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmReadMpidr)
 | 
					 | 
				
			||||||
  // Keep a copy of the MpId register value
 | 
					 | 
				
			||||||
  mov   x5, x0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Is it the Primary Core ?
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformIsPrimaryCore)
 | 
					 | 
				
			||||||
  cmp   x0, #1
 | 
					 | 
				
			||||||
  // Only the primary core initialize the memory (SMC)
 | 
					 | 
				
			||||||
  b.eq  _InitMem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_WaitInitMem:
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  // Otherwise we have to wait the Primary Core to finish the initialization
 | 
					 | 
				
			||||||
  cmp   x10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  b.ne  _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Wait for the primary core to initialize the initial memory (event: BOOT_MEM_INIT)
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmCallWFE)
 | 
					 | 
				
			||||||
  // Now the Init Mem is initialized, we setup the secondary core stacks
 | 
					 | 
				
			||||||
  b     _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_InitMem:
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  cmp   x10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  b.ne  _SetupPrimaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize Init Boot Memory
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformSecBootMemoryInit)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupPrimaryCoreStack:
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), x1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), x2)
 | 
					 | 
				
			||||||
  add   x1, x1, x2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  mov   sp, x1
 | 
					 | 
				
			||||||
  b     _PrepareArguments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupSecondaryCoreStack:
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), x1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), x2)
 | 
					 | 
				
			||||||
  add   x6, x1, x2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get the Core Position
 | 
					 | 
				
			||||||
  mov   x0, x5
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformGetCorePosition)
 | 
					 | 
				
			||||||
  // The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack
 | 
					 | 
				
			||||||
  add   x0, x0, #1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // StackOffset = CorePos * StackSize
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecSecondaryStackSize), x2)
 | 
					 | 
				
			||||||
  mul   x0, x0, x2
 | 
					 | 
				
			||||||
  // SP = StackBase + StackOffset
 | 
					 | 
				
			||||||
  add   sp, x6, x0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_PrepareArguments:
 | 
					 | 
				
			||||||
  // 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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to SEC C code
 | 
					 | 
				
			||||||
  //    r0 = mp_id
 | 
					 | 
				
			||||||
  //    r1 = Boot Mode
 | 
					 | 
				
			||||||
  mov   x0, x5
 | 
					 | 
				
			||||||
  mov   x1, x10
 | 
					 | 
				
			||||||
  blr   x3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_PFX(JumpToPEI):
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdFvBaseAddress), x0)
 | 
					 | 
				
			||||||
  blr   x0
 | 
					 | 
				
			||||||
@ -1,25 +0,0 @@
 | 
				
			|||||||
/** @file
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  Copyright (c) 2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  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 <Chipset/ArmV7.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
EFIAPI
 | 
					 | 
				
			||||||
ArmSecArchTrustzoneInit (
 | 
					 | 
				
			||||||
  VOID
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  // Write to CP15 Non-secure Access Control Register
 | 
					 | 
				
			||||||
  ArmWriteNsacr (PcdGet32 (PcdArmNsacr));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,75 +0,0 @@
 | 
				
			|||||||
#========================================================================================
 | 
					 | 
				
			||||||
#  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#  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.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#=======================================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#start of the code section
 | 
					 | 
				
			||||||
.text
 | 
					 | 
				
			||||||
.align 3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(return_from_exception)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(enter_monitor_mode)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(copy_cpsr_into_spsr)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(set_non_secure_mode)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# r0: Monitor World EntryPoint
 | 
					 | 
				
			||||||
# r1: MpId
 | 
					 | 
				
			||||||
# r2: SecBootMode
 | 
					 | 
				
			||||||
# r3: Secure Monitor mode stack
 | 
					 | 
				
			||||||
ASM_PFX(enter_monitor_mode):
 | 
					 | 
				
			||||||
    cmp     r3, #0                      @ If a Secure Monitor stack base has not been defined then use the Secure stack
 | 
					 | 
				
			||||||
    moveq   r3, sp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mrs     r4, cpsr                    @ Save current mode (SVC) in r4
 | 
					 | 
				
			||||||
    bic     r5, r4, #0x1f               @ Clear all mode bits
 | 
					 | 
				
			||||||
    orr     r5, r5, #0x16               @ Set bits for Monitor mode
 | 
					 | 
				
			||||||
    msr     cpsr_cxsf, r5               @ We are now in Monitor Mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     sp, r3                      @ Set the stack of the Monitor Mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     lr, r0                      @ Use the pass entrypoint as lr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r4               @ Use saved mode for the MOVS jump to the kernel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     r4, r0                      @ Swap EntryPoint and MpId registers
 | 
					 | 
				
			||||||
    mov     r0, r1
 | 
					 | 
				
			||||||
    mov     r1, r2
 | 
					 | 
				
			||||||
    mov     r2, r3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bx      r4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Return-from-exception is not an interworking return, so we must do it
 | 
					 | 
				
			||||||
# in two steps, in case r0 has the Thumb bit set.
 | 
					 | 
				
			||||||
ASM_PFX(return_from_exception):
 | 
					 | 
				
			||||||
    adr     lr, returned_exception
 | 
					 | 
				
			||||||
    movs    pc, lr
 | 
					 | 
				
			||||||
returned_exception:                           @ We are now in non-secure state
 | 
					 | 
				
			||||||
    bx      r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Save the current Program Status Register (PSR) into the Saved PSR
 | 
					 | 
				
			||||||
ASM_PFX(copy_cpsr_into_spsr):
 | 
					 | 
				
			||||||
    mrs     r0, cpsr
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r0
 | 
					 | 
				
			||||||
    bx      lr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the Non Secure Mode
 | 
					 | 
				
			||||||
ASM_PFX(set_non_secure_mode):
 | 
					 | 
				
			||||||
    push    { r1 }
 | 
					 | 
				
			||||||
    and     r0, r0, #0x1f     @ Keep only the mode bits
 | 
					 | 
				
			||||||
    mrs     r1, spsr          @ Read the spsr
 | 
					 | 
				
			||||||
    bic     r1, r1, #0x1f     @ Clear all mode bits
 | 
					 | 
				
			||||||
    orr     r1, r1, r0
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r1     @ write back spsr (may have caused a mode switch)
 | 
					 | 
				
			||||||
    isb
 | 
					 | 
				
			||||||
    pop     { r1 }
 | 
					 | 
				
			||||||
    bx      lr                @ return (hopefully thumb-safe!)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
 | 
					 | 
				
			||||||
@ -1,77 +0,0 @@
 | 
				
			|||||||
//
 | 
					 | 
				
			||||||
//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  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.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    EXPORT  return_from_exception
 | 
					 | 
				
			||||||
    EXPORT  enter_monitor_mode
 | 
					 | 
				
			||||||
    EXPORT  copy_cpsr_into_spsr
 | 
					 | 
				
			||||||
    EXPORT  set_non_secure_mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    AREA   Helper, CODE, READONLY
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// r0: Monitor World EntryPoint
 | 
					 | 
				
			||||||
// r1: MpId
 | 
					 | 
				
			||||||
// r2: SecBootMode
 | 
					 | 
				
			||||||
// r3: Secure Monitor mode stack
 | 
					 | 
				
			||||||
enter_monitor_mode FUNCTION
 | 
					 | 
				
			||||||
    cmp     r3, #0                      // If a Secure Monitor stack base has not been defined then use the Secure stack
 | 
					 | 
				
			||||||
    moveq   r3, sp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mrs     r4, cpsr                    // Save current mode (SVC) in r4
 | 
					 | 
				
			||||||
    bic     r5, r4, #0x1f               // Clear all mode bits
 | 
					 | 
				
			||||||
    orr     r5, r5, #0x16               // Set bits for Monitor mode
 | 
					 | 
				
			||||||
    msr     cpsr_cxsf, r5               // We are now in Monitor Mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     sp, r3                      // Set the stack of the Monitor Mode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     lr, r0                      // Use the pass entrypoint as lr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r4               // Use saved mode for the MOVS jump to the kernel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mov     r4, r0                      // Swap EntryPoint and MpId registers
 | 
					 | 
				
			||||||
    mov     r0, r1
 | 
					 | 
				
			||||||
    mov     r1, r2
 | 
					 | 
				
			||||||
    mov     r2, r3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bx      r4
 | 
					 | 
				
			||||||
    ENDFUNC
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Return-from-exception is not an interworking return, so we must do it
 | 
					 | 
				
			||||||
// in two steps, in case r0 has the Thumb bit set.
 | 
					 | 
				
			||||||
return_from_exception
 | 
					 | 
				
			||||||
    adr     lr, returned_exception
 | 
					 | 
				
			||||||
    movs    pc, lr
 | 
					 | 
				
			||||||
returned_exception                           // We are now in non-secure state
 | 
					 | 
				
			||||||
    bx      r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Save the current Program Status Register (PSR) into the Saved PSR
 | 
					 | 
				
			||||||
copy_cpsr_into_spsr
 | 
					 | 
				
			||||||
    mrs     r0, cpsr
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r0
 | 
					 | 
				
			||||||
    bx      lr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Set the Non Secure Mode
 | 
					 | 
				
			||||||
set_non_secure_mode
 | 
					 | 
				
			||||||
    push    { r1 }
 | 
					 | 
				
			||||||
    and     r0, r0, #0x1f     // Keep only the mode bits
 | 
					 | 
				
			||||||
    mrs     r1, spsr          // Read the spsr
 | 
					 | 
				
			||||||
    bic     r1, r1, #0x1f     // Clear all mode bits
 | 
					 | 
				
			||||||
    orr     r1, r1, r0
 | 
					 | 
				
			||||||
    msr     spsr_cxsf, r1     // write back spsr (may have caused a mode switch)
 | 
					 | 
				
			||||||
    isb
 | 
					 | 
				
			||||||
    pop     { r1 }
 | 
					 | 
				
			||||||
    bx      lr                // return (hopefully thumb-safe!)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dead
 | 
					 | 
				
			||||||
    B       dead
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    END
 | 
					 | 
				
			||||||
@ -1,118 +0,0 @@
 | 
				
			|||||||
//
 | 
					 | 
				
			||||||
//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  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 <AutoGen.h>
 | 
					 | 
				
			||||||
#include <AsmMacroIoLib.h>
 | 
					 | 
				
			||||||
#include "SecInternal.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.text
 | 
					 | 
				
			||||||
.align 3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(CEntryPoint)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformGetCorePosition)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformSecBootAction)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmPlatformSecBootMemoryInit)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmDisableInterrupts)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmDisableCachesAndMmu)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmReadMpidr)
 | 
					 | 
				
			||||||
GCC_ASM_IMPORT(ArmCallWFE)
 | 
					 | 
				
			||||||
GCC_ASM_EXPORT(_ModuleEntryPoint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
StartupAddr:        .word       ASM_PFX(CEntryPoint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ASM_PFX(_ModuleEntryPoint):
 | 
					 | 
				
			||||||
  // First ensure all interrupts are disabled
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmDisableInterrupts)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Ensure that the MMU and caches are off
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmDisableCachesAndMmu)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // By default, we are doing a cold boot
 | 
					 | 
				
			||||||
  mov   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to Platform Specific Boot Action function
 | 
					 | 
				
			||||||
  blx   ASM_PFX(ArmPlatformSecBootAction)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_IdentifyCpu:
 | 
					 | 
				
			||||||
  // Identify CPU ID
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmReadMpidr)
 | 
					 | 
				
			||||||
  // Keep a copy of the MpId register value
 | 
					 | 
				
			||||||
  mov   r9, r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Is it the Primary Core ?
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformIsPrimaryCore)
 | 
					 | 
				
			||||||
  cmp   r0, #1
 | 
					 | 
				
			||||||
  // Only the primary core initialize the memory (SMC)
 | 
					 | 
				
			||||||
  beq   _InitMem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_WaitInitMem:
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  // Otherwise we have to wait the Primary Core to finish the initialization
 | 
					 | 
				
			||||||
  cmp   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  bne   _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Wait for the primary core to initialize the initial memory (event: BOOT_MEM_INIT)
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmCallWFE)
 | 
					 | 
				
			||||||
  // Now the Init Mem is initialized, we setup the secondary core stacks
 | 
					 | 
				
			||||||
  b     _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_InitMem:
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  cmp   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  bne   _SetupPrimaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize Init Boot Memory
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformSecBootMemoryInit)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupPrimaryCoreStack:
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), r2)
 | 
					 | 
				
			||||||
  add   r1, r1, r2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  mov   sp, r1
 | 
					 | 
				
			||||||
  b     _PrepareArguments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupSecondaryCoreStack:
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), r2)
 | 
					 | 
				
			||||||
  add   r6, r1, r2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get the Core Position
 | 
					 | 
				
			||||||
  mov   r0, r9
 | 
					 | 
				
			||||||
  bl    ASM_PFX(ArmPlatformGetCorePosition)
 | 
					 | 
				
			||||||
  // The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack
 | 
					 | 
				
			||||||
  add   r0, r0, #1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // StackOffset = CorePos * StackSize
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecSecondaryStackSize), r2)
 | 
					 | 
				
			||||||
  mul   r0, r0, r2
 | 
					 | 
				
			||||||
  // SP = StackBase + StackOffset
 | 
					 | 
				
			||||||
  add   sp, r6, r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_PrepareArguments:
 | 
					 | 
				
			||||||
  // 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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to SEC C code
 | 
					 | 
				
			||||||
  //    r0 = mp_id
 | 
					 | 
				
			||||||
  //    r1 = Boot Mode
 | 
					 | 
				
			||||||
  mov   r0, r9
 | 
					 | 
				
			||||||
  mov   r1, r10
 | 
					 | 
				
			||||||
  blx   r3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_NeverReturn:
 | 
					 | 
				
			||||||
  b _NeverReturn
 | 
					 | 
				
			||||||
@ -1,122 +0,0 @@
 | 
				
			|||||||
//
 | 
					 | 
				
			||||||
//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  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 <AutoGen.h>
 | 
					 | 
				
			||||||
#include <AsmMacroIoLib.h>
 | 
					 | 
				
			||||||
#include "SecInternal.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  INCLUDE AsmMacroIoLib.inc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  IMPORT  CEntryPoint
 | 
					 | 
				
			||||||
  IMPORT  ArmPlatformIsPrimaryCore
 | 
					 | 
				
			||||||
  IMPORT  ArmPlatformGetCorePosition
 | 
					 | 
				
			||||||
  IMPORT  ArmPlatformSecBootAction
 | 
					 | 
				
			||||||
  IMPORT  ArmPlatformSecBootMemoryInit
 | 
					 | 
				
			||||||
  IMPORT  ArmDisableInterrupts
 | 
					 | 
				
			||||||
  IMPORT  ArmDisableCachesAndMmu
 | 
					 | 
				
			||||||
  IMPORT  ArmReadMpidr
 | 
					 | 
				
			||||||
  IMPORT  ArmCallWFE
 | 
					 | 
				
			||||||
  EXPORT  _ModuleEntryPoint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  PRESERVE8
 | 
					 | 
				
			||||||
  AREA    SecEntryPoint, CODE, READONLY
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
StartupAddr        DCD      CEntryPoint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_ModuleEntryPoint FUNCTION
 | 
					 | 
				
			||||||
  // First ensure all interrupts are disabled
 | 
					 | 
				
			||||||
  bl    ArmDisableInterrupts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Ensure that the MMU and caches are off
 | 
					 | 
				
			||||||
  bl    ArmDisableCachesAndMmu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // By default, we are doing a cold boot
 | 
					 | 
				
			||||||
  mov   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to Platform Specific Boot Action function
 | 
					 | 
				
			||||||
  blx   ArmPlatformSecBootAction
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_IdentifyCpu
 | 
					 | 
				
			||||||
  // Identify CPU ID
 | 
					 | 
				
			||||||
  bl    ArmReadMpidr
 | 
					 | 
				
			||||||
  // Keep a copy of the MpId register value
 | 
					 | 
				
			||||||
  mov   r9, r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Is it the Primary Core ?
 | 
					 | 
				
			||||||
  bl    ArmPlatformIsPrimaryCore
 | 
					 | 
				
			||||||
  cmp   r0, #1
 | 
					 | 
				
			||||||
  // Only the primary core initialize the memory (SMC)
 | 
					 | 
				
			||||||
  beq   _InitMem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_WaitInitMem
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  // Otherwise we have to wait the Primary Core to finish the initialization
 | 
					 | 
				
			||||||
  cmp   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  bne   _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Wait for the primary core to initialize the initial memory (event: BOOT_MEM_INIT)
 | 
					 | 
				
			||||||
  bl    ArmCallWFE
 | 
					 | 
				
			||||||
  // Now the Init Mem is initialized, we setup the secondary core stacks
 | 
					 | 
				
			||||||
  b     _SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_InitMem
 | 
					 | 
				
			||||||
  // If we are not doing a cold boot in this case we should assume the Initial Memory to be already initialized
 | 
					 | 
				
			||||||
  cmp   r10, #ARM_SEC_COLD_BOOT
 | 
					 | 
				
			||||||
  bne   _SetupPrimaryCoreStack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize Init Boot Memory
 | 
					 | 
				
			||||||
  bl    ArmPlatformSecBootMemoryInit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupPrimaryCoreStack
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), r2)
 | 
					 | 
				
			||||||
  add   r1, r1, r2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  mov   sp, r1
 | 
					 | 
				
			||||||
  b     _PrepareArguments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_SetupSecondaryCoreStack
 | 
					 | 
				
			||||||
  // Get the top of the primary stacks (and the base of the secondary stacks)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecPrimaryStackSize), r2)
 | 
					 | 
				
			||||||
  add   r6, r1, r2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get the Core Position
 | 
					 | 
				
			||||||
  mov   r0, r9
 | 
					 | 
				
			||||||
  bl    ArmPlatformGetCorePosition
 | 
					 | 
				
			||||||
  // The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack
 | 
					 | 
				
			||||||
  add   r0, r0, #1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // StackOffset = CorePos * StackSize
 | 
					 | 
				
			||||||
  LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecSecondaryStackSize), r2)
 | 
					 | 
				
			||||||
  mul   r0, r0, r2
 | 
					 | 
				
			||||||
  // SP = StackBase + StackOffset
 | 
					 | 
				
			||||||
  add   sp, r6, r0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_PrepareArguments
 | 
					 | 
				
			||||||
  // 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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Jump to SEC C code
 | 
					 | 
				
			||||||
  //    r0 = mp_id
 | 
					 | 
				
			||||||
  //    r1 = Boot Mode
 | 
					 | 
				
			||||||
  mov   r0, r9
 | 
					 | 
				
			||||||
  mov   r1, r10
 | 
					 | 
				
			||||||
  blx   r3
 | 
					 | 
				
			||||||
  ENDFUNC
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_NeverReturn
 | 
					 | 
				
			||||||
  b _NeverReturn
 | 
					 | 
				
			||||||
  END
 | 
					 | 
				
			||||||
@ -1,200 +0,0 @@
 | 
				
			|||||||
/** @file
 | 
					 | 
				
			||||||
*  Main file supporting the SEC Phase on ARM Platforms
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  Copyright (c) 2011-2014, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  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 <Library/ArmTrustedMonitorLib.h>
 | 
					 | 
				
			||||||
#include <Library/DebugAgentLib.h>
 | 
					 | 
				
			||||||
#include <Library/PrintLib.h>
 | 
					 | 
				
			||||||
#include <Library/BaseMemoryLib.h>
 | 
					 | 
				
			||||||
#include <Library/SerialPortLib.h>
 | 
					 | 
				
			||||||
#include <Library/ArmGicLib.h>
 | 
					 | 
				
			||||||
#include <Library/ArmPlatformLib.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "SecInternal.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define SerialPrint(txt)  SerialPortWrite ((UINT8*)txt, AsciiStrLen(txt)+1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
CEntryPoint (
 | 
					 | 
				
			||||||
  IN  UINTN                     MpId,
 | 
					 | 
				
			||||||
  IN  UINTN                     SecBootMode
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  CHAR8           Buffer[100];
 | 
					 | 
				
			||||||
  UINTN           CharCount;
 | 
					 | 
				
			||||||
  UINTN           JumpAddress;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Invalidate the data cache. Doesn't have to do the Data cache clean.
 | 
					 | 
				
			||||||
  ArmInvalidateDataCache ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Invalidate Instruction Cache
 | 
					 | 
				
			||||||
  ArmInvalidateInstructionCache ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Invalidate I & D TLBs
 | 
					 | 
				
			||||||
  ArmInvalidateTlb ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // CPU specific settings
 | 
					 | 
				
			||||||
  ArmCpuSetup (MpId);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enable Floating Point Coprocessor if supported by the platform
 | 
					 | 
				
			||||||
  if (FixedPcdGet32 (PcdVFPEnabled)) {
 | 
					 | 
				
			||||||
    ArmEnableVFP ();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize peripherals that must be done at the early stage
 | 
					 | 
				
			||||||
  // Example: Some L2 controller, interconnect, clock, DMC, etc
 | 
					 | 
				
			||||||
  ArmPlatformSecInitialize (MpId);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Primary CPU clears out the SCU tag RAMs, secondaries wait
 | 
					 | 
				
			||||||
  if (ArmPlatformIsPrimaryCore (MpId) && (SecBootMode == ARM_SEC_COLD_BOOT)) {
 | 
					 | 
				
			||||||
    if (ArmIsMpCore()) {
 | 
					 | 
				
			||||||
      // Signal for the initial memory is configured (event: BOOT_MEM_INIT)
 | 
					 | 
				
			||||||
      ArmCallSEV ();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // SEC phase needs to run library constructors by hand. This assumes we are linked against the SerialLib
 | 
					 | 
				
			||||||
    // In non SEC modules the init call is in autogenerated code.
 | 
					 | 
				
			||||||
    SerialPortInitialize ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Start talking
 | 
					 | 
				
			||||||
    if (FixedPcdGetBool (PcdTrustzoneSupport)) {
 | 
					 | 
				
			||||||
      CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Secure firmware (version %s built at %a on %a)\n\r",
 | 
					 | 
				
			||||||
          (CHAR16*)PcdGetPtr(PcdFirmwareVersionString), __TIME__, __DATE__);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Boot firmware (version %s built at %a on %a)\n\r",
 | 
					 | 
				
			||||||
          (CHAR16*)PcdGetPtr(PcdFirmwareVersionString), __TIME__, __DATE__);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    SerialPortWrite ((UINT8 *) Buffer, CharCount);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Initialize the Debug Agent for Source Level Debugging
 | 
					 | 
				
			||||||
    InitializeDebugAgent (DEBUG_AGENT_INIT_PREMEM_SEC, NULL, NULL);
 | 
					 | 
				
			||||||
    SaveAndSetDebugTimerInterrupt (TRUE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Enable the GIC distributor and CPU Interface
 | 
					 | 
				
			||||||
    // - no other Interrupts are enabled,  doesn't have to worry about the priority.
 | 
					 | 
				
			||||||
    // - all the cores are in secure state, use secure SGI's
 | 
					 | 
				
			||||||
    ArmGicEnableDistributor (PcdGet32(PcdGicDistributorBase));
 | 
					 | 
				
			||||||
    ArmGicEnableInterruptInterface (PcdGet32(PcdGicInterruptInterfaceBase));
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    // Enable the GIC CPU Interface
 | 
					 | 
				
			||||||
    ArmGicEnableInterruptInterface (PcdGet32(PcdGicInterruptInterfaceBase));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Enable Full Access to CoProcessors
 | 
					 | 
				
			||||||
  ArmWriteCpacr (CPACR_CP_FULL_ACCESS);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Test if Trustzone is supported on this platform
 | 
					 | 
				
			||||||
  if (FixedPcdGetBool (PcdTrustzoneSupport)) {
 | 
					 | 
				
			||||||
    if (ArmIsMpCore ()) {
 | 
					 | 
				
			||||||
      // Setup SMP in Non Secure world
 | 
					 | 
				
			||||||
      ArmCpuSetupSmpNonSecure (GET_CORE_ID(MpId));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Either we use the Secure Stacks for Secure Monitor (in this case (Base == 0) && (Size == 0))
 | 
					 | 
				
			||||||
    // Or we use separate Secure Monitor stacks (but (Base != 0) && (Size != 0))
 | 
					 | 
				
			||||||
    ASSERT (((PcdGet32(PcdCPUCoresSecMonStackBase) == 0) && (PcdGet32(PcdCPUCoreSecMonStackSize) == 0)) ||
 | 
					 | 
				
			||||||
            ((PcdGet32(PcdCPUCoresSecMonStackBase) != 0) && (PcdGet32(PcdCPUCoreSecMonStackSize) != 0)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Enter Monitor Mode
 | 
					 | 
				
			||||||
    enter_monitor_mode (
 | 
					 | 
				
			||||||
      (UINTN)TrustedWorldInitialization, MpId, SecBootMode,
 | 
					 | 
				
			||||||
      (VOID*) (PcdGet32 (PcdCPUCoresSecMonStackBase) +
 | 
					 | 
				
			||||||
          (PcdGet32 (PcdCPUCoreSecMonStackSize) * (ArmPlatformGetCorePosition (MpId) + 1)))
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    if (ArmPlatformIsPrimaryCore (MpId)) {
 | 
					 | 
				
			||||||
      SerialPrint ("Trust Zone Configuration is disabled\n\r");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // With Trustzone support the transition from Sec to Normal world is done by return_from_exception().
 | 
					 | 
				
			||||||
    // If we want to keep this function call we need to ensure the SVC's SPSR point to the same Program
 | 
					 | 
				
			||||||
    // Status Register as the the current one (CPSR).
 | 
					 | 
				
			||||||
    copy_cpsr_into_spsr ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Call the Platform specific function to execute additional actions if required
 | 
					 | 
				
			||||||
    JumpAddress = PcdGet64 (PcdFvBaseAddress);
 | 
					 | 
				
			||||||
    ArmPlatformSecExtraAction (MpId, &JumpAddress);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    NonTrustedWorldTransition (MpId, JumpAddress);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  ASSERT (0); // We must never return from the above function
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
TrustedWorldInitialization (
 | 
					 | 
				
			||||||
  IN  UINTN                     MpId,
 | 
					 | 
				
			||||||
  IN  UINTN                     SecBootMode
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  UINTN   JumpAddress;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //-------------------- Monitor Mode ---------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Set up Monitor World (Vector Table, etc)
 | 
					 | 
				
			||||||
  ArmSecureMonitorWorldInitialize ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Transfer the interrupt to Non-secure World
 | 
					 | 
				
			||||||
  ArmGicSetupNonSecure (MpId, PcdGet32(PcdGicDistributorBase), PcdGet32(PcdGicInterruptInterfaceBase));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize platform specific security policy
 | 
					 | 
				
			||||||
  ArmPlatformSecTrustzoneInit (MpId);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Setup the Trustzone Chipsets
 | 
					 | 
				
			||||||
  if (SecBootMode == ARM_SEC_COLD_BOOT) {
 | 
					 | 
				
			||||||
    if (ArmPlatformIsPrimaryCore (MpId)) {
 | 
					 | 
				
			||||||
      if (ArmIsMpCore()) {
 | 
					 | 
				
			||||||
        // Signal the secondary core the Security settings is done (event: EVENT_SECURE_INIT)
 | 
					 | 
				
			||||||
        ArmCallSEV ();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      // The secondary cores need to wait until the Trustzone chipsets configuration is done
 | 
					 | 
				
			||||||
      // before switching to Non Secure World
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // Wait for the Primary Core to finish the initialization of the Secure World (event: EVENT_SECURE_INIT)
 | 
					 | 
				
			||||||
      ArmCallWFE ();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Call the Platform specific function to execute additional actions if required
 | 
					 | 
				
			||||||
  JumpAddress = PcdGet64 (PcdFvBaseAddress);
 | 
					 | 
				
			||||||
  ArmPlatformSecExtraAction (MpId, &JumpAddress);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Initialize architecture specific security policy
 | 
					 | 
				
			||||||
  ArmSecArchTrustzoneInit ();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // CP15 Secure Configuration Register
 | 
					 | 
				
			||||||
  ArmWriteScr (PcdGet32 (PcdArmScr));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  NonTrustedWorldTransition (MpId, JumpAddress);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
NonTrustedWorldTransition (
 | 
					 | 
				
			||||||
  IN  UINTN                     MpId,
 | 
					 | 
				
			||||||
  IN  UINTN                     JumpAddress
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  // If PcdArmNonSecModeTransition is defined then set this specific mode to CPSR before the transition
 | 
					 | 
				
			||||||
  // By not set, the mode for Non Secure World is SVC
 | 
					 | 
				
			||||||
  if (PcdGet32 (PcdArmNonSecModeTransition) != 0) {
 | 
					 | 
				
			||||||
    set_non_secure_mode ((ARM_PROCESSOR_MODE)PcdGet32 (PcdArmNonSecModeTransition));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return_from_exception (JumpAddress);
 | 
					 | 
				
			||||||
  //-------------------- Non Secure Mode ---------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // PEI Core should always load and never return
 | 
					 | 
				
			||||||
  ASSERT (FALSE);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,85 +0,0 @@
 | 
				
			|||||||
#/** @file
 | 
					 | 
				
			||||||
#  SEC - Reset vector code that jumps to C and starts the PEI phase
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
 | 
					 | 
				
			||||||
#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#  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.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#**/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Defines]
 | 
					 | 
				
			||||||
  INF_VERSION                    = 0x00010005
 | 
					 | 
				
			||||||
  BASE_NAME                      = ArmPlatformSec
 | 
					 | 
				
			||||||
  FILE_GUID                      = c536bbfe-c813-4e48-9f90-01fe1ecf9d54
 | 
					 | 
				
			||||||
  MODULE_TYPE                    = SEC
 | 
					 | 
				
			||||||
  VERSION_STRING                 = 1.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Sources]
 | 
					 | 
				
			||||||
  Sec.c
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Sources.ARM]
 | 
					 | 
				
			||||||
  Arm/Arch.c
 | 
					 | 
				
			||||||
  Arm/Helper.asm           | RVCT
 | 
					 | 
				
			||||||
  Arm/Helper.S             | GCC
 | 
					 | 
				
			||||||
  Arm/SecEntryPoint.S      | GCC
 | 
					 | 
				
			||||||
  Arm/SecEntryPoint.asm    | RVCT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Sources.AARCH64]
 | 
					 | 
				
			||||||
  AArch64/Arch.c
 | 
					 | 
				
			||||||
  AArch64/Helper.S
 | 
					 | 
				
			||||||
  AArch64/SecEntryPoint.S
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Packages]
 | 
					 | 
				
			||||||
  MdePkg/MdePkg.dec
 | 
					 | 
				
			||||||
  MdeModulePkg/MdeModulePkg.dec
 | 
					 | 
				
			||||||
  ArmPkg/ArmPkg.dec
 | 
					 | 
				
			||||||
  ArmPlatformPkg/ArmPlatformPkg.dec
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[LibraryClasses]
 | 
					 | 
				
			||||||
  ArmCpuLib
 | 
					 | 
				
			||||||
  ArmLib
 | 
					 | 
				
			||||||
  ArmPlatformLib
 | 
					 | 
				
			||||||
  ArmPlatformSecLib
 | 
					 | 
				
			||||||
  ArmTrustedMonitorLib
 | 
					 | 
				
			||||||
  BaseLib
 | 
					 | 
				
			||||||
  DebugLib
 | 
					 | 
				
			||||||
  DebugAgentLib
 | 
					 | 
				
			||||||
  IoLib
 | 
					 | 
				
			||||||
  ArmGicLib
 | 
					 | 
				
			||||||
  PrintLib
 | 
					 | 
				
			||||||
  SerialPortLib
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Pcd]
 | 
					 | 
				
			||||||
  gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[FixedPcd.common]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdTrustzoneSupport
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdVFPEnabled
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdArmScr
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdArmNonSecModeTransition
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdSecureFvBaseAddress
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdSecureFvSize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdFvBaseAddress
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmPlatformTokenSpaceGuid.PcdCPUCoresSecStackBase
 | 
					 | 
				
			||||||
  gArmPlatformTokenSpaceGuid.PcdCPUCoreSecPrimaryStackSize
 | 
					 | 
				
			||||||
  gArmPlatformTokenSpaceGuid.PcdCPUCoreSecSecondaryStackSize
 | 
					 | 
				
			||||||
  gArmPlatformTokenSpaceGuid.PcdCPUCoresSecMonStackBase
 | 
					 | 
				
			||||||
  gArmPlatformTokenSpaceGuid.PcdCPUCoreSecMonStackSize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdGicDistributorBase
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[FixedPcd.ARM]
 | 
					 | 
				
			||||||
  gArmTokenSpaceGuid.PcdArmNsacr
 | 
					 | 
				
			||||||
@ -1,83 +0,0 @@
 | 
				
			|||||||
/** @file
 | 
					 | 
				
			||||||
*  Main file supporting the SEC Phase on ARM PLatforms
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  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.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
**/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __SEC_H__
 | 
					 | 
				
			||||||
#define __SEC_H__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <Base.h>
 | 
					 | 
				
			||||||
#include <Library/ArmLib.h>
 | 
					 | 
				
			||||||
#include <Library/ArmCpuLib.h>
 | 
					 | 
				
			||||||
#include <Library/ArmPlatformLib.h>
 | 
					 | 
				
			||||||
#include <Library/ArmPlatformSecLib.h>
 | 
					 | 
				
			||||||
#include <Library/BaseLib.h>
 | 
					 | 
				
			||||||
#include <Library/DebugLib.h>
 | 
					 | 
				
			||||||
#include <Library/PcdLib.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define IS_ALIGNED(Address, Align) (((UINTN)Address & (Align-1)) == 0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
TrustedWorldInitialization (
 | 
					 | 
				
			||||||
  IN  UINTN                     MpId,
 | 
					 | 
				
			||||||
  IN  UINTN                     SecBootMode
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
NonTrustedWorldTransition (
 | 
					 | 
				
			||||||
  IN  UINTN                     MpId,
 | 
					 | 
				
			||||||
  IN  UINTN                     JumpAddress
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
ArmSetupGicNonSecure (
 | 
					 | 
				
			||||||
  IN  INTN                  GicDistributorBase,
 | 
					 | 
				
			||||||
  IN  INTN                  GicInterruptInterfaceBase
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
enter_monitor_mode (
 | 
					 | 
				
			||||||
  IN UINTN                  MonitorEntryPoint,
 | 
					 | 
				
			||||||
  IN UINTN                  MpId,
 | 
					 | 
				
			||||||
  IN UINTN                  SecBootMode,
 | 
					 | 
				
			||||||
  IN VOID*                  MonitorStackBase
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
return_from_exception (
 | 
					 | 
				
			||||||
  IN UINTN                  NonSecureBase
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
copy_cpsr_into_spsr (
 | 
					 | 
				
			||||||
  VOID
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
set_non_secure_mode (
 | 
					 | 
				
			||||||
  IN ARM_PROCESSOR_MODE     Mode
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
SecCommonExceptionEntry (
 | 
					 | 
				
			||||||
  IN UINT32 Entry,
 | 
					 | 
				
			||||||
  IN UINTN  LR
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VOID
 | 
					 | 
				
			||||||
EFIAPI
 | 
					 | 
				
			||||||
ArmSecArchTrustzoneInit (
 | 
					 | 
				
			||||||
  VOID
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user