mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg: remove ArmPlatformSecLib definition and implementations
This library class is not used by any drivers, so remove it in its entirety. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
142fa386eb
commit
37fcab3e10
|
@ -1,55 +0,0 @@
|
|||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[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]
|
||||
gArmPlatformTokenSpaceGuid.PcdStandalone
|
||||
gArmPlatformTokenSpaceGuid.PcdNorFlashRemapping
|
||||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdTrustzoneSupport
|
||||
|
||||
gArmTokenSpaceGuid.PcdL2x0ControllerBase
|
|
@ -1,114 +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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Drivers/PL35xSmc.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
//
|
||||
// For each Chip Select: ChipSelect / SetCycle / SetOpMode
|
||||
//
|
||||
VersatileExpressSmcConfiguration:
|
||||
// NOR Flash 0
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(0)
|
||||
.word PL350_SMC_SET_CYCLE_NAND_T_RC(0xA) | PL350_SMC_SET_CYCLE_NAND_T_WC(0x3) | PL350_SMC_SET_CYCLE_NAND_T_REA(0x1) | PL350_SMC_SET_CYCLE_NAND_T_WP(0x7) | PL350_SMC_SET_CYCLE_NAND_T_AR(0x1)
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_RD_BURST_LENGTH_CONT | PL350_SMC_SET_OPMODE_SET_WR_BURST_LENGTH_CONT | PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// NOR Flash 1
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(4)
|
||||
.word PL350_SMC_SET_CYCLE_NAND_T_RC(0xA) | PL350_SMC_SET_CYCLE_NAND_T_WC(0x3) | PL350_SMC_SET_CYCLE_NAND_T_REA(0x1) | PL350_SMC_SET_CYCLE_NAND_T_WP(0x7) | PL350_SMC_SET_CYCLE_NAND_T_AR(0x1)
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_RD_BURST_LENGTH_CONT | PL350_SMC_SET_OPMODE_SET_WR_BURST_LENGTH_CONT | PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// SRAM
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(2)
|
||||
.word PL350_SMC_SET_CYCLE_SRAM_T_RC(0x8) | PL350_SMC_SET_CYCLE_SRAM_T_WC(0x5) | PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x1) | PL350_SMC_SET_CYCLE_SRAM_T_WP(0x6) | PL350_SMC_SET_CYCLE_SRAM_T_PC(0x1) | PL350_SMC_SET_CYCLE_SRAM_T_TR(0x1)
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// Usb/Eth/VRAM
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(3)
|
||||
.word PL350_SMC_SET_CYCLE_SRAM_T_RC(0xA) | PL350_SMC_SET_CYCLE_SRAM_T_WC(0xA) | PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x2) | PL350_SMC_SET_CYCLE_SRAM_T_WP(0x2) | PL350_SMC_SET_CYCLE_SRAM_T_PC(0x3) | PL350_SMC_SET_CYCLE_SRAM_T_TR(0x6)
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_RD_SYNC | PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
|
||||
// Memory Mapped Peripherals
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(7)
|
||||
.word PL350_SMC_SET_CYCLE_SRAM_T_RC(0x6) | PL350_SMC_SET_CYCLE_SRAM_T_WC(0x5) | PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x1) | PL350_SMC_SET_CYCLE_SRAM_T_WP(0x2) | PL350_SMC_SET_CYCLE_SRAM_T_PC(0x1) | PL350_SMC_SET_CYCLE_SRAM_T_TR(0x1)
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_RD_SYNC | PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
|
||||
// VRAM
|
||||
.word PL350_SMC_DIRECT_CMD_ADDR_CS(1)
|
||||
.word 0x00049249
|
||||
.word PL350_SMC_SET_OPMODE_MEM_WIDTH_32 | PL350_SMC_SET_OPMODE_SET_RD_SYNC | PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
VersatileExpressSmcConfigurationEnd:
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_FUNC(ArmPlatformSecBootAction)
|
||||
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_FUNC(ArmPlatformSecBootMemoryInit)
|
||||
mov r5, lr
|
||||
|
||||
//
|
||||
// Initialize PL354 SMC
|
||||
//
|
||||
MOV32 (r1, ARM_VE_SMC_CTRL_BASE)
|
||||
MOV32 (r2, VersatileExpressSmcConfiguration)
|
||||
MOV32 (r3, VersatileExpressSmcConfigurationEnd)
|
||||
blx ASM_PFX(PL35xSmcInitialize)
|
||||
|
||||
//
|
||||
// Page mode setup for VRAM
|
||||
//
|
||||
MOV32 (r2, VRAM_MOTHERBOARD_BASE)
|
||||
|
||||
// Read current state
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
|
||||
// Enable page mode
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, = 0x00900090
|
||||
str r0, [r2, #0]
|
||||
|
||||
// Confirm page mode enabled
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
|
||||
bx r5
|
|
@ -1,126 +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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Drivers/PL35xSmc.h>
|
||||
#include <ArmPlatform.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
IMPORT PL35xSmcInitialize
|
||||
|
||||
PRESERVE8
|
||||
AREA CTA9x4BootMode, CODE, READONLY
|
||||
|
||||
//
|
||||
// For each Chip Select: ChipSelect / SetCycle / SetOpMode
|
||||
//
|
||||
VersatileExpressSmcConfiguration
|
||||
// NOR Flash 0
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(0)
|
||||
DCD PL350_SMC_SET_CYCLE_NAND_T_RC(0xA) :OR: PL350_SMC_SET_CYCLE_NAND_T_WC(0x3) :OR: PL350_SMC_SET_CYCLE_NAND_T_REA(0x1) :OR: PL350_SMC_SET_CYCLE_NAND_T_WP(0x7) :OR: PL350_SMC_SET_CYCLE_NAND_T_AR(0x1)
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_RD_BURST_LENGTH_CONT :OR: PL350_SMC_SET_OPMODE_SET_WR_BURST_LENGTH_CONT :OR: PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// NOR Flash 1
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(4)
|
||||
DCD PL350_SMC_SET_CYCLE_NAND_T_RC(0xA) :OR: PL350_SMC_SET_CYCLE_NAND_T_WC(0x3) :OR: PL350_SMC_SET_CYCLE_NAND_T_REA(0x1) :OR: PL350_SMC_SET_CYCLE_NAND_T_WP(0x7) :OR: PL350_SMC_SET_CYCLE_NAND_T_AR(0x1)
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_RD_BURST_LENGTH_CONT :OR: PL350_SMC_SET_OPMODE_SET_WR_BURST_LENGTH_CONT :OR: PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// SRAM
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(2)
|
||||
DCD PL350_SMC_SET_CYCLE_SRAM_T_RC(0x8) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WC(0x5) :OR: PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x1) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WP(0x6) :OR: PL350_SMC_SET_CYCLE_SRAM_T_PC(0x1) :OR: PL350_SMC_SET_CYCLE_SRAM_T_TR(0x1)
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_ADV
|
||||
|
||||
// Usb/Eth/VRAM
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(3)
|
||||
DCD PL350_SMC_SET_CYCLE_SRAM_T_RC(0xA) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WC(0xA) :OR: PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x2) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WP(0x2) :OR: PL350_SMC_SET_CYCLE_SRAM_T_PC(0x3) :OR: PL350_SMC_SET_CYCLE_SRAM_T_TR(0x6)
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_RD_SYNC :OR: PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
|
||||
// Memory Mapped Peripherals
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(7)
|
||||
DCD PL350_SMC_SET_CYCLE_SRAM_T_RC(0x6) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WC(0x5) :OR: PL350_SMC_SET_CYCLE_SRAM_T_CEOE(0x1) :OR: PL350_SMC_SET_CYCLE_SRAM_T_WP(0x2) :OR: PL350_SMC_SET_CYCLE_SRAM_T_PC(0x1) :OR: PL350_SMC_SET_CYCLE_SRAM_T_TR(0x1)
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_RD_SYNC :OR: PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
|
||||
// VRAM
|
||||
DCD PL350_SMC_DIRECT_CMD_ADDR_CS(1)
|
||||
DCD 0x00049249
|
||||
DCD PL350_SMC_SET_OPMODE_MEM_WIDTH_32 :OR: PL350_SMC_SET_OPMODE_SET_RD_SYNC :OR: PL350_SMC_SET_OPMODE_SET_WR_SYNC
|
||||
VersatileExpressSmcConfigurationEnd
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootAction
|
||||
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)
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootMemoryInit
|
||||
mov r5, lr
|
||||
|
||||
//
|
||||
// Initialize PL354 SMC
|
||||
//
|
||||
mov32 r1, ARM_VE_SMC_CTRL_BASE
|
||||
ldr r2, =VersatileExpressSmcConfiguration
|
||||
ldr r3, =VersatileExpressSmcConfigurationEnd
|
||||
blx PL35xSmcInitialize
|
||||
|
||||
//
|
||||
// Page mode setup for VRAM
|
||||
//
|
||||
mov32 r2, VRAM_MOTHERBOARD_BASE
|
||||
|
||||
// Read current state
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
|
||||
// Enable page mode
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, = 0x00900090
|
||||
str r0, [r2, #0]
|
||||
|
||||
// Confirm page mode enabled
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
ldr r0, = 0x00000000
|
||||
str r0, [r2, #0]
|
||||
ldr r0, [r2, #0]
|
||||
|
||||
bx r5
|
||||
|
||||
END
|
|
@ -1,176 +0,0 @@
|
|||
/** @file
|
||||
*
|
||||
* 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 <Library/ArmPlatformLib.h>
|
||||
#include <Library/ArmPlatformSysConfigLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/SerialPortLib.h>
|
||||
|
||||
#include <Drivers/ArmTrustzone.h>
|
||||
#include <Drivers/PL310L2Cache.h>
|
||||
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
#define SerialPrint(txt) SerialPortWrite ((UINT8*)(txt), AsciiStrLen(txt)+1)
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
// Nothing to do
|
||||
if (!ArmPlatformIsPrimaryCore (MpId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Setup TZ Protection Controller
|
||||
//
|
||||
|
||||
if (MmioRead32(ARM_VE_SYS_CFGRW1_REG) & ARM_VE_CFGRW1_TZASC_EN_BIT_MASK) {
|
||||
ASSERT (PcdGetBool (PcdTrustzoneSupport) == TRUE);
|
||||
} else {
|
||||
ASSERT (PcdGetBool (PcdTrustzoneSupport) == FALSE);
|
||||
}
|
||||
|
||||
// Set Non Secure access for all devices
|
||||
TZPCSetDecProtBits(ARM_VE_TZPC_BASE, TZPC_DECPROT_0, 0xFFFFFFFF);
|
||||
TZPCSetDecProtBits(ARM_VE_TZPC_BASE, TZPC_DECPROT_1, 0xFFFFFFFF);
|
||||
TZPCSetDecProtBits(ARM_VE_TZPC_BASE, TZPC_DECPROT_2, 0xFFFFFFFF);
|
||||
|
||||
// Remove Non secure access to secure devices
|
||||
TZPCClearDecProtBits(ARM_VE_TZPC_BASE, TZPC_DECPROT_0,
|
||||
ARM_VE_DECPROT_BIT_TZPC | ARM_VE_DECPROT_BIT_DMC_TZASC | ARM_VE_DECPROT_BIT_NMC_TZASC | ARM_VE_DECPROT_BIT_SMC_TZASC);
|
||||
|
||||
TZPCClearDecProtBits(ARM_VE_TZPC_BASE, TZPC_DECPROT_2,
|
||||
ARM_VE_DECPROT_BIT_EXT_MAST_TZ | ARM_VE_DECPROT_BIT_DMC_TZASC_LOCK | ARM_VE_DECPROT_BIT_NMC_TZASC_LOCK | ARM_VE_DECPROT_BIT_SMC_TZASC_LOCK);
|
||||
|
||||
//
|
||||
// Setup TZ Address Space Controller for the SMC. Create 5 Non Secure regions (NOR0, NOR1, SRAM, SMC Peripheral regions)
|
||||
//
|
||||
|
||||
// NOR Flash 0 non secure (BootMon)
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,1,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_NOR0_BASE,0,
|
||||
TZASC_REGION_SIZE_64MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
|
||||
// NOR Flash 1. The first half of the NOR Flash1 must be secure for the secure firmware (sec_uefi.bin)
|
||||
if (PcdGetBool (PcdTrustzoneSupport) == TRUE) {
|
||||
//Note: Your OS Kernel must be aware of the secure regions before to enable this region
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,2,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_NOR1_BASE + SIZE_32MB,0,
|
||||
TZASC_REGION_SIZE_32MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
} else {
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,2,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_NOR1_BASE,0,
|
||||
TZASC_REGION_SIZE_64MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
}
|
||||
|
||||
// Base of SRAM. Only half of SRAM in Non Secure world
|
||||
// First half non secure (16MB) + Second Half secure (16MB) = 32MB of SRAM
|
||||
if (PcdGetBool (PcdTrustzoneSupport) == TRUE) {
|
||||
//Note: Your OS Kernel must be aware of the secure regions before to enable this region
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,3,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_SRAM_BASE,0,
|
||||
TZASC_REGION_SIZE_16MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
} else {
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,3,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_SRAM_BASE,0,
|
||||
TZASC_REGION_SIZE_32MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
}
|
||||
|
||||
// Memory Mapped Peripherals. All in non secure world
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,4,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_PERIPH_BASE,0,
|
||||
TZASC_REGION_SIZE_64MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
|
||||
// MotherBoard Peripherals and On-chip peripherals.
|
||||
TZASCSetRegion(ARM_VE_TZASC_BASE,5,TZASC_REGION_ENABLED,
|
||||
ARM_VE_SMB_MB_ON_CHIP_PERIPH_BASE,0,
|
||||
TZASC_REGION_SIZE_256MB, TZASC_REGION_SECURITY_NSRW, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
UINT32 Value;
|
||||
|
||||
// If the DRAM is remapped at 0x0 then we need to wake up the secondary cores from wfe
|
||||
// (waiting for the memory to be initialized) as the instruction is still in the remapped
|
||||
// flash region at 0x0 to jump in the C-code which lives in the NOR1 at 0x44000000 before
|
||||
// the region 0x0 is remapped as DRAM.
|
||||
if (!FeaturePcdGet (PcdNorFlashRemapping)) {
|
||||
if (!ArmPlatformIsPrimaryCore (MpId)) {
|
||||
// Replaced ArmCallWFE () in ArmPlatformPkg/Sec/SecEntryPoint.(S|asm)
|
||||
ArmCallWFE ();
|
||||
} else {
|
||||
// Wake up the secondary core from ArmCallWFE () in ArmPlatformPkg/Sec/SecEntryPoint.(S|asm)
|
||||
ArmCallSEV ();
|
||||
}
|
||||
}
|
||||
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!ArmPlatformIsPrimaryCore (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),
|
||||
PL310_DATA_LATENCIES(L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES),
|
||||
0,~0, // Use default setting for the Auxiliary Control Register
|
||||
FALSE);
|
||||
|
||||
// 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 ();
|
||||
}
|
||||
|
||||
// Memory Map remapping
|
||||
if (FeaturePcdGet (PcdNorFlashRemapping)) {
|
||||
SerialPrint ("Secure ROM at 0x0\n\r");
|
||||
} else {
|
||||
Value = MmioRead32 (ARM_VE_SYS_CFGRW1_REG); //Scc - CFGRW1
|
||||
// Remap the DRAM to 0x0
|
||||
MmioWrite32 (ARM_VE_SYS_CFGRW1_REG, (Value & 0x0FFFFFFF) | ARM_VE_CFGRW1_REMAP_DRAM);
|
||||
}
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2013-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>
|
||||
|
||||
#ifndef __clang__
|
||||
// Register definitions used by GCC for GICv3 access.
|
||||
// These are defined by ARMCC, so keep them in the GCC specific code for now.
|
||||
#define ICC_SRE_EL2 S3_4_C12_C9_5
|
||||
#define ICC_SRE_EL3 S3_6_C12_C12_5
|
||||
#define ICC_CTLR_EL1 S3_0_C12_C12_4
|
||||
#define ICC_CTLR_EL3 S3_6_C12_C12_4
|
||||
#define ICC_PMR_EL1 S3_0_C4_C6_0
|
||||
#endif
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(InitializeGicV3)
|
||||
|
||||
/* Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet */
|
||||
ASM_PFX(InitializeGicV3):
|
||||
// We have a GICv3. UEFI still uses the GICv2 mode. We must do enough setup
|
||||
// to allow Linux to use GICv3 if it chooses.
|
||||
|
||||
// In order to setup NS side we need to enable it first.
|
||||
mrs x0, scr_el3
|
||||
orr x0, x0, #1
|
||||
msr scr_el3, x0
|
||||
|
||||
// Enable SRE at EL3 and ICC_SRE_EL2 access
|
||||
mov x0, #((1 << 3) | (1 << 0)) // Enable | SRE
|
||||
mrs x1, ICC_SRE_EL3
|
||||
orr x1, x1, x0
|
||||
msr ICC_SRE_EL3, x1
|
||||
isb
|
||||
|
||||
// Enable SRE at EL2 and ICC_SRE_EL1 access..
|
||||
mrs x1, ICC_SRE_EL2
|
||||
orr x1, x1, x0
|
||||
msr ICC_SRE_EL2, x1
|
||||
isb
|
||||
|
||||
// Configure CPU interface
|
||||
msr ICC_CTLR_EL3, xzr
|
||||
isb
|
||||
msr ICC_CTLR_EL1, xzr
|
||||
isb
|
||||
|
||||
// The MemoryMap view and Register view may not be consistent, So Set PMR again.
|
||||
mov w1, #1 << 7 // allow NS access to GICC_PMR
|
||||
msr ICC_PMR_EL1, x1
|
||||
isb
|
||||
|
||||
// Remove the SCR.NS bit
|
||||
mrs x0, scr_el3
|
||||
and x0, x0, #~SCR_NS
|
||||
msr scr_el3, x0
|
||||
ret
|
|
@ -1,64 +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 <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <AutoGen.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesWrite)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesRead)
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
ret
|
||||
|
||||
/**
|
||||
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(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
ret
|
||||
|
||||
/* Write the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesWrite):
|
||||
// Write to the CPU Mailbox
|
||||
ret
|
||||
|
||||
/* Read the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesRead):
|
||||
// Return the value from the CPU Mailbox
|
||||
mov x0, #0
|
||||
ret
|
||||
|
|
@ -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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <AsmMacroIoLibV8.h>
|
||||
#include <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <AutoGen.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesWrite)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesRead)
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
ret
|
||||
|
||||
/**
|
||||
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 stack has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
ret
|
||||
|
||||
|
||||
// NOTE:
|
||||
// The foundation model does not have the VE_SYS_REGS like all the other VE
|
||||
// platforms. We pick a spot in RAM that *should* be safe in the simple case
|
||||
// of no UEFI apps interfering (Only the Linux loader getting used). By the
|
||||
// time we come to load Linux we should have all the cores in a safe place.
|
||||
// The image expects to be loaded at 0xa0000000. We also place the mailboxes
|
||||
// here as it does not matter if we corrupt the image at this time.
|
||||
// NOTE also see: "ArmVExpressLibRTSM/RTSMFoundation.c"
|
||||
|
||||
/* Write the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesWrite):
|
||||
ldr x1, =0xa0000000
|
||||
str w0, [x1]
|
||||
ret
|
||||
|
||||
|
||||
/* Read the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesRead):
|
||||
ldr x1, =0xa0000000
|
||||
ldr w0, [x1]
|
||||
ret
|
|
@ -1,24 +0,0 @@
|
|||
//
|
||||
// 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 <AsmMacroIoLib.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(InitializeGicV3)
|
||||
|
||||
/* Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet */
|
||||
ASM_PFX(InitializeGicV3):
|
||||
// GICv3 Initialization not Supported yet
|
||||
bx lr
|
|
@ -1,27 +0,0 @@
|
|||
//
|
||||
// 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 AsmMacroIoLib.inc
|
||||
|
||||
EXPORT InitializeGicV3
|
||||
|
||||
PRESERVE8
|
||||
AREA GicV3, CODE, READONLY
|
||||
|
||||
/* Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet */
|
||||
InitializeGicV3 FUNCTION
|
||||
// GICv3 Initialization not Supported yet
|
||||
bx lr
|
||||
ENDFUNC
|
||||
|
||||
END
|
|
@ -1,50 +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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <AsmMacroIoLib.h>
|
||||
#include <Base.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <AutoGen.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
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(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,54 +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/ArmPlatformLib.h>
|
||||
#include <AutoGen.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
INCLUDE AsmMacroIoLib.inc
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
|
||||
PRESERVE8
|
||||
AREA RTSMVExpressBootMode, CODE, READONLY
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootAction
|
||||
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)
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootMemoryInit
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
||||
|
||||
END
|
|
@ -1,49 +0,0 @@
|
|||
#/* @file
|
||||
# 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 = RTSMArmVExpressSecLib
|
||||
FILE_GUID = 1fdaabb0-ab7d-480c-91ff-428dc1546f3a
|
||||
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]
|
||||
IoLib
|
||||
ArmLib
|
||||
SerialPortLib
|
||||
|
||||
[Sources.common]
|
||||
RTSMSec.c
|
||||
|
||||
[Sources.ARM]
|
||||
Arm/RTSMBoot.asm | RVCT
|
||||
Arm/RTSMBoot.S | GCC
|
||||
Arm/GicV3.asm | RVCT
|
||||
Arm/GicV3.S | GCC
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/RTSMBoot.S
|
||||
AArch64/GicV3.S
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
|
|
@ -1,100 +0,0 @@
|
|||
/** @file
|
||||
*
|
||||
* 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/IoLib.h>
|
||||
#include <Library/ArmGicLib.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <Drivers/PL310L2Cache.h>
|
||||
#include <Drivers/SP804Timer.h>
|
||||
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
// Initialize GICv3 to expose it as a GICv2 as UEFI does not support GICv3 yet
|
||||
VOID
|
||||
InitializeGicV3 (
|
||||
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
|
||||
ArmPlatformSecTrustzoneInit (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// No TZPC or TZASC on RTSM to initialize
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
UINT32 Identification;
|
||||
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!ArmPlatformIsPrimaryCore (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
|
||||
MmioOr32 (SP810_CTRL_BASE + SP810_SYS_CTRL_REG, SP810_SYS_CTRL_TIMER1_TIMCLK);
|
||||
// Configure SP810 to use 1MHz clock and disable
|
||||
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);
|
||||
|
||||
// Read the GIC Identification Register
|
||||
Identification = ArmGicGetInterfaceIdentification (PcdGet64 (PcdGicInterruptInterfaceBase));
|
||||
|
||||
// Check if we are GICv3
|
||||
if (ARM_GIC_ICCIIDR_GET_ARCH_VERSION(Identification) >= 0x3) {
|
||||
InitializeGicV3 ();
|
||||
}
|
||||
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
*JumpAddress = PcdGet64 (PcdFvBaseAddress);
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
/** @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_
|
||||
|
||||
#define ARM_SEC_BOOT_MASK ~0
|
||||
#define ARM_SEC_COLD_BOOT (1 << 0)
|
||||
#define ARM_SEC_SECONDARY_COLD_BOOT (1 << 1)
|
||||
|
||||
/**
|
||||
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,61 +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 <Base.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesWrite)
|
||||
GCC_ASM_EXPORT(ArmSecMpCoreSecondariesRead)
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
ret
|
||||
|
||||
/**
|
||||
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(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
ret
|
||||
|
||||
/* Write the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesWrite):
|
||||
// Write to the CPU Mailbox
|
||||
ret
|
||||
|
||||
|
||||
/* Read the flag register used to start Secondary cores */
|
||||
ASM_PFX(ArmSecMpCoreSecondariesRead):
|
||||
// Return the value from the CPU Mailbox
|
||||
mov x0, #0
|
||||
ret
|
|
@ -1,47 +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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <Base.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
.text
|
||||
.align 3
|
||||
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootAction)
|
||||
GCC_ASM_EXPORT(ArmPlatformSecBootMemoryInit)
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ASM_PFX(ArmPlatformSecBootAction):
|
||||
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(ArmPlatformSecBootMemoryInit):
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
|
@ -1,49 +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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <Base.h>
|
||||
#include <AutoGen.h>
|
||||
|
||||
EXPORT ArmPlatformSecBootAction
|
||||
EXPORT ArmPlatformSecBootMemoryInit
|
||||
|
||||
PRESERVE8
|
||||
AREA ArmPlatformSecLibBoot, CODE, READONLY
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootAction
|
||||
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)
|
||||
|
||||
**/
|
||||
ArmPlatformSecBootMemoryInit
|
||||
// The SMC does not need to be initialized for RTSM
|
||||
bx lr
|
||||
|
||||
END
|
|
@ -1,74 +0,0 @@
|
|||
/** @file
|
||||
*
|
||||
* 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/ArmPlatformLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
// Secondary cores might have to set the Secure SGIs into the GICD_IGROUPR0
|
||||
if (!ArmPlatformIsPrimaryCore (MpId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ASSERT(FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
ArmPlatformSecInitialize (
|
||||
IN UINTN MpId
|
||||
)
|
||||
{
|
||||
// If it is not the primary core then there is nothing to do
|
||||
if (!ArmPlatformIsPrimaryCore (MpId)) {
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
// Do nothing yet
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
*JumpAddress = PcdGet64 (PcdFvBaseAddress);
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
#/* @file
|
||||
# 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.
|
||||
#
|
||||
#*/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = ArmPlatformLibSecNull
|
||||
FILE_GUID = a2cf63c6-d44f-4cd0-8af6-722a0138c021
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ArmPlatformSecLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmPlatformPkg/ArmPlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
ArmLib
|
||||
DebugLib
|
||||
|
||||
[Sources.common]
|
||||
ArmPlatformLibNullSec.c
|
||||
|
||||
[Sources.ARM]
|
||||
Arm/ArmPlatformLibNullBoot.asm | RVCT
|
||||
Arm/ArmPlatformLibNullBoot.S | GCC
|
||||
|
||||
[Sources.AARCH64]
|
||||
AArch64/ArmPlatformLibNullBoot.S
|
||||
|
||||
|
||||
[FixedPcd]
|
||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
Loading…
Reference in New Issue