From 65acd8e7b3f2690f3e927e012fbd21f6bcfb17b2 Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Tue, 28 Feb 2012 17:16:58 +0000 Subject: ArmPlatformPkg: Moved 'ArmTrustZoneLib' from ArmPkg/Library to ArmPlatformPkg/Drivers This library is really the driver for the ARM Trustzone controllers (TZPC and TZASC). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13054 6f19259b-4bc3-4df7-8a09-765794883524 --- .../ArmVExpressPkg/ArmVExpress-CTA9x4.dsc | 2 +- .../Library/ArmVExpressLibCTA9x4/CTA9x4Sec.c | 4 +- ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c | 106 +++++++++++++++++++++ .../Drivers/ArmTrustZone/ArmTrustZone.inf | 33 +++++++ ArmPlatformPkg/Include/Drivers/ArmTrustzone.h | 88 +++++++++++++++++ 5 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c create mode 100644 ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf create mode 100644 ArmPlatformPkg/Include/Drivers/ArmTrustzone.h (limited to 'ArmPlatformPkg') diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc index d2c13a9ff7..63d15e84b3 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-CTA9x4.dsc @@ -37,7 +37,7 @@ ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf ArmCpuLib|ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf ArmPlatformLib|ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/ArmVExpressLib.inf - ArmTrustZoneLib|ArmPkg/Library/ArmTrustZoneLib/ArmTrustZoneLib.inf + ArmTrustZoneLib|ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf # ARM PL310 L2 Cache Driver L2X0CacheLib|ArmPlatformPkg/Drivers/PL310L2Cache/PL310L2CacheSec.inf diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Sec.c b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Sec.c index 58a8f7e9da..0cf07a3caf 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Sec.c +++ b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Sec.c @@ -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,12 +13,12 @@ **/ #include -#include #include #include #include #include +#include #include #include diff --git a/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c b/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c new file mode 100644 index 0000000000..26d4004f69 --- /dev/null +++ b/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c @@ -0,0 +1,106 @@ +/** @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. +* +**/ + +#include +#include + +#include + +#define TZPC_DECPROT0_STATUS_REG 0x800 +#define TZPC_DECPROT0_SET_REG 0x804 +#define TZPC_DECPROT0_CLEAR_REG 0x808 + +#define TZASC_CONFIGURATION_REG 0x000 +#define TZASC_REGIONS_REG 0x100 +#define TZASC_REGION0_LOW_ADDRESS_REG 0x100 +#define TZASC_REGION0_HIGH_ADDRESS_REG 0x104 +#define TZASC_REGION0_ATTRIBUTES 0x108 + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZPCSetDecProtBits ( + IN UINTN TzpcBase, + IN UINTN TzpcId, + IN UINTN Bits + ) +{ + if (TzpcId > TZPC_DECPROT_MAX) { + return EFI_INVALID_PARAMETER; + } + + MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_SET_REG + (TzpcId * 0x0C), Bits); + + return EFI_SUCCESS; +} + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZPCClearDecProtBits ( + IN UINTN TzpcBase, + IN UINTN TzpcId, + IN UINTN Bits + ) +{ + if (TzpcId> TZPC_DECPROT_MAX) { + return EFI_INVALID_PARAMETER; + } + + MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_CLEAR_REG + (TzpcId * 0x0C), Bits); + + return EFI_SUCCESS; +} + +/** + FIXME: Need documentation +**/ +UINT32 +TZASCGetNumRegions ( + IN UINTN TzascBase + ) +{ + return (MmioRead32 ((UINTN)TzascBase + TZASC_CONFIGURATION_REG) & 0xF); +} + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZASCSetRegion ( + IN INTN TzascBase, + IN UINTN RegionId, + IN UINTN Enabled, + IN UINTN LowAddress, + IN UINTN HighAddress, + IN UINTN Size, + IN UINTN Security + ) +{ + UINT32* Region; + + if (RegionId > TZASCGetNumRegions(TzascBase)) { + return EFI_INVALID_PARAMETER; + } + + Region = (UINT32*)((UINTN)TzascBase + TZASC_REGIONS_REG + (RegionId * 0x10)); + + MmioWrite32((UINTN)(Region), LowAddress&0xFFFF8000); + MmioWrite32((UINTN)(Region+1), HighAddress); + MmioWrite32((UINTN)(Region+2), ((Security & 0xF) <<28) | ((Size & 0x3F) << 1) | (Enabled & 0x1)); + + return EFI_SUCCESS; +} diff --git a/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf b/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf new file mode 100644 index 0000000000..176224bf46 --- /dev/null +++ b/ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf @@ -0,0 +1,33 @@ +#/* @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 = ArmTrustZoneLib + FILE_GUID = 5962d040-8b8a-11df-9a71-0002a5d5c51b + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = ArmTrustZoneLib + + +[Sources.common] + ArmTrustZone.c + +[Packages] + MdePkg/MdePkg.dec + ArmPkg/ArmPkg.dec + ArmPlatformPkg/ArmPlatformPkg.dec + +[LibraryClasses] + BaseLib + IoLib diff --git a/ArmPlatformPkg/Include/Drivers/ArmTrustzone.h b/ArmPlatformPkg/Include/Drivers/ArmTrustzone.h new file mode 100644 index 0000000000..da920bdfb5 --- /dev/null +++ b/ArmPlatformPkg/Include/Drivers/ArmTrustzone.h @@ -0,0 +1,88 @@ +/** @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 __ARM_TRUSTZONE_H__ +#define __ARM_TRUSTZONE_H__ + +#include + +// Setup TZ Protection Controller +#define TZPC_DECPROT_0 0 +#define TZPC_DECPROT_1 1 +#define TZPC_DECPROT_2 2 +#define TZPC_DECPROT_MAX 2 + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZPCSetDecProtBits ( + IN UINTN TzpcBase, + IN UINTN TzpcId, + IN UINTN Bits + ); + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZPCClearDecProtBits ( + IN UINTN TzpcBase, + IN UINTN TzpcId, + IN UINTN Bits + ); + +// Setup TZ Address Space Controller +#define TZASC_REGION_ENABLED 1 +#define TZASC_REGION_DISABLED 0 +#define TZASC_REGION_SIZE_32KB 0xE +#define TZASC_REGION_SIZE_64KB 0xF +#define TZASC_REGION_SIZE_128KB 0x10 +#define TZASC_REGION_SIZE_256KB 0x11 +#define TZASC_REGION_SIZE_512KB 0x12 +#define TZASC_REGION_SIZE_1MB 0x13 +#define TZASC_REGION_SIZE_2MB 0x14 +#define TZASC_REGION_SIZE_4MB 0x15 +#define TZASC_REGION_SIZE_8MB 0x16 +#define TZASC_REGION_SIZE_16MB 0x17 +#define TZASC_REGION_SIZE_32MB 0x18 +#define TZASC_REGION_SIZE_64MB 0x19 +#define TZASC_REGION_SIZE_128MB 0x1A +#define TZASC_REGION_SIZE_256MB 0x1B +#define TZASC_REGION_SIZE_512MB 0x1C +#define TZASC_REGION_SIZE_1GB 0x1D +#define TZASC_REGION_SIZE_2GB 0x1E +#define TZASC_REGION_SIZE_4GB 0x1F +#define TZASC_REGION_SECURITY_SR (1 << 3) +#define TZASC_REGION_SECURITY_SW (1 << 2) +#define TZASC_REGION_SECURITY_SRW (TZASC_REGION_SECURITY_SR|TZASC_REGION_SECURITY_SW) +#define TZASC_REGION_SECURITY_NSR (1 << 1) +#define TZASC_REGION_SECURITY_NSW 1 +#define TZASC_REGION_SECURITY_NSRW (TZASC_REGION_SECURITY_NSR|TZASC_REGION_SECURITY_NSW) + +/** + FIXME: Need documentation +**/ +EFI_STATUS +TZASCSetRegion ( + IN INTN TzascBase, + IN UINTN RegionId, + IN UINTN Enabled, + IN UINTN LowAddress, + IN UINTN HighAddress, + IN UINTN Size, + IN UINTN Security + ); + +#endif -- cgit v1.2.3