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 --- ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c | 106 +++++++++++++++++++++ .../Drivers/ArmTrustZone/ArmTrustZone.inf | 33 +++++++ 2 files changed, 139 insertions(+) create mode 100644 ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.c create mode 100644 ArmPlatformPkg/Drivers/ArmTrustZone/ArmTrustZone.inf (limited to 'ArmPlatformPkg/Drivers') 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 -- cgit v1.2.3