ARM: Remove NSACR from the common code

NSACR (Non-Secure Access Control Register) is AArch32 specific.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14522 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Olivier Martin 2013-08-06 10:59:19 +00:00 committed by oliviermartin
parent 3cc033c51f
commit d6dc67ba1b
14 changed files with 118 additions and 62 deletions

View File

@ -128,15 +128,7 @@
# - BIT9 : SIF - Secure Instruction Fetch # - BIT9 : SIF - Secure Instruction Fetch
# 0x31 = NS | EA | FW # 0x31 = NS | EA | FW
gArmTokenSpaceGuid.PcdArmScr|0x31|UINT32|0x00000038 gArmTokenSpaceGuid.PcdArmScr|0x31|UINT32|0x00000038
# Non Secure Access Control Register
# - BIT15 : NSASEDIS - Disable Non-secure Advanced SIMD functionality
# - BIT14 : NSD32DIS - Disable Non-secure use of D16-D31
# - BIT11 : cp11 - Non-secure access to coprocessor 11 enable
# - BIT10 : cp10 - Non-secure access to coprocessor 10 enable
# 0xC00 = cp10 | cp11
gArmTokenSpaceGuid.PcdArmNsacr|0xC00|UINT32|0x00000039
# System Memory (DRAM): These PCDs define the region of in-built system memory # System Memory (DRAM): These PCDs define the region of in-built system memory
# Some platforms can get DRAM extensions, these additional regions will be declared # Some platforms can get DRAM extensions, these additional regions will be declared
# to UEFI by ArmPLatformPlib # to UEFI by ArmPLatformPlib
@ -182,6 +174,14 @@
# The FDT blob must be loaded at a 64bit aligned address. # The FDT blob must be loaded at a 64bit aligned address.
gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment|0x8|UINT32|0x00000026 gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment|0x8|UINT32|0x00000026
# Non Secure Access Control Register
# - BIT15 : NSASEDIS - Disable Non-secure Advanced SIMD functionality
# - BIT14 : NSD32DIS - Disable Non-secure use of D16-D31
# - BIT11 : cp11 - Non-secure access to coprocessor 11 enable
# - BIT10 : cp10 - Non-secure access to coprocessor 10 enable
# 0xC00 = cp10 | cp11
gArmTokenSpaceGuid.PcdArmNsacr|0xC00|UINT32|0x00000039
[PcdsFixedAtBuild.AARCH64] [PcdsFixedAtBuild.AARCH64]
# By default we do transition to EL2 non-secure mode with Stack for EL2. # By default we do transition to EL2 non-secure mode with Stack for EL2.
# Mode Description Bits # Mode Description Bits

View File

@ -34,15 +34,6 @@
// ID_AA64PFR0 - AArch64 Processor Feature Register 0 definitions // ID_AA64PFR0 - AArch64 Processor Feature Register 0 definitions
#define AARCH64_PFR0_FP (0xF << 16) #define AARCH64_PFR0_FP (0xF << 16)
// NSACR - Non-Secure Access Control Register definitions
#define NSACR_CP(cp) ((1 << (cp)) & 0x3FFF)
#define NSACR_NSD32DIS (1 << 14)
#define NSACR_NSASEDIS (1 << 15)
#define NSACR_PLE (1 << 16)
#define NSACR_TL (1 << 17)
#define NSACR_NS_SMP (1 << 18)
#define NSACR_RFR (1 << 19)
// SCR - Secure Configuration Register definitions // SCR - Secure Configuration Register definitions
#define SCR_NS (1 << 0) #define SCR_NS (1 << 0)
#define SCR_IRQ (1 << 1) #define SCR_IRQ (1 << 1)
@ -176,4 +167,9 @@ GcdAttributeToPageAttribute (
IN UINT64 GcdAttributes IN UINT64 GcdAttributes
); );
UINTN
ArmWriteCptr (
IN UINT64 Cptr
);
#endif // __AARCH64_H__ #endif // __AARCH64_H__

View File

@ -112,5 +112,17 @@ EFIAPI
ArmReadIdPfr1 ( ArmReadIdPfr1 (
VOID VOID
); );
UINT32
EFIAPI
ArmReadNsacr (
VOID
);
VOID
EFIAPI
ArmWriteNsacr (
IN UINT32 Nsacr
);
#endif // __ARM_V7_H__ #endif // __ARM_V7_H__

View File

@ -535,18 +535,6 @@ ArmEnableVFP (
VOID VOID
); );
UINT32
EFIAPI
ArmReadNsacr (
VOID
);
VOID
EFIAPI
ArmWriteNsacr (
IN UINT32 SetWayFormat
);
UINT32 UINT32
EFIAPI EFIAPI
ArmReadScr ( ArmReadScr (

View File

@ -1,7 +1,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# #
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2011, ARM Limited. All rights reserved. # Copyright (c) 2011-2013, ARM Limited. All rights reserved.
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -29,6 +29,8 @@ GCC_ASM_EXPORT(ArmEnableInterrupts)
GCC_ASM_EXPORT(ArmDisableInterrupts) GCC_ASM_EXPORT(ArmDisableInterrupts)
GCC_ASM_EXPORT(ReadCCSIDR) GCC_ASM_EXPORT(ReadCCSIDR)
GCC_ASM_EXPORT(ReadCLIDR) GCC_ASM_EXPORT(ReadCLIDR)
GCC_ASM_EXPORT(ArmReadNsacr)
GCC_ASM_EXPORT(ArmWriteNsacr)
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@ -98,4 +100,12 @@ ASM_PFX(ReadCLIDR):
mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register
bx lr bx lr
ASM_PFX(ArmReadNsacr):
mrc p15, 0, r0, c1, c1, 2
bx lr
ASM_PFX(ArmWriteNsacr):
mcr p15, 0, r0, c1, c1, 2
bx lr
ASM_FUNCTION_REMOVE_IF_UNREFERENCED ASM_FUNCTION_REMOVE_IF_UNREFERENCED

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// //
// Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR> // Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
// Copyright (c) 2011, ARM Limited. All rights reserved. // Copyright (c) 2011-2013, ARM Limited. All rights reserved.
// //
// This program and the accompanying materials // This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License // are licensed and made available under the terms and conditions of the BSD License
@ -25,7 +25,9 @@
EXPORT ArmDisableInterrupts EXPORT ArmDisableInterrupts
EXPORT ReadCCSIDR EXPORT ReadCCSIDR
EXPORT ReadCLIDR EXPORT ReadCLIDR
EXPORT ArmReadNsacr
EXPORT ArmWriteNsacr
AREA ArmLibSupportV7, CODE, READONLY AREA ArmLibSupportV7, CODE, READONLY
@ -96,5 +98,13 @@ ReadCCSIDR
ReadCLIDR ReadCLIDR
mrc p15,1,r0,c0,c0,1 ; Read CP15 Cache Level ID Register mrc p15,1,r0,c0,c0,1 ; Read CP15 Cache Level ID Register
bx lr bx lr
ArmReadNsacr
mrc p15, 0, r0, c1, c1, 2
bx lr
ArmWriteNsacr
mcr p15, 0, r0, c1, c1, 2
bx lr
END END

View File

@ -32,7 +32,7 @@ GCC_ASM_EXPORT (ArmWriteAuxCr)
GCC_ASM_EXPORT (ArmReadAuxCr) GCC_ASM_EXPORT (ArmReadAuxCr)
GCC_ASM_EXPORT (ArmInvalidateTlb) GCC_ASM_EXPORT (ArmInvalidateTlb)
GCC_ASM_EXPORT (ArmUpdateTranslationTableEntry) GCC_ASM_EXPORT (ArmUpdateTranslationTableEntry)
GCC_ASM_EXPORT (ArmWriteNsacr) GCC_ASM_EXPORT (ArmWriteCptr)
GCC_ASM_EXPORT (ArmWriteScr) GCC_ASM_EXPORT (ArmWriteScr)
GCC_ASM_EXPORT (ArmWriteMVBar) GCC_ASM_EXPORT (ArmWriteMVBar)
GCC_ASM_EXPORT (ArmCallWFE) GCC_ASM_EXPORT (ArmCallWFE)
@ -176,9 +176,9 @@ ASM_PFX(ArmInvalidateTlb):
isb isb
ret ret
ASM_PFX(ArmWriteNsacr): ASM_PFX(ArmWriteCptr):
msr cptr_el3, x0 // EL3 Coprocessor Trap Reg (CPTR) msr cptr_el3, x0 // EL3 Coprocessor Trap Reg (CPTR)
ret // Non-Secure Access Control Reg (NSACR) in ARMv7 ret
ASM_PFX(ArmWriteScr): ASM_PFX(ArmWriteScr):
msr scr_el3, x0 // Secure configuration register EL3 msr scr_el3, x0 // Secure configuration register EL3

View File

@ -38,8 +38,6 @@ GCC_ASM_EXPORT(ArmWriteAuxCr)
GCC_ASM_EXPORT(ArmReadAuxCr) GCC_ASM_EXPORT(ArmReadAuxCr)
GCC_ASM_EXPORT(ArmInvalidateTlb) GCC_ASM_EXPORT(ArmInvalidateTlb)
GCC_ASM_EXPORT(ArmUpdateTranslationTableEntry) GCC_ASM_EXPORT(ArmUpdateTranslationTableEntry)
GCC_ASM_EXPORT(ArmReadNsacr)
GCC_ASM_EXPORT(ArmWriteNsacr)
GCC_ASM_EXPORT(ArmReadScr) GCC_ASM_EXPORT(ArmReadScr)
GCC_ASM_EXPORT(ArmWriteScr) GCC_ASM_EXPORT(ArmWriteScr)
GCC_ASM_EXPORT(ArmReadMVBar) GCC_ASM_EXPORT(ArmReadMVBar)
@ -147,14 +145,6 @@ ASM_PFX(ArmInvalidateTlb):
isb isb
bx lr bx lr
ASM_PFX(ArmReadNsacr):
mrc p15, 0, r0, c1, c1, 2
bx lr
ASM_PFX(ArmWriteNsacr):
mcr p15, 0, r0, c1, c1, 2
bx lr
ASM_PFX(ArmReadScr): ASM_PFX(ArmReadScr):
mrc p15, 0, r0, c1, c1, 0 mrc p15, 0, r0, c1, c1, 0
bx lr bx lr

View File

@ -38,8 +38,6 @@
EXPORT ArmReadAuxCr EXPORT ArmReadAuxCr
EXPORT ArmInvalidateTlb EXPORT ArmInvalidateTlb
EXPORT ArmUpdateTranslationTableEntry EXPORT ArmUpdateTranslationTableEntry
EXPORT ArmReadNsacr
EXPORT ArmWriteNsacr
EXPORT ArmReadScr EXPORT ArmReadScr
EXPORT ArmWriteScr EXPORT ArmWriteScr
EXPORT ArmReadMVBar EXPORT ArmReadMVBar
@ -147,14 +145,6 @@ ArmInvalidateTlb
isb isb
bx lr bx lr
ArmReadNsacr
mrc p15, 0, r0, c1, c1, 2
bx lr
ArmWriteNsacr
mcr p15, 0, r0, c1, c1, 2
bx lr
ArmReadScr ArmReadScr
mrc p15, 0, r0, c1, c1, 0 mrc p15, 0, r0, c1, c1, 0
bx lr bx lr

View File

@ -0,0 +1,25 @@
/** @file
*
* Copyright (c) 2013, ARM Limited. All rights reserved.
*
* This program and the accompanying materials
* are licensed and made available under the terms and conditions of the BSD License
* which accompanies this distribution. The full text of the license may be found at
* http://opensource.org/licenses/bsd-license.php
*
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
*
**/
#include <Chipset/AArch64.h>
VOID
EFIAPI
ArmSecArchTrustzoneInit (
VOID
)
{
// Do not trap any access to Floating Point and Advanced SIMD in EL3.
ArmWriteCptr (0);
}

View File

@ -0,0 +1,25 @@
/** @file
*
* Copyright (c) 2013, ARM Limited. All rights reserved.
*
* This program and the accompanying materials
* are licensed and made available under the terms and conditions of the BSD License
* which accompanies this distribution. The full text of the license may be found at
* http://opensource.org/licenses/bsd-license.php
*
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
*
**/
#include <Chipset/ArmV7.h>
VOID
EFIAPI
ArmSecArchTrustzoneInit (
VOID
)
{
// Write to CP15 Non-secure Access Control Register
ArmWriteNsacr (PcdGet32 (PcdArmNsacr));
}

View File

@ -165,8 +165,8 @@ TrustedWorldInitialization (
JumpAddress = PcdGet32 (PcdFvBaseAddress); JumpAddress = PcdGet32 (PcdFvBaseAddress);
ArmPlatformSecExtraAction (MpId, &JumpAddress); ArmPlatformSecExtraAction (MpId, &JumpAddress);
// Write to CP15 Non-secure Access Control Register // Initialize architecture specific security policy
ArmWriteNsacr (PcdGet32 (PcdArmNsacr)); ArmSecArchTrustzoneInit ();
// CP15 Secure Configuration Register // CP15 Secure Configuration Register
ArmWriteScr (PcdGet32 (PcdArmScr)); ArmWriteScr (PcdGet32 (PcdArmScr));

View File

@ -24,12 +24,14 @@
Sec.c Sec.c
[Sources.ARM] [Sources.ARM]
Arm/Arch.c
Arm/Helper.asm | RVCT Arm/Helper.asm | RVCT
Arm/Helper.S | GCC Arm/Helper.S | GCC
Arm/SecEntryPoint.S | GCC Arm/SecEntryPoint.S | GCC
Arm/SecEntryPoint.asm | RVCT Arm/SecEntryPoint.asm | RVCT
[Sources.AARCH64] [Sources.AARCH64]
AArch64/Arch.c
AArch64/Helper.S | GCC AArch64/Helper.S | GCC
AArch64/SecEntryPoint.S | GCC AArch64/SecEntryPoint.S | GCC
@ -56,14 +58,13 @@
[FeaturePcd] [FeaturePcd]
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
[FixedPcd] [FixedPcd.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString
gArmTokenSpaceGuid.PcdTrustzoneSupport gArmTokenSpaceGuid.PcdTrustzoneSupport
gArmTokenSpaceGuid.PcdVFPEnabled gArmTokenSpaceGuid.PcdVFPEnabled
gArmTokenSpaceGuid.PcdArmScr gArmTokenSpaceGuid.PcdArmScr
gArmTokenSpaceGuid.PcdArmNsacr
gArmTokenSpaceGuid.PcdArmNonSecModeTransition gArmTokenSpaceGuid.PcdArmNonSecModeTransition
gArmTokenSpaceGuid.PcdSecureFvBaseAddress gArmTokenSpaceGuid.PcdSecureFvBaseAddress
@ -81,3 +82,6 @@
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
gArmPlatformTokenSpaceGuid.PcdSecGlobalVariableSize gArmPlatformTokenSpaceGuid.PcdSecGlobalVariableSize
[FixedPcd.ARM]
gArmTokenSpaceGuid.PcdArmNsacr

View File

@ -74,4 +74,10 @@ SecCommonExceptionEntry (
IN UINTN LR IN UINTN LR
); );
VOID
EFIAPI
ArmSecArchTrustzoneInit (
VOID
);
#endif #endif