mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg: Introduced 'ArmPlatformSecLib'
The function only used in Secure Firmware used to be mixed with the Non-Secure/Normal functions in ArmPlatformLib. When the Secure Firmware was not required for some platforms (eg: BeagleBoard), these functions were empty functions. This new interface has been created to clean the ArmPlatformLib interface between the SEC and PEI phases. Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13260 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
315649cda2
commit
e314d564db
|
@ -115,6 +115,7 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/Library/ArmPlatformSecLibNull/ArmPlatformLibNullSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNullSec.inf
|
||||
ArmTrustedMonitorLib|ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.inf
|
||||
|
||||
|
|
|
@ -40,7 +40,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbSecLibRTSM/ArmRealViewEbSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbLibSec.inf
|
||||
|
||||
[BuildOptions]
|
||||
RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A8 --fpu=softvfp -I$(WORKSPACE)/ArmPlatformPkg/ArmRealViewEbPkg/Include/Platform
|
||||
|
|
|
@ -40,7 +40,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbSecLibRTSM/ArmRealViewEbSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbLibSec.inf
|
||||
|
||||
[BuildOptions]
|
||||
RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A9 --fpu=softvfp -I$(WORKSPACE)/ArmPlatformPkg/ArmRealViewEbPkg/Include/Platform
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = ArmRealViewEbLibSec
|
||||
FILE_GUID = 5d1013ae-57b8-4a37-87d8-f5bf70e49059
|
||||
MODULE_TYPE = SEC
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
IoLib
|
||||
ArmLib
|
||||
|
||||
[Sources.common]
|
||||
ArmRealViewEb.c
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Library/ArmPlatformSecLib.h>
|
||||
#include <ArmPlatform.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
|||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
@ -33,7 +33,11 @@ GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
|||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
bx lr
|
||||
LoadConstantToReg (ARM_EB_SYS_FLAGS_NV_REG, r0)
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
bxeq lr
|
||||
bxne r0
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
@ -45,6 +49,6 @@ ASM_PFX(ArmPlatformSecBootAction):
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformInitializeBootMemory):
|
||||
ASM_PFX(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -13,17 +13,17 @@
|
|||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Library/ArmPlatformSecLib.h>
|
||||
#include <ArmPlatform.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformInitializeBootMemory
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
|
||||
PRESERVE8
|
||||
AREA CTA9x4BootMode, CODE, READONLY
|
||||
AREA ArmRealviewEbBootMode, CODE, READONLY
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
@ -35,7 +35,11 @@
|
|||
|
||||
**/
|
||||
ArmPlatformSecBootAction
|
||||
bx lr
|
||||
LoadConstantToReg (ARM_EB_SYS_FLAGS_NV_REG, r0)
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
bxeq lr
|
||||
bxne r0
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
@ -47,6 +51,6 @@ ArmPlatformSecBootAction
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ArmPlatformInitializeBootMemory
|
||||
ArmPlatformSecBootMemoryInit
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
* 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
|
||||
|
@ -13,7 +13,8 @@
|
|||
**/
|
||||
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Library/ArmLib.h>
|
||||
#include <Library/ArmPlatformSecLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
|
@ -30,7 +31,7 @@
|
|||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformTrustzoneInit (
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
|
@ -44,12 +45,18 @@ ArmPlatformTrustzoneInit (
|
|||
For example, some L2x0 requires to be initialized in Secure World
|
||||
|
||||
**/
|
||||
VOID
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
VOID
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!IS_PRIMARY_CORE(MpId)) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
// Do nothing yet
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
|
@ -1,5 +1,5 @@
|
|||
#/* @file
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -17,7 +17,7 @@
|
|||
FILE_GUID = 6e02ebe0-1d96-11e0-b9cb-0002a5d5c51b
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
LIBRARY_CLASS = ArmPlatformSecLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
@ -31,7 +31,6 @@
|
|||
ArmLib
|
||||
|
||||
[Sources.common]
|
||||
ArmRealViewEb.c
|
||||
ArmRealViewEbSec.c
|
||||
ArmRealViewEbBoot.asm | RVCT
|
||||
ArmRealViewEbBoot.S | GCC
|
||||
|
@ -41,3 +40,6 @@
|
|||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -54,7 +54,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/ArmVExpressSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibCTA9x4/ArmVExpressSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/ArmVExpressLibSec.inf
|
||||
|
||||
# Uncomment to turn on GDB stub in SEC.
|
||||
#DebugAgentLib|EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -48,7 +48,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf
|
||||
|
||||
[BuildOptions]
|
||||
RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include/Platform/RTSM
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -48,7 +48,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf
|
||||
|
||||
[BuildOptions]
|
||||
RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include/Platform/RTSM
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -42,7 +42,8 @@
|
|||
|
||||
[LibraryClasses.common.SEC]
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformSecLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
|
||||
ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/ArmVExpressLibSec.inf
|
||||
|
||||
# Uncomment to turn on GDB stub in SEC.
|
||||
#DebugAgentLib|EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf
|
||||
|
|
|
@ -1,57 +1,53 @@
|
|||
#/* @file
|
||||
# Copyright (c) 2011, 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 = CTA9x4ArmVExpressLib
|
||||
FILE_GUID = b16c63a0-f417-11df-b3af-0002a5d5c51b
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
ArmLib
|
||||
ArmTrustZoneLib
|
||||
ArmPlatformSysConfigLib
|
||||
ArmPlatformSecExtraActionLib
|
||||
IoLib
|
||||
L2X0CacheLib
|
||||
PL301AxiLib
|
||||
PL341DmcLib
|
||||
PL35xSmcLib
|
||||
SerialPortLib
|
||||
|
||||
[Sources.common]
|
||||
CTA9x4Sec.c
|
||||
CTA9x4.c
|
||||
CTA9x4Boot.asm | RVCT
|
||||
CTA9x4Boot.S | GCC
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdTrustzoneSupport
|
||||
|
||||
gArmTokenSpaceGuid.PcdL2x0ControllerBase
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
||||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = CTA9x4ArmVExpressLibSec
|
||||
FILE_GUID = b16c63a0-f417-11df-b3af-0002a5d5c51b
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
IoLib
|
||||
ArmLib
|
||||
ArmTrustZoneLib
|
||||
PL341DmcLib
|
||||
PL301AxiLib
|
||||
L2X0CacheLib
|
||||
SerialPortLib
|
||||
|
||||
[Sources.common]
|
||||
CTA9x4.c
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdTrustzoneSupport
|
||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
||||
|
||||
gArmTokenSpaceGuid.PcdL2x0ControllerBase
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -0,0 +1,50 @@
|
|||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = RTSMArmVExpressLibSec
|
||||
FILE_GUID = a79eed97-4b98-4974-9690-37b32d6a5b56
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
IoLib
|
||||
ArmLib
|
||||
SerialPortLib
|
||||
|
||||
[Sources.common]
|
||||
RTSM.c
|
||||
RTSMHelper.asm | RVCT
|
||||
RTSMHelper.S | GCC
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
gArmPlatformTokenSpaceGuid.PcdStandalone
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
||||
gArmTokenSpaceGuid.PcdSystemMemorySize
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -0,0 +1,59 @@
|
|||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = CTA9x4ArmVExpressLib
|
||||
FILE_GUID = aac05341-56df-4a77-b20f-f5daa456bd90
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformSecLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
ArmLib
|
||||
ArmTrustZoneLib
|
||||
ArmPlatformLib
|
||||
ArmPlatformSysConfigLib
|
||||
ArmPlatformSecExtraActionLib
|
||||
IoLib
|
||||
L2X0CacheLib
|
||||
PL301AxiLib
|
||||
PL341DmcLib
|
||||
PL35xSmcLib
|
||||
SerialPortLib
|
||||
|
||||
[Sources.common]
|
||||
CTA9x4Sec.c
|
||||
CTA9x4Boot.asm | RVCT
|
||||
CTA9x4Boot.S | GCC
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
gArmPlatformTokenSpaceGuid.PcdStandalone
|
||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdTrustzoneSupport
|
||||
|
||||
gArmTokenSpaceGuid.PcdL2x0ControllerBase
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -22,7 +22,7 @@
|
|||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
GCC_ASM_IMPORT(PL35xSmcInitialize)
|
||||
|
||||
//
|
||||
|
@ -82,7 +82,7 @@ ASM_PFX(ArmPlatformSecBootAction):
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformInitializeBootMemory):
|
||||
ASM_PFX(ArmPlatformSecBootMemoryInit):
|
||||
mov r5, lr
|
||||
|
||||
//
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -21,7 +21,7 @@
|
|||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformInitializeBootMemory
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
IMPORT PL35xSmcInitialize
|
||||
|
||||
PRESERVE8
|
||||
|
@ -84,7 +84,7 @@ ArmPlatformSecBootAction
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ArmPlatformInitializeBootMemory
|
||||
ArmPlatformSecBootMemoryInit
|
||||
mov r5, lr
|
||||
|
||||
//
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformTrustzoneInit (
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
|
@ -114,10 +114,16 @@ ArmPlatformTrustzoneInit (
|
|||
For example, some L2x0 requires to be initialized in Secure World
|
||||
|
||||
**/
|
||||
VOID
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
VOID
|
||||
) {
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!IS_PRIMARY_CORE(MpId)) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
// The L2x0 controller must be intialize in Secure World
|
||||
L2x0CacheInit(PcdGet32(PcdL2x0ControllerBase),
|
||||
PL310_TAG_LATENCIES(L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES),
|
||||
|
@ -127,4 +133,16 @@ ArmPlatformSecInitialize (
|
|||
|
||||
// Initialize the System Configuration
|
||||
ArmPlatformSysConfigInitialize ();
|
||||
|
||||
// If we skip the PEI Core we could want to initialize the DRAM in the SEC phase.
|
||||
// If we are in standalone, we need the initialization to copy the UEFI firmware into DRAM
|
||||
if ((FeaturePcdGet (PcdSystemMemoryInitializeInSec)) || (FeaturePcdGet (PcdStandalone) == FALSE)) {
|
||||
// If it is not a standalone build ensure the PcdSystemMemoryInitializeInSec has been set
|
||||
ASSERT(FeaturePcdGet (PcdSystemMemoryInitializeInSec) == TRUE);
|
||||
|
||||
// Initialize system memory (DRAM)
|
||||
ArmPlatformInitializeSystemMemory ();
|
||||
}
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
#/* @file
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -13,11 +13,11 @@
|
|||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = RTSMArmVExpressLib
|
||||
FILE_GUID = 6352e3a0-ed14-4613-bf90-d316014dd142
|
||||
BASE_NAME = RTSMArmVExpressSecLib
|
||||
FILE_GUID = 1fdaabb0-ab7d-480c-91ff-428dc1546f3a
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
LIBRARY_CLASS = ArmPlatformSecLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
@ -33,14 +33,11 @@
|
|||
|
||||
[Sources.common]
|
||||
RTSMSec.c
|
||||
RTSM.c
|
||||
RTSMBoot.asm | RVCT
|
||||
RTSMBoot.S | GCC
|
||||
RTSMHelper.asm | RVCT
|
||||
RTSMHelper.S | GCC
|
||||
|
||||
[Protocols]
|
||||
|
||||
[FeaturePcd]
|
||||
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
|
@ -48,3 +45,6 @@
|
|||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
||||
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -21,7 +21,7 @@
|
|||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
@ -45,6 +45,6 @@ ASM_PFX(ArmPlatformSecBootAction):
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformInitializeBootMemory):
|
||||
ASM_PFX(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -20,7 +20,7 @@
|
|||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformInitializeBootMemory
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
|
||||
PRESERVE8
|
||||
AREA RTSMVExpressBootMode, CODE, READONLY
|
||||
|
@ -47,6 +47,6 @@ ArmPlatformSecBootAction
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ArmPlatformInitializeBootMemory
|
||||
ArmPlatformSecBootMemoryInit
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -0,0 +1,71 @@
|
|||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <AutoGen.h>
|
||||
#.include AsmMacroIoLib.inc
|
||||
|
||||
#include <Chipset/ArmCortexA9.h>
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)
|
||||
|
||||
# IN None
|
||||
# OUT r0 = SCU Base Address
|
||||
ASM_PFX(ArmGetScuBaseAddress):
|
||||
# Read Configuration Base Address Register. ArmCBar cannot be called to get
|
||||
# the Configuration BAR as a stack is not necessary setup. The SCU is at the
|
||||
# offset 0x0000 from the Private Memory Region.
|
||||
mrc p15, 4, r0, c15, c0, 0
|
||||
bx lr
|
||||
|
||||
# IN None
|
||||
# OUT r0 = number of cores present in the system
|
||||
ASM_PFX(ArmGetCpuCountPerCluster):
|
||||
stmfd SP!, {r1-r2}
|
||||
|
||||
# Read CP15 MIDR
|
||||
mrc p15, 0, r1, c0, c0, 0
|
||||
|
||||
# Check if the CPU is A15
|
||||
mov r1, r1, LSR #4
|
||||
LoadConstantToReg (ARM_CPU_TYPE_MASK, r0)
|
||||
and r1, r1, r0
|
||||
|
||||
LoadConstantToReg (ARM_CPU_TYPE_A15, r0)
|
||||
cmp r1, r0
|
||||
beq _Read_cp15_reg
|
||||
|
||||
_CPU_is_not_A15:
|
||||
mov r2, lr @ Save link register
|
||||
bl ArmGetScuBaseAddress @ Read SCU Base Address
|
||||
mov lr, r2 @ Restore link register val
|
||||
ldr r0, [r0, #A9_SCU_CONFIG_OFFSET] @ Read SCU Config reg to get CPU count
|
||||
b _Return
|
||||
|
||||
_Read_cp15_reg:
|
||||
mrc p15, 1, r0, c9, c0, 2 @ Read C9 register of CP15 to get CPU count
|
||||
lsr r0, #24
|
||||
|
||||
_Return:
|
||||
and r0, r0, #3
|
||||
# Add '1' to the number of CPU on the Cluster
|
||||
add r0, r0, #1
|
||||
ldmfd SP!, {r1-r2}
|
||||
bx lr
|
||||
|
||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -0,0 +1,73 @@
|
|||
//
|
||||
// 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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <Chipset/ArmCortexA9.h>
|
||||
|
||||
#include <AutoGen.h>
|
||||
|
||||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmGetCpuCountPerCluster
|
||||
|
||||
AREA RTSMHelper, CODE, READONLY
|
||||
|
||||
// IN None
|
||||
// OUT r0 = SCU Base Address
|
||||
ArmGetScuBaseAddress
|
||||
// Read Configuration Base Address Register. ArmCBar cannot be called to get
|
||||
// the Configuration BAR as a stack is not necessary setup. The SCU is at the
|
||||
// offset 0x0000 from the Private Memory Region.
|
||||
mrc p15, 4, r0, c15, c0, 0
|
||||
bx lr
|
||||
|
||||
// IN None
|
||||
// OUT r0 = number of cores present in the system
|
||||
ArmGetCpuCountPerCluster
|
||||
stmfd SP!, {r1-r2}
|
||||
|
||||
// Read CP15 MIDR
|
||||
mrc p15, 0, r1, c0, c0, 0
|
||||
|
||||
// Check if the CPU is A15
|
||||
mov r1, r1, LSR #4
|
||||
mov r0, #ARM_CPU_TYPE_MASK
|
||||
and r1, r1, r0
|
||||
|
||||
mov r0, #ARM_CPU_TYPE_A15
|
||||
cmp r1, r0
|
||||
beq _Read_cp15_reg
|
||||
|
||||
_CPU_is_not_A15
|
||||
mov r2, lr ; Save link register
|
||||
bl ArmGetScuBaseAddress ; Read SCU Base Address
|
||||
mov lr, r2 ; Restore link register val
|
||||
ldr r0, [r0, #A9_SCU_CONFIG_OFFSET] ; Read SCU Config reg to get CPU count
|
||||
b _Return
|
||||
|
||||
_Read_cp15_reg
|
||||
mrc p15, 1, r0, c9, c0, 2 ; Read C9 register of CP15 to get CPU count
|
||||
lsr r0, #24
|
||||
|
||||
|
||||
_Return
|
||||
and r0, r0, #3
|
||||
// Add '1' to the number of CPU on the Cluster
|
||||
add r0, r0, #1
|
||||
ldmfd SP!, {r1-r2}
|
||||
bx lr
|
||||
|
||||
END
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformTrustzoneInit (
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
|
@ -44,11 +44,16 @@ ArmPlatformTrustzoneInit (
|
|||
For example, some L2x0 requires to be initialized in Secure World
|
||||
|
||||
**/
|
||||
VOID
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
VOID
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!IS_PRIMARY_CORE(MpId)) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
// Configure periodic timer (TIMER0) for 1MHz operation
|
||||
MmioOr32 (SP810_CTRL_BASE + SP810_SYS_CTRL_REG, SP810_SYS_CTRL_TIMER0_TIMCLK);
|
||||
// Configure 1MHz clock
|
||||
|
@ -57,6 +62,8 @@ ArmPlatformSecInitialize (
|
|||
MmioAndThenOr32 (SP810_CTRL_BASE + SP810_SYS_CTRL_REG, ~SP810_SYS_CTRL_TIMER2_EN, SP810_SYS_CTRL_TIMER2_TIMCLK);
|
||||
// Configure SP810 to use 1MHz clock and disable
|
||||
MmioAndThenOr32 (SP810_CTRL_BASE + SP810_SYS_CTRL_REG, ~SP810_SYS_CTRL_TIMER3_EN, SP810_SYS_CTRL_TIMER3_TIMCLK);
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
|
@ -41,21 +41,6 @@ typedef struct {
|
|||
UINT64 NumberOfBytes;
|
||||
} ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR;
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
||||
This memory can contain the initial stacks (Secure and Secure Monitor stacks).
|
||||
In some platform, this region is already initialized and the implementation of this function can
|
||||
do nothing. This memory can also represent the Secure RAM.
|
||||
This function is called before the satck has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformInitializeBootMemory (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Return the current Boot Mode
|
||||
|
||||
|
@ -69,45 +54,6 @@ ArmPlatformGetBootMode (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
||||
This function allows the firmware platform to do extra actions at the early
|
||||
stage of the platform power up.
|
||||
|
||||
Note: This function must be implemented in assembler as there is no stack set up yet
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecBootAction (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize controllers that must setup at the early stage
|
||||
|
||||
Some peripherals must be initialized in Secure World.
|
||||
For example, some L2x0 requires to be initialized in Secure World
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecInitialize (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Call before jumping to Normal World
|
||||
|
||||
This function allows the firmware platform to do extra actions before
|
||||
jumping to the Normal World
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecExtraAction (
|
||||
IN UINTN MpId,
|
||||
OUT UINTN* JumpAddress
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize controllers that must setup in the normal world
|
||||
|
||||
|
@ -131,18 +77,6 @@ ArmPlatformInitializeSystemMemory (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize the Secure peripherals and memory regions
|
||||
|
||||
If Trustzone is supported by your platform then this function makes the required initialization
|
||||
of the secure peripherals and memory regions.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
);
|
||||
|
||||
/**
|
||||
Return the Virtual Memory Map of your platform
|
||||
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/** @file
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _ARMPLATFORMSECLIB_H_
|
||||
#define _ARMPLATFORMSECLIB_H_
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
||||
This memory can contain the initial stacks (Secure and Secure Monitor stacks).
|
||||
In some platform, this region is already initialized and the implementation of this function can
|
||||
do nothing. This memory can also represent the Secure RAM.
|
||||
This function is called before the satck has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecBootMemoryInit (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
||||
This function allows the firmware platform to do extra actions at the early
|
||||
stage of the platform power up.
|
||||
|
||||
Note: This function must be implemented in assembler as there is no stack set up yet
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecBootAction (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize controllers that must setup at the early stage
|
||||
|
||||
Some peripherals must be initialized in Secure World.
|
||||
For example: Some L2 controller, interconnect, clock, DMC, etc
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
IN UINTN MpId
|
||||
);
|
||||
|
||||
/**
|
||||
Call before jumping to Normal World
|
||||
|
||||
This function allows the firmware platform to do extra actions before
|
||||
jumping to the Normal World
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecExtraAction (
|
||||
IN UINTN MpId,
|
||||
OUT UINTN* JumpAddress
|
||||
);
|
||||
|
||||
/**
|
||||
Initialize the Secure peripherals and memory regions
|
||||
|
||||
If Trustzone is supported by your platform then this function makes the required initialization
|
||||
of the secure peripherals and memory regions.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -18,7 +18,7 @@
|
|||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
@ -42,6 +42,6 @@ ASM_PFX(ArmPlatformSecBootAction):
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformInitializeBootMemory):
|
||||
ASM_PFX(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
// 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
|
||||
|
@ -15,10 +15,10 @@
|
|||
#include <AutoGen.h>
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformInitializeBootMemory
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
|
||||
PRESERVE8
|
||||
AREA ArmPlatformLibBoot, CODE, READONLY
|
||||
AREA ArmPlatformSecLibBoot, CODE, READONLY
|
||||
|
||||
/**
|
||||
Call at the beginning of the platform boot up
|
||||
|
@ -42,6 +42,6 @@ ArmPlatformSecBootAction
|
|||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ArmPlatformInitializeBootMemory
|
||||
ArmPlatformSecBootMemoryInit
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
* 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
|
||||
|
@ -24,7 +24,7 @@
|
|||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformTrustzoneInit (
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
|
@ -43,12 +43,18 @@ ArmPlatformTrustzoneInit (
|
|||
For example, some L2x0 requires to be initialized in Secure World
|
||||
|
||||
**/
|
||||
VOID
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
VOID
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!IS_PRIMARY_CORE(MpId)) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
// Do nothing yet
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
|
@ -14,10 +14,10 @@
|
|||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = ArmPlatformLibSecNull
|
||||
FILE_GUID = 83333d9e-b00d-44cb-819c-e154c7efe79a
|
||||
FILE_GUID = a2cf63c6-d44f-4cd0-8af6-722a0138c021
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformLib
|
||||
LIBRARY_CLASS = ArmPlatformSecLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
@ -30,7 +30,6 @@
|
|||
DebugLib
|
||||
|
||||
[Sources.common]
|
||||
ArmPlatformLibNull.c
|
||||
ArmPlatformLibNullSec.c
|
||||
ArmPlatformLibNullBoot.asm | RVCT
|
||||
ArmPlatformLibNullBoot.S | GCC
|
|
@ -19,7 +19,6 @@
|
|||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/SerialPortLib.h>
|
||||
#include <Library/ArmGicLib.h>
|
||||
#include <Library/ArmCpuLib.h>
|
||||
|
||||
#include "SecInternal.h"
|
||||
|
||||
|
@ -50,7 +49,11 @@ CEntryPoint (
|
|||
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 (IS_PRIMARY_CORE(MpId)) {
|
||||
if (ArmIsMpCore()) {
|
||||
|
@ -93,19 +96,6 @@ CEntryPoint (
|
|||
// Enable Full Access to CoProcessors
|
||||
ArmWriteCpacr (CPACR_CP_FULL_ACCESS);
|
||||
|
||||
if (IS_PRIMARY_CORE(MpId)) {
|
||||
// Initialize peripherals that must be done at the early stage
|
||||
// Example: Some L2x0 controllers must be initialized in Secure World
|
||||
ArmPlatformSecInitialize ();
|
||||
|
||||
// If we skip the PEI Core we could want to initialize the DRAM in the SEC phase.
|
||||
// If we are in standalone, we need the initialization to copy the UEFI firmware into DRAM
|
||||
if (FeaturePcdGet (PcdSystemMemoryInitializeInSec)) {
|
||||
// Initialize system memory (DRAM)
|
||||
ArmPlatformInitializeSystemMemory ();
|
||||
}
|
||||
}
|
||||
|
||||
// Test if Trustzone is supported on this platform
|
||||
if (FixedPcdGetBool (PcdTrustzoneSupport)) {
|
||||
if (ArmIsMpCore()) {
|
||||
|
@ -155,7 +145,7 @@ TrustedWorldInitialization (
|
|||
ArmGicSetupNonSecure (MpId, PcdGet32(PcdGicDistributorBase), PcdGet32(PcdGicInterruptInterfaceBase));
|
||||
|
||||
// Initialize platform specific security policy
|
||||
ArmPlatformTrustzoneInit (MpId);
|
||||
ArmPlatformSecTrustzoneInit (MpId);
|
||||
|
||||
// Setup the Trustzone Chipsets
|
||||
if (IS_PRIMARY_CORE(MpId)) {
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
[LibraryClasses]
|
||||
ArmCpuLib
|
||||
ArmLib
|
||||
ArmPlatformLib
|
||||
ArmPlatformSecLib
|
||||
ArmTrustedMonitorLib
|
||||
BaseLib
|
||||
DebugLib
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
GCC_ASM_IMPORT(CEntryPoint)
|
||||
GCC_ASM_IMPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_IMPORT(ArmPlatformInitializeBootMemory)
|
||||
GCC_ASM_IMPORT(ArmPlatformSecBootMemoryInit)
|
||||
GCC_ASM_IMPORT(ArmDisableInterrupts)
|
||||
GCC_ASM_IMPORT(ArmDisableCachesAndMmu)
|
||||
GCC_ASM_IMPORT(ArmWriteVBar)
|
||||
|
@ -66,7 +66,7 @@ _WaitInitMem:
|
|||
|
||||
_InitMem:
|
||||
// Initialize Init Boot Memory
|
||||
bl ASM_PFX(ArmPlatformInitializeBootMemory)
|
||||
bl ASM_PFX(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
// Only Primary CPU could run this line (the secondary cores have jumped from _IdentifyCpu to _SetupStack)
|
||||
LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r5)
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
IMPORT CEntryPoint
|
||||
IMPORT ArmPlatformSecBootAction
|
||||
IMPORT ArmPlatformInitializeBootMemory
|
||||
IMPORT ArmPlatformSecBootMemoryInit
|
||||
IMPORT ArmDisableInterrupts
|
||||
IMPORT ArmDisableCachesAndMmu
|
||||
IMPORT ArmWriteVBar
|
||||
|
@ -68,7 +68,7 @@ _WaitInitMem
|
|||
|
||||
_InitMem
|
||||
// Initialize Init Boot Memory
|
||||
bl ArmPlatformInitializeBootMemory
|
||||
bl ArmPlatformSecBootMemoryInit
|
||||
|
||||
// Only Primary CPU could run this line (the secondary cores have jumped from _IdentifyCpu to _SetupStack)
|
||||
LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r5)
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#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>
|
||||
|
@ -49,11 +49,6 @@ SecVectorTable (
|
|||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
NonSecureWaitForFirmware (
|
||||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
enter_monitor_mode (
|
||||
IN UINTN MonitorEntryPoint,
|
||||
|
|
|
@ -54,41 +54,6 @@ BeagleBoardGetRevision (
|
|||
return (BEAGLEBOARD_REVISION)((Revision >> 11) & 0x7);
|
||||
}
|
||||
|
||||
/**
|
||||
Return if Trustzone is supported by your platform
|
||||
|
||||
A non-zero value must be returned if you want to support a Secure World on your platform.
|
||||
ArmPlatformTrustzoneInit() will later set up the secure regions.
|
||||
This function can return 0 even if Trustzone is supported by your processor. In this case,
|
||||
the platform will continue to run in Secure World.
|
||||
|
||||
@return A non-zero value if Trustzone supported.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
ArmPlatformTrustzoneSupported (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
// The BeagleBoard starts in Normal World (Non Secure World)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Remap the memory at 0x0
|
||||
|
||||
Some platform requires or gives the ability to remap the memory at the address 0x0.
|
||||
This function can do nothing if this feature is not relevant to your platform.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ArmPlatformBootRemapping (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
// Do nothing for the BeagleBoard
|
||||
}
|
||||
|
||||
/**
|
||||
Return the current Boot Mode
|
||||
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2011, 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 <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <BeagleBoard.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformIsBootMemoryInitialized)
|
||||
GCC_ASM_EXPORT(ArmPlatformInitializeBootMemory)
|
||||
|
||||
/**
|
||||
Called at the early stage of the Boot phase to know if the memory has already been initialized
|
||||
|
||||
Running the code from the reset vector does not mean we start from cold boot. In some case, we
|
||||
can go through this code with the memory already initialized.
|
||||
Because this function is called at the early stage, the implementation must not use the stack.
|
||||
Its implementation must probably done in assembly to ensure this requirement.
|
||||
|
||||
@return Return a non zero value if initialized
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformIsBootMemoryInitialized):
|
||||
// The system memory is initialized by the BeagleBoard firmware
|
||||
mov r0, #1
|
||||
bx lr
|
||||
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
||||
This memory can contain the initial stacks (Secure and Secure Monitor stacks).
|
||||
In some platform, this region is already initialized and the implementation of this function can
|
||||
do nothing. This memory can also represent the Secure RAM.
|
||||
This function is called before the satck has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformInitializeBootMemory):
|
||||
// We must need to go into this function
|
||||
bx lr
|
||||
|
||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
@ -1,58 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2011, 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 <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <BeagleBoard.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformIsBootMemoryInitialized
|
||||
EXPORT ArmPlatformInitializeBootMemory
|
||||
|
||||
PRESERVE8
|
||||
AREA BeagleBoardHelper, CODE, READONLY
|
||||
|
||||
/**
|
||||
Called at the early stage of the Boot phase to know if the memory has already been initialized
|
||||
|
||||
Running the code from the reset vector does not mean we start from cold boot. In some case, we
|
||||
can go through this code with the memory already initialized.
|
||||
Because this function is called at the early stage, the implementation must not use the stack.
|
||||
Its implementation must probably done in assembly to ensure this requirement.
|
||||
|
||||
@return Return a non zero value if initialized
|
||||
|
||||
**/
|
||||
ArmPlatformIsBootMemoryInitialized
|
||||
// The system memory is initialized by the BeagleBoard firmware
|
||||
mov r0, #1
|
||||
bx lr
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
||||
This memory can contain the initial stacks (Secure and Secure Monitor stacks).
|
||||
In some platform, this region is already initialized and the implementation of this function can
|
||||
do nothing. This memory can also represent the Secure RAM.
|
||||
This function is called before the satck has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ArmPlatformInitializeBootMemory
|
||||
// We must need to go into this function
|
||||
bx lr
|
||||
|
||||
END
|
|
@ -1,5 +1,5 @@
|
|||
#/* @file
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
# 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
|
||||
|
@ -37,8 +37,6 @@
|
|||
[Sources.common]
|
||||
BeagleBoard.c
|
||||
BeagleBoardMem.c
|
||||
BeagleBoardHelper.asm | RVCT
|
||||
BeagleBoardHelper.S | GCC
|
||||
PadConfiguration.c
|
||||
Clock.c
|
||||
|
||||
|
|
Loading…
Reference in New Issue