mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/Sec: Clean and Move all declaration into 'SecInternal.h'
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12417 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
f92b93c9a3
commit
009f583fa0
|
@ -15,18 +15,14 @@
|
||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
#include <AutoGen.h>
|
#include <AutoGen.h>
|
||||||
|
|
||||||
#start of the code section
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
|
||||||
# IMPORT
|
|
||||||
GCC_ASM_IMPORT(SecCommonExceptionEntry)
|
GCC_ASM_IMPORT(SecCommonExceptionEntry)
|
||||||
|
|
||||||
# EXPORT
|
|
||||||
GCC_ASM_EXPORT(SecVectorTable)
|
GCC_ASM_EXPORT(SecVectorTable)
|
||||||
|
|
||||||
//============================================================
|
//============================================================
|
||||||
//Default Exception Handlers
|
// Default Exception Handlers
|
||||||
//============================================================
|
//============================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/** @file
|
/** @file
|
||||||
* Main file supporting the SEC Phase for Versatile Express
|
* Main file supporting the SEC Phase on ARM Platforms
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -13,55 +13,21 @@
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/DebugAgentLib.h>
|
#include <Library/DebugAgentLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
#include <Library/PrintLib.h>
|
#include <Library/PrintLib.h>
|
||||||
#include <Library/BaseLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/ArmLib.h>
|
#include <Library/ArmLib.h>
|
||||||
#include <Library/SerialPortLib.h>
|
#include <Library/SerialPortLib.h>
|
||||||
#include <Library/ArmPlatformLib.h>
|
#include <Library/ArmPlatformLib.h>
|
||||||
|
|
||||||
#include <Chipset/ArmV7.h>
|
|
||||||
#include <Library/ArmGicLib.h>
|
#include <Library/ArmGicLib.h>
|
||||||
|
|
||||||
|
#include "SecInternal.h"
|
||||||
|
|
||||||
#define SerialPrint(txt) SerialPortWrite ((UINT8*)txt, AsciiStrLen(txt)+1);
|
#define SerialPrint(txt) SerialPortWrite ((UINT8*)txt, AsciiStrLen(txt)+1);
|
||||||
|
|
||||||
extern VOID *monitor_vector_table;
|
extern VOID *monitor_vector_table;
|
||||||
|
|
||||||
VOID
|
|
||||||
ArmSetupGicNonSecure (
|
|
||||||
IN INTN GicDistributorBase,
|
|
||||||
IN INTN GicInterruptInterfaceBase
|
|
||||||
);
|
|
||||||
|
|
||||||
// Vector Table for Sec Phase
|
|
||||||
VOID
|
|
||||||
SecVectorTable (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
NonSecureWaitForFirmware (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
enter_monitor_mode(
|
|
||||||
IN VOID* Stack
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
return_from_exception (
|
|
||||||
IN UINTN NonSecureBase
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
copy_cpsr_into_spsr (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CEntryPoint (
|
CEntryPoint (
|
||||||
IN UINTN MpId
|
IN UINTN MpId
|
||||||
|
@ -74,7 +40,7 @@ CEntryPoint (
|
||||||
// Primary CPU clears out the SCU tag RAMs, secondaries wait
|
// Primary CPU clears out the SCU tag RAMs, secondaries wait
|
||||||
if (IS_PRIMARY_CORE(MpId)) {
|
if (IS_PRIMARY_CORE(MpId)) {
|
||||||
if (FixedPcdGet32(PcdMPCoreSupport)) {
|
if (FixedPcdGet32(PcdMPCoreSupport)) {
|
||||||
ArmInvalidScu();
|
ArmInvalidScu ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// SEC phase needs to run library constructors by hand. This assumes we are linked against the SerialLib
|
// SEC phase needs to run library constructors by hand. This assumes we are linked against the SerialLib
|
||||||
|
@ -97,20 +63,20 @@ CEntryPoint (
|
||||||
// Invalidate the data cache. Doesn't have to do the Data cache clean.
|
// Invalidate the data cache. Doesn't have to do the Data cache clean.
|
||||||
ArmInvalidateDataCache();
|
ArmInvalidateDataCache();
|
||||||
|
|
||||||
//Invalidate Instruction Cache
|
// Invalidate Instruction Cache
|
||||||
ArmInvalidateInstructionCache();
|
ArmInvalidateInstructionCache();
|
||||||
|
|
||||||
//Invalidate I & D TLBs
|
// Invalidate I & D TLBs
|
||||||
ArmInvalidateInstructionAndDataTlb();
|
ArmInvalidateInstructionAndDataTlb();
|
||||||
|
|
||||||
// Enable Full Access to CoProcessors
|
// Enable Full Access to CoProcessors
|
||||||
ArmWriteCPACR (CPACR_CP_FULL_ACCESS);
|
ArmWriteCPACR (CPACR_CP_FULL_ACCESS);
|
||||||
|
|
||||||
// Enable SWP instructions
|
// Enable SWP instructions
|
||||||
ArmEnableSWPInstruction();
|
ArmEnableSWPInstruction ();
|
||||||
|
|
||||||
// Enable program flow prediction, if supported.
|
// Enable program flow prediction, if supported.
|
||||||
ArmEnableBranchPrediction();
|
ArmEnableBranchPrediction ();
|
||||||
|
|
||||||
if (FixedPcdGet32(PcdVFPEnabled)) {
|
if (FixedPcdGet32(PcdVFPEnabled)) {
|
||||||
ArmEnableVFP();
|
ArmEnableVFP();
|
||||||
|
@ -133,7 +99,11 @@ CEntryPoint (
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test if Trustzone is supported on this platform
|
// Test if Trustzone is supported on this platform
|
||||||
if (ArmPlatformTrustzoneSupported()) {
|
if (ArmPlatformTrustzoneSupported ()) {
|
||||||
|
// Ensure the Monitor Stack Base & Size have been set
|
||||||
|
ASSERT(PcdGet32(PcdCPUCoresSecMonStackBase) != 0);
|
||||||
|
ASSERT(PcdGet32(PcdCPUCoreSecMonStackSize) != 0);
|
||||||
|
|
||||||
if (FixedPcdGet32(PcdMPCoreSupport)) {
|
if (FixedPcdGet32(PcdMPCoreSupport)) {
|
||||||
// Setup SMP in Non Secure world
|
// Setup SMP in Non Secure world
|
||||||
ArmSetupSmpNonSecure (GET_CORE_ID(MpId));
|
ArmSetupSmpNonSecure (GET_CORE_ID(MpId));
|
||||||
|
@ -148,7 +118,7 @@ CEntryPoint (
|
||||||
//-------------------- Monitor Mode ---------------------
|
//-------------------- Monitor Mode ---------------------
|
||||||
// Setup the Trustzone Chipsets
|
// Setup the Trustzone Chipsets
|
||||||
if (IS_PRIMARY_CORE(MpId)) {
|
if (IS_PRIMARY_CORE(MpId)) {
|
||||||
ArmPlatformTrustzoneInit();
|
ArmPlatformTrustzoneInit ();
|
||||||
|
|
||||||
// Wake up the secondary cores by sending a interrupt to everyone else
|
// Wake up the secondary cores by sending a interrupt to everyone else
|
||||||
// NOTE 1: The Software Generated Interrupts are always enabled on Cortex-A9
|
// NOTE 1: The Software Generated Interrupts are always enabled on Cortex-A9
|
||||||
|
@ -185,11 +155,11 @@ CEntryPoint (
|
||||||
// - Enable Access to Preload Engine in NS World
|
// - Enable Access to Preload Engine in NS World
|
||||||
// - Enable lockable TLB entries allocation in NS world
|
// - Enable lockable TLB entries allocation in NS world
|
||||||
// - Enable R/W access to SMP bit of Auxiliary Control Register in NS world
|
// - Enable R/W access to SMP bit of Auxiliary Control Register in NS world
|
||||||
ArmWriteNsacr(NSACR_NS_SMP | NSACR_TL | NSACR_PLE | NSACR_CP(10) | NSACR_CP(11));
|
ArmWriteNsacr (NSACR_NS_SMP | NSACR_TL | NSACR_PLE | NSACR_CP(10) | NSACR_CP(11));
|
||||||
|
|
||||||
// CP15 Secure Configuration Register with Non Secure bit (SCR_NS), CPSR.A modified in any
|
// CP15 Secure Configuration Register with Non Secure bit (SCR_NS), CPSR.A modified in any
|
||||||
// security state (SCR_AW), CPSR.F modified in any security state (SCR_FW)
|
// security state (SCR_AW), CPSR.F modified in any security state (SCR_FW)
|
||||||
ArmWriteScr(SCR_NS | SCR_FW | SCR_AW);
|
ArmWriteScr (SCR_NS | SCR_FW | SCR_AW);
|
||||||
} else {
|
} else {
|
||||||
if (IS_PRIMARY_CORE(MpId)) {
|
if (IS_PRIMARY_CORE(MpId)) {
|
||||||
SerialPrint ("Trust Zone Configuration is disabled\n\r");
|
SerialPrint ("Trust Zone Configuration is disabled\n\r");
|
||||||
|
|
Loading…
Reference in New Issue