.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2012 ARM Ltd. |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License version 2 as |
---|
6 | | - * published by the Free Software Foundation. |
---|
7 | | - * |
---|
8 | | - * This program is distributed in the hope that it will be useful, |
---|
9 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
10 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
11 | | - * GNU General Public License for more details. |
---|
12 | | - * |
---|
13 | | - * You should have received a copy of the GNU General Public License |
---|
14 | | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
15 | 4 | */ |
---|
16 | 5 | #ifndef __ASM_PGTABLE_HWDEF_H |
---|
17 | 6 | #define __ASM_PGTABLE_HWDEF_H |
---|
.. | .. |
---|
40 | 29 | * Size mapped by an entry at level n ( 0 <= n <= 3) |
---|
41 | 30 | * We map (PAGE_SHIFT - 3) at all translation levels and PAGE_SHIFT bits |
---|
42 | 31 | * in the final page. The maximum number of translation levels supported by |
---|
43 | | - * the architecture is 4. Hence, starting at at level n, we have further |
---|
| 32 | + * the architecture is 4. Hence, starting at level n, we have further |
---|
44 | 33 | * ((4 - n) - 1) levels of translation excluding the offset within the page. |
---|
45 | 34 | * So, the total number of bits mapped by an entry at level n is : |
---|
46 | 35 | * |
---|
.. | .. |
---|
92 | 81 | /* |
---|
93 | 82 | * Contiguous page definitions. |
---|
94 | 83 | */ |
---|
95 | | -#ifdef CONFIG_ARM64_64K_PAGES |
---|
96 | | -#define CONT_PTE_SHIFT 5 |
---|
97 | | -#define CONT_PMD_SHIFT 5 |
---|
98 | | -#elif defined(CONFIG_ARM64_16K_PAGES) |
---|
99 | | -#define CONT_PTE_SHIFT 7 |
---|
100 | | -#define CONT_PMD_SHIFT 5 |
---|
101 | | -#else |
---|
102 | | -#define CONT_PTE_SHIFT 4 |
---|
103 | | -#define CONT_PMD_SHIFT 4 |
---|
104 | | -#endif |
---|
105 | | - |
---|
106 | | -#define CONT_PTES (1 << CONT_PTE_SHIFT) |
---|
| 84 | +#define CONT_PTE_SHIFT (CONFIG_ARM64_CONT_PTE_SHIFT + PAGE_SHIFT) |
---|
| 85 | +#define CONT_PTES (1 << (CONT_PTE_SHIFT - PAGE_SHIFT)) |
---|
107 | 86 | #define CONT_PTE_SIZE (CONT_PTES * PAGE_SIZE) |
---|
108 | 87 | #define CONT_PTE_MASK (~(CONT_PTE_SIZE - 1)) |
---|
109 | | -#define CONT_PMDS (1 << CONT_PMD_SHIFT) |
---|
| 88 | + |
---|
| 89 | +#define CONT_PMD_SHIFT (CONFIG_ARM64_CONT_PMD_SHIFT + PMD_SHIFT) |
---|
| 90 | +#define CONT_PMDS (1 << (CONT_PMD_SHIFT - PMD_SHIFT)) |
---|
110 | 91 | #define CONT_PMD_SIZE (CONT_PMDS * PMD_SIZE) |
---|
111 | 92 | #define CONT_PMD_MASK (~(CONT_PMD_SIZE - 1)) |
---|
112 | | -/* the the numerical offset of the PTE within a range of CONT_PTES */ |
---|
113 | | -#define CONT_RANGE_OFFSET(addr) (((addr)>>PAGE_SHIFT)&(CONT_PTES-1)) |
---|
114 | 93 | |
---|
115 | 94 | /* |
---|
116 | 95 | * Hardware page table definitions. |
---|
.. | .. |
---|
121 | 100 | #define PUD_TABLE_BIT (_AT(pudval_t, 1) << 1) |
---|
122 | 101 | #define PUD_TYPE_MASK (_AT(pudval_t, 3) << 0) |
---|
123 | 102 | #define PUD_TYPE_SECT (_AT(pudval_t, 1) << 0) |
---|
| 103 | +#define PUD_SECT_RDONLY (_AT(pudval_t, 1) << 7) /* AP[2] */ |
---|
124 | 104 | |
---|
125 | 105 | /* |
---|
126 | 106 | * Level 2 descriptor (PMD). |
---|
127 | 107 | */ |
---|
128 | 108 | #define PMD_TYPE_MASK (_AT(pmdval_t, 3) << 0) |
---|
129 | | -#define PMD_TYPE_FAULT (_AT(pmdval_t, 0) << 0) |
---|
130 | 109 | #define PMD_TYPE_TABLE (_AT(pmdval_t, 3) << 0) |
---|
131 | 110 | #define PMD_TYPE_SECT (_AT(pmdval_t, 1) << 0) |
---|
132 | 111 | #define PMD_TABLE_BIT (_AT(pmdval_t, 1) << 1) |
---|
.. | .. |
---|
153 | 132 | /* |
---|
154 | 133 | * Level 3 descriptor (PTE). |
---|
155 | 134 | */ |
---|
| 135 | +#define PTE_VALID (_AT(pteval_t, 1) << 0) |
---|
156 | 136 | #define PTE_TYPE_MASK (_AT(pteval_t, 3) << 0) |
---|
157 | | -#define PTE_TYPE_FAULT (_AT(pteval_t, 0) << 0) |
---|
158 | 137 | #define PTE_TYPE_PAGE (_AT(pteval_t, 3) << 0) |
---|
159 | 138 | #define PTE_TABLE_BIT (_AT(pteval_t, 1) << 1) |
---|
160 | 139 | #define PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */ |
---|
.. | .. |
---|
162 | 141 | #define PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */ |
---|
163 | 142 | #define PTE_AF (_AT(pteval_t, 1) << 10) /* Access Flag */ |
---|
164 | 143 | #define PTE_NG (_AT(pteval_t, 1) << 11) /* nG */ |
---|
| 144 | +#define PTE_GP (_AT(pteval_t, 1) << 50) /* BTI guarded */ |
---|
165 | 145 | #define PTE_DBM (_AT(pteval_t, 1) << 51) /* Dirty Bit Management */ |
---|
166 | 146 | #define PTE_CONT (_AT(pteval_t, 1) << 52) /* Contiguous range */ |
---|
167 | 147 | #define PTE_PXN (_AT(pteval_t, 1) << 53) /* Privileged XN */ |
---|
168 | 148 | #define PTE_UXN (_AT(pteval_t, 1) << 54) /* User XN */ |
---|
169 | | -#define PTE_HYP_XN (_AT(pteval_t, 1) << 54) /* HYP XN */ |
---|
170 | 149 | |
---|
171 | 150 | #define PTE_ADDR_LOW (((_AT(pteval_t, 1) << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT) |
---|
172 | 151 | #ifdef CONFIG_ARM64_PA_BITS_52 |
---|
.. | .. |
---|
183 | 162 | #define PTE_ATTRINDX_MASK (_AT(pteval_t, 7) << 2) |
---|
184 | 163 | |
---|
185 | 164 | /* |
---|
186 | | - * 2nd stage PTE definitions |
---|
187 | | - */ |
---|
188 | | -#define PTE_S2_RDONLY (_AT(pteval_t, 1) << 6) /* HAP[2:1] */ |
---|
189 | | -#define PTE_S2_RDWR (_AT(pteval_t, 3) << 6) /* HAP[2:1] */ |
---|
190 | | -#define PTE_S2_XN (_AT(pteval_t, 2) << 53) /* XN[1:0] */ |
---|
191 | | - |
---|
192 | | -#define PMD_S2_RDONLY (_AT(pmdval_t, 1) << 6) /* HAP[2:1] */ |
---|
193 | | -#define PMD_S2_RDWR (_AT(pmdval_t, 3) << 6) /* HAP[2:1] */ |
---|
194 | | -#define PMD_S2_XN (_AT(pmdval_t, 2) << 53) /* XN[1:0] */ |
---|
195 | | - |
---|
196 | | -/* |
---|
197 | 165 | * Memory Attribute override for Stage-2 (MemAttr[3:0]) |
---|
198 | 166 | */ |
---|
199 | 167 | #define PTE_S2_MEMATTR(t) (_AT(pteval_t, (t)) << 2) |
---|
200 | | -#define PTE_S2_MEMATTR_MASK (_AT(pteval_t, 0xf) << 2) |
---|
201 | | - |
---|
202 | | -/* |
---|
203 | | - * EL2/HYP PTE/PMD definitions |
---|
204 | | - */ |
---|
205 | | -#define PMD_HYP PMD_SECT_USER |
---|
206 | | -#define PTE_HYP PTE_USER |
---|
207 | 168 | |
---|
208 | 169 | /* |
---|
209 | 170 | * Highest possible physical address supported. |
---|
210 | 171 | */ |
---|
211 | 172 | #define PHYS_MASK_SHIFT (CONFIG_ARM64_PA_BITS) |
---|
212 | 173 | #define PHYS_MASK ((UL(1) << PHYS_MASK_SHIFT) - 1) |
---|
| 174 | + |
---|
| 175 | +#define TTBR_CNP_BIT (UL(1) << 0) |
---|
213 | 176 | |
---|
214 | 177 | /* |
---|
215 | 178 | * TCR flags. |
---|
.. | .. |
---|
221 | 184 | #define TCR_TxSZ(x) (TCR_T0SZ(x) | TCR_T1SZ(x)) |
---|
222 | 185 | #define TCR_TxSZ_WIDTH 6 |
---|
223 | 186 | #define TCR_T0SZ_MASK (((UL(1) << TCR_TxSZ_WIDTH) - 1) << TCR_T0SZ_OFFSET) |
---|
| 187 | +#define TCR_T1SZ_MASK (((UL(1) << TCR_TxSZ_WIDTH) - 1) << TCR_T1SZ_OFFSET) |
---|
224 | 188 | |
---|
| 189 | +#define TCR_EPD0_SHIFT 7 |
---|
| 190 | +#define TCR_EPD0_MASK (UL(1) << TCR_EPD0_SHIFT) |
---|
225 | 191 | #define TCR_IRGN0_SHIFT 8 |
---|
226 | 192 | #define TCR_IRGN0_MASK (UL(3) << TCR_IRGN0_SHIFT) |
---|
227 | 193 | #define TCR_IRGN0_NC (UL(0) << TCR_IRGN0_SHIFT) |
---|
.. | .. |
---|
229 | 195 | #define TCR_IRGN0_WT (UL(2) << TCR_IRGN0_SHIFT) |
---|
230 | 196 | #define TCR_IRGN0_WBnWA (UL(3) << TCR_IRGN0_SHIFT) |
---|
231 | 197 | |
---|
| 198 | +#define TCR_EPD1_SHIFT 23 |
---|
| 199 | +#define TCR_EPD1_MASK (UL(1) << TCR_EPD1_SHIFT) |
---|
232 | 200 | #define TCR_IRGN1_SHIFT 24 |
---|
233 | 201 | #define TCR_IRGN1_MASK (UL(3) << TCR_IRGN1_SHIFT) |
---|
234 | 202 | #define TCR_IRGN1_NC (UL(0) << TCR_IRGN1_SHIFT) |
---|
.. | .. |
---|
292 | 260 | #define TCR_TBI1 (UL(1) << 38) |
---|
293 | 261 | #define TCR_HA (UL(1) << 39) |
---|
294 | 262 | #define TCR_HD (UL(1) << 40) |
---|
| 263 | +#define TCR_TBID1 (UL(1) << 52) |
---|
| 264 | +#define TCR_NFD0 (UL(1) << 53) |
---|
295 | 265 | #define TCR_NFD1 (UL(1) << 54) |
---|
| 266 | +#define TCR_E0PD0 (UL(1) << 55) |
---|
| 267 | +#define TCR_E0PD1 (UL(1) << 56) |
---|
296 | 268 | |
---|
297 | 269 | /* |
---|
298 | 270 | * TTBR. |
---|
.. | .. |
---|
305 | 277 | #define TTBR_BADDR_MASK_52 (((UL(1) << 46) - 1) << 2) |
---|
306 | 278 | #endif |
---|
307 | 279 | |
---|
| 280 | +#ifdef CONFIG_ARM64_VA_BITS_52 |
---|
| 281 | +/* Must be at least 64-byte aligned to prevent corruption of the TTBR */ |
---|
| 282 | +#define TTBR1_BADDR_4852_OFFSET (((UL(1) << (52 - PGDIR_SHIFT)) - \ |
---|
| 283 | + (UL(1) << (48 - PGDIR_SHIFT))) * 8) |
---|
| 284 | +#endif |
---|
| 285 | + |
---|
308 | 286 | #endif |
---|