1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2021-2022, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu #ifndef ARM_PAS_DEF_H 7*91f16700Schasinglulu #define ARM_PAS_DEF_H 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <lib/gpt_rme/gpt_rme.h> 10*91f16700Schasinglulu #include <plat/arm/common/arm_def.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /***************************************************************************** 13*91f16700Schasinglulu * PAS regions used to initialize the Granule Protection Table (GPT) 14*91f16700Schasinglulu ****************************************************************************/ 15*91f16700Schasinglulu 16*91f16700Schasinglulu /* 17*91f16700Schasinglulu * The PA space is initially mapped in the GPT as follows: 18*91f16700Schasinglulu * 19*91f16700Schasinglulu * ============================================================================ 20*91f16700Schasinglulu * Base Addr| Size |L? GPT|PAS |Content |Comment 21*91f16700Schasinglulu * ============================================================================ 22*91f16700Schasinglulu * 0GB | 1GB |L0 GPT|ANY |TBROM (EL3 code) |Fixed mapping 23*91f16700Schasinglulu * | | | |TSRAM (EL3 data) | 24*91f16700Schasinglulu * 00000000 | | | |IO (incl.UARTs & GIC) | 25*91f16700Schasinglulu * ---------------------------------------------------------------------------- 26*91f16700Schasinglulu * 1GB | 1GB |L0 GPT|ANY |IO |Fixed mapping 27*91f16700Schasinglulu * 40000000 | | | | | 28*91f16700Schasinglulu * ---------------------------------------------------------------------------- 29*91f16700Schasinglulu * 2GB |2GB-64MB |L1 GPT|NS |DRAM (NS Kernel) |Use T.Descrip 30*91f16700Schasinglulu * 80000000 | | | | | 31*91f16700Schasinglulu * ---------------------------------------------------------------------------- 32*91f16700Schasinglulu * 4GB-64MB |64MB-32MB-4MB|L1 GPT|SECURE|DRAM TZC |Use T.Descrip 33*91f16700Schasinglulu * FC000000 | | | | | 34*91f16700Schasinglulu * ---------------------------------------------------------------------------- 35*91f16700Schasinglulu * 4GB-32MB | | | | | 36*91f16700Schasinglulu * -3MB-1MB |32MB |L1 GPT|REALM |RMM |Use T.Descrip 37*91f16700Schasinglulu * FDC00000 | | | | | 38*91f16700Schasinglulu * ---------------------------------------------------------------------------- 39*91f16700Schasinglulu * 4GB-3MB | | | | | 40*91f16700Schasinglulu * -1MB |3MB |L1 GPT|ROOT |EL3 DRAM data |Use T.Descrip 41*91f16700Schasinglulu * FFC00000 | | | | | 42*91f16700Schasinglulu * ---------------------------------------------------------------------------- 43*91f16700Schasinglulu * 4GB-1MB |1MB |L1 GPT|ROOT |DRAM (L1 GPTs, SCP TZC) |Fixed mapping 44*91f16700Schasinglulu * FFF00000 | | | | | 45*91f16700Schasinglulu * ---------------------------------------------------------------------------- 46*91f16700Schasinglulu * 34GB |2GB |L1 GPT|NS |DRAM (NS Kernel) |Use T.Descrip 47*91f16700Schasinglulu * 880000000| | | | | 48*91f16700Schasinglulu * ============================================================================ 49*91f16700Schasinglulu * 50*91f16700Schasinglulu * - 4KB of L0 GPT reside in TSRAM, on top of the CONFIG section. 51*91f16700Schasinglulu * - ~1MB of L1 GPTs reside at the top of DRAM1 (TZC area). 52*91f16700Schasinglulu * - The first 1GB region has GPT_GPI_ANY and, therefore, is not protected by 53*91f16700Schasinglulu * the GPT. 54*91f16700Schasinglulu * - The DRAM TZC area is split into three regions: the L1 GPT region and 55*91f16700Schasinglulu * 3MB of region below that are defined as GPT_GPI_ROOT, 32MB Realm region 56*91f16700Schasinglulu * below that is defined as GPT_GPI_REALM and the rest of it is defined as 57*91f16700Schasinglulu * GPT_GPI_SECURE. 58*91f16700Schasinglulu */ 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* TODO: This might not be the best way to map the PAS */ 61*91f16700Schasinglulu 62*91f16700Schasinglulu /* Device memory 0 to 2GB */ 63*91f16700Schasinglulu #define ARM_PAS_1_BASE (U(0)) 64*91f16700Schasinglulu #define ARM_PAS_1_SIZE ((ULL(1) << 31)) /* 2GB */ 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* NS memory 2GB to (end - 64MB) */ 67*91f16700Schasinglulu #define ARM_PAS_2_BASE (ARM_PAS_1_BASE + ARM_PAS_1_SIZE) 68*91f16700Schasinglulu #define ARM_PAS_2_SIZE (ARM_NS_DRAM1_SIZE) 69*91f16700Schasinglulu 70*91f16700Schasinglulu /* Shared area between EL3 and RMM */ 71*91f16700Schasinglulu #define ARM_PAS_SHARED_BASE (ARM_EL3_RMM_SHARED_BASE) 72*91f16700Schasinglulu #define ARM_PAS_SHARED_SIZE (ARM_EL3_RMM_SHARED_SIZE) 73*91f16700Schasinglulu 74*91f16700Schasinglulu /* Secure TZC region */ 75*91f16700Schasinglulu #define ARM_PAS_3_BASE (ARM_AP_TZC_DRAM1_BASE) 76*91f16700Schasinglulu #define ARM_PAS_3_SIZE (ARM_AP_TZC_DRAM1_SIZE) 77*91f16700Schasinglulu 78*91f16700Schasinglulu /* NS memory 2GB */ 79*91f16700Schasinglulu #define ARM_PAS_4_BASE ARM_DRAM2_BASE 80*91f16700Schasinglulu #define ARM_PAS_4_SIZE ((ULL(1) << 31)) /* 2GB */ 81*91f16700Schasinglulu 82*91f16700Schasinglulu #define ARM_PAS_GPI_ANY MAP_GPT_REGION(ARM_PAS_1_BASE, \ 83*91f16700Schasinglulu ARM_PAS_1_SIZE, \ 84*91f16700Schasinglulu GPT_GPI_ANY) 85*91f16700Schasinglulu 86*91f16700Schasinglulu #define ARM_PAS_KERNEL GPT_MAP_REGION_GRANULE(ARM_PAS_2_BASE, \ 87*91f16700Schasinglulu ARM_PAS_2_SIZE, \ 88*91f16700Schasinglulu GPT_GPI_NS) 89*91f16700Schasinglulu 90*91f16700Schasinglulu #define ARM_PAS_SECURE GPT_MAP_REGION_GRANULE(ARM_PAS_3_BASE, \ 91*91f16700Schasinglulu ARM_PAS_3_SIZE, \ 92*91f16700Schasinglulu GPT_GPI_SECURE) 93*91f16700Schasinglulu 94*91f16700Schasinglulu #define ARM_PAS_KERNEL_1 GPT_MAP_REGION_GRANULE(ARM_PAS_4_BASE, \ 95*91f16700Schasinglulu ARM_PAS_4_SIZE, \ 96*91f16700Schasinglulu GPT_GPI_NS) 97*91f16700Schasinglulu /* 98*91f16700Schasinglulu * REALM and Shared area share the same PAS, so consider them a single 99*91f16700Schasinglulu * PAS region to configure in GPT. 100*91f16700Schasinglulu */ 101*91f16700Schasinglulu #define ARM_PAS_REALM GPT_MAP_REGION_GRANULE(ARM_REALM_BASE, \ 102*91f16700Schasinglulu (ARM_PAS_SHARED_SIZE + \ 103*91f16700Schasinglulu ARM_REALM_SIZE), \ 104*91f16700Schasinglulu GPT_GPI_REALM) 105*91f16700Schasinglulu 106*91f16700Schasinglulu #define ARM_PAS_EL3_DRAM GPT_MAP_REGION_GRANULE(ARM_EL3_TZC_DRAM1_BASE, \ 107*91f16700Schasinglulu ARM_EL3_TZC_DRAM1_SIZE, \ 108*91f16700Schasinglulu GPT_GPI_ROOT) 109*91f16700Schasinglulu 110*91f16700Schasinglulu #define ARM_PAS_GPTS GPT_MAP_REGION_GRANULE(ARM_L1_GPT_ADDR_BASE, \ 111*91f16700Schasinglulu ARM_L1_GPT_SIZE, \ 112*91f16700Schasinglulu GPT_GPI_ROOT) 113*91f16700Schasinglulu 114*91f16700Schasinglulu /* GPT Configuration options */ 115*91f16700Schasinglulu #define PLATFORM_L0GPTSZ GPCCR_L0GPTSZ_30BITS 116*91f16700Schasinglulu 117*91f16700Schasinglulu #endif /* ARM_PAS_DEF_H */ 118