xref: /arm-trusted-firmware/include/plat/arm/common/arm_pas_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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