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:
oliviermartin 2011-09-22 23:07:06 +00:00
parent f92b93c9a3
commit 009f583fa0
2 changed files with 17 additions and 51 deletions

View File

@ -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
//============================================================ //============================================================

View File

@ -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");