|
101 | 101 | HCR_BSU_IS | HCR_FB | HCR_TACR | \ |
102 | 102 | HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \ |
103 | 103 | HCR_FMO | HCR_IMO | HCR_PTW | HCR_TID3 | HCR_TID1) |
104 | | -#define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK | HCR_ATA) |
| 104 | +#define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK) |
105 | 105 | #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC) |
106 | 106 | #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H | HCR_AMO | HCR_IMO | HCR_FMO) |
107 | 107 |
|
|
124 | 124 | #define TCR_EL2_MASK (TCR_EL2_TG0_MASK | TCR_EL2_SH0_MASK | \ |
125 | 125 | TCR_EL2_ORGN0_MASK | TCR_EL2_IRGN0_MASK) |
126 | 126 |
|
127 | | -/* VTCR_EL2 Registers bits */ |
128 | | -#define VTCR_EL2_DS TCR_EL2_DS |
129 | | -#define VTCR_EL2_RES1 (1U << 31) |
130 | | -#define VTCR_EL2_HD (1 << 22) |
131 | | -#define VTCR_EL2_HA (1 << 21) |
132 | | -#define VTCR_EL2_PS_SHIFT TCR_EL2_PS_SHIFT |
133 | | -#define VTCR_EL2_PS_MASK TCR_EL2_PS_MASK |
134 | | -#define VTCR_EL2_TG0_MASK TCR_TG0_MASK |
135 | | -#define VTCR_EL2_TG0_4K TCR_TG0_4K |
136 | | -#define VTCR_EL2_TG0_16K TCR_TG0_16K |
137 | | -#define VTCR_EL2_TG0_64K TCR_TG0_64K |
138 | | -#define VTCR_EL2_SH0_MASK TCR_SH0_MASK |
139 | | -#define VTCR_EL2_SH0_INNER TCR_SH0_INNER |
140 | | -#define VTCR_EL2_ORGN0_MASK TCR_ORGN0_MASK |
141 | | -#define VTCR_EL2_ORGN0_WBWA TCR_ORGN0_WBWA |
142 | | -#define VTCR_EL2_IRGN0_MASK TCR_IRGN0_MASK |
143 | | -#define VTCR_EL2_IRGN0_WBWA TCR_IRGN0_WBWA |
144 | | -#define VTCR_EL2_SL0_SHIFT 6 |
145 | | -#define VTCR_EL2_SL0_MASK (3 << VTCR_EL2_SL0_SHIFT) |
146 | | -#define VTCR_EL2_T0SZ_MASK 0x3f |
147 | | -#define VTCR_EL2_VS_SHIFT 19 |
148 | | -#define VTCR_EL2_VS_8BIT (0 << VTCR_EL2_VS_SHIFT) |
149 | | -#define VTCR_EL2_VS_16BIT (1 << VTCR_EL2_VS_SHIFT) |
150 | | - |
151 | | -#define VTCR_EL2_T0SZ(x) TCR_T0SZ(x) |
152 | | - |
153 | 127 | /* |
154 | | - * We configure the Stage-2 page tables to always restrict the IPA space to be |
155 | | - * 40 bits wide (T0SZ = 24). Systems with a PARange smaller than 40 bits are |
156 | | - * not known to exist and will break with this configuration. |
157 | | - * |
158 | 128 | * The VTCR_EL2 is configured per VM and is initialised in kvm_init_stage2_mmu. |
159 | 129 | * |
160 | 130 | * Note that when using 4K pages, we concatenate two first level page tables |
161 | 131 | * together. With 16K pages, we concatenate 16 first level page tables. |
162 | 132 | * |
163 | 133 | */ |
164 | 134 |
|
165 | | -#define VTCR_EL2_COMMON_BITS (VTCR_EL2_SH0_INNER | VTCR_EL2_ORGN0_WBWA | \ |
166 | | - VTCR_EL2_IRGN0_WBWA | VTCR_EL2_RES1) |
167 | | - |
168 | 135 | /* |
169 | 136 | * VTCR_EL2:SL0 indicates the entry level for Stage2 translation. |
170 | 137 | * Interestingly, it depends on the page size. |
|
196 | 163 | */ |
197 | 164 | #ifdef CONFIG_ARM64_64K_PAGES |
198 | 165 |
|
199 | | -#define VTCR_EL2_TGRAN VTCR_EL2_TG0_64K |
| 166 | +#define VTCR_EL2_TGRAN 64K |
200 | 167 | #define VTCR_EL2_TGRAN_SL0_BASE 3UL |
201 | 168 |
|
202 | 169 | #elif defined(CONFIG_ARM64_16K_PAGES) |
203 | 170 |
|
204 | | -#define VTCR_EL2_TGRAN VTCR_EL2_TG0_16K |
| 171 | +#define VTCR_EL2_TGRAN 16K |
205 | 172 | #define VTCR_EL2_TGRAN_SL0_BASE 3UL |
206 | 173 |
|
207 | 174 | #else /* 4K */ |
208 | 175 |
|
209 | | -#define VTCR_EL2_TGRAN VTCR_EL2_TG0_4K |
| 176 | +#define VTCR_EL2_TGRAN 4K |
210 | 177 | #define VTCR_EL2_TGRAN_SL0_BASE 2UL |
211 | 178 |
|
212 | 179 | #endif |
213 | 180 |
|
214 | 181 | #define VTCR_EL2_LVLS_TO_SL0(levels) \ |
215 | | - ((VTCR_EL2_TGRAN_SL0_BASE - (4 - (levels))) << VTCR_EL2_SL0_SHIFT) |
| 182 | + FIELD_PREP(VTCR_EL2_SL0, (VTCR_EL2_TGRAN_SL0_BASE - (4 - (levels)))) |
216 | 183 | #define VTCR_EL2_SL0_TO_LVLS(sl0) \ |
217 | 184 | ((sl0) + 4 - VTCR_EL2_TGRAN_SL0_BASE) |
218 | 185 | #define VTCR_EL2_LVLS(vtcr) \ |
219 | | - VTCR_EL2_SL0_TO_LVLS(((vtcr) & VTCR_EL2_SL0_MASK) >> VTCR_EL2_SL0_SHIFT) |
| 186 | + VTCR_EL2_SL0_TO_LVLS(FIELD_GET(VTCR_EL2_SL0, (vtcr))) |
| 187 | + |
| 188 | +#define VTCR_EL2_FLAGS (SYS_FIELD_PREP_ENUM(VTCR_EL2, SH0, INNER) | \ |
| 189 | + SYS_FIELD_PREP_ENUM(VTCR_EL2, ORGN0, WBWA) | \ |
| 190 | + SYS_FIELD_PREP_ENUM(VTCR_EL2, IRGN0, WBWA) | \ |
| 191 | + SYS_FIELD_PREP_ENUM(VTCR_EL2, TG0, VTCR_EL2_TGRAN) | \ |
| 192 | + VTCR_EL2_RES1) |
220 | 193 |
|
221 | | -#define VTCR_EL2_FLAGS (VTCR_EL2_COMMON_BITS | VTCR_EL2_TGRAN) |
222 | | -#define VTCR_EL2_IPA(vtcr) (64 - ((vtcr) & VTCR_EL2_T0SZ_MASK)) |
| 194 | +#define VTCR_EL2_IPA(vtcr) (64 - FIELD_GET(VTCR_EL2_T0SZ, (vtcr))) |
223 | 195 |
|
224 | 196 | /* |
225 | 197 | * ARM VMSAv8-64 defines an algorithm for finding the translation table |
|
344 | 316 | #define PAR_TO_HPFAR(par) \ |
345 | 317 | (((par) & GENMASK_ULL(52 - 1, 12)) >> 8) |
346 | 318 |
|
| 319 | +#define FAR_TO_FIPA_OFFSET(far) ((far) & GENMASK_ULL(11, 0)) |
| 320 | + |
347 | 321 | #define ECN(x) { ESR_ELx_EC_##x, #x } |
348 | 322 |
|
349 | 323 | #define kvm_arm_exception_class \ |
|
0 commit comments