|
12 | 12 | #include <asm/sysreg.h>
|
13 | 13 | #include <asm/types.h>
|
14 | 14 |
|
15 |
| -/* Hyp Configuration Register (HCR) bits */ |
16 |
| - |
17 |
| -#define HCR_TID5 (UL(1) << 58) |
18 |
| -#define HCR_DCT (UL(1) << 57) |
19 |
| -#define HCR_ATA_SHIFT 56 |
20 |
| -#define HCR_ATA (UL(1) << HCR_ATA_SHIFT) |
21 |
| -#define HCR_TTLBOS (UL(1) << 55) |
22 |
| -#define HCR_TTLBIS (UL(1) << 54) |
23 |
| -#define HCR_ENSCXT (UL(1) << 53) |
24 |
| -#define HCR_TOCU (UL(1) << 52) |
25 |
| -#define HCR_AMVOFFEN (UL(1) << 51) |
26 |
| -#define HCR_TICAB (UL(1) << 50) |
27 |
| -#define HCR_TID4 (UL(1) << 49) |
28 |
| -#define HCR_FIEN (UL(1) << 47) |
29 |
| -#define HCR_FWB (UL(1) << 46) |
30 |
| -#define HCR_NV2 (UL(1) << 45) |
31 |
| -#define HCR_AT (UL(1) << 44) |
32 |
| -#define HCR_NV1 (UL(1) << 43) |
33 |
| -#define HCR_NV (UL(1) << 42) |
34 |
| -#define HCR_API (UL(1) << 41) |
35 |
| -#define HCR_APK (UL(1) << 40) |
36 |
| -#define HCR_TEA (UL(1) << 37) |
37 |
| -#define HCR_TERR (UL(1) << 36) |
38 |
| -#define HCR_TLOR (UL(1) << 35) |
39 |
| -#define HCR_E2H (UL(1) << 34) |
40 |
| -#define HCR_ID (UL(1) << 33) |
41 |
| -#define HCR_CD (UL(1) << 32) |
42 |
| -#define HCR_RW_SHIFT 31 |
43 |
| -#define HCR_RW (UL(1) << HCR_RW_SHIFT) |
44 |
| -#define HCR_TRVM (UL(1) << 30) |
45 |
| -#define HCR_HCD (UL(1) << 29) |
46 |
| -#define HCR_TDZ (UL(1) << 28) |
47 |
| -#define HCR_TGE (UL(1) << 27) |
48 |
| -#define HCR_TVM (UL(1) << 26) |
49 |
| -#define HCR_TTLB (UL(1) << 25) |
50 |
| -#define HCR_TPU (UL(1) << 24) |
51 |
| -#define HCR_TPC (UL(1) << 23) /* HCR_TPCP if FEAT_DPB */ |
52 |
| -#define HCR_TSW (UL(1) << 22) |
53 |
| -#define HCR_TACR (UL(1) << 21) |
54 |
| -#define HCR_TIDCP (UL(1) << 20) |
55 |
| -#define HCR_TSC (UL(1) << 19) |
56 |
| -#define HCR_TID3 (UL(1) << 18) |
57 |
| -#define HCR_TID2 (UL(1) << 17) |
58 |
| -#define HCR_TID1 (UL(1) << 16) |
59 |
| -#define HCR_TID0 (UL(1) << 15) |
60 |
| -#define HCR_TWE (UL(1) << 14) |
61 |
| -#define HCR_TWI (UL(1) << 13) |
62 |
| -#define HCR_DC (UL(1) << 12) |
63 |
| -#define HCR_BSU (3 << 10) |
64 |
| -#define HCR_BSU_IS (UL(1) << 10) |
65 |
| -#define HCR_FB (UL(1) << 9) |
66 |
| -#define HCR_VSE (UL(1) << 8) |
67 |
| -#define HCR_VI (UL(1) << 7) |
68 |
| -#define HCR_VF (UL(1) << 6) |
69 |
| -#define HCR_AMO (UL(1) << 5) |
70 |
| -#define HCR_IMO (UL(1) << 4) |
71 |
| -#define HCR_FMO (UL(1) << 3) |
72 |
| -#define HCR_PTW (UL(1) << 2) |
73 |
| -#define HCR_SWIO (UL(1) << 1) |
74 |
| -#define HCR_VM (UL(1) << 0) |
75 |
| -#define HCR_RES0 ((UL(1) << 48) | (UL(1) << 39)) |
| 15 | +/* |
| 16 | + * Because I'm terribly lazy and that repainting the whole of the KVM |
| 17 | + * code with the proper names is a pain, use a helper to map the names |
| 18 | + * inherited from AArch32 with the new fancy nomenclature. One day... |
| 19 | + */ |
| 20 | +#define __HCR(x) HCR_EL2_##x |
| 21 | + |
| 22 | +#define HCR_TID5 __HCR(TID5) |
| 23 | +#define HCR_DCT __HCR(DCT) |
| 24 | +#define HCR_ATA_SHIFT __HCR(ATA_SHIFT) |
| 25 | +#define HCR_ATA __HCR(ATA) |
| 26 | +#define HCR_TTLBOS __HCR(TTLBOS) |
| 27 | +#define HCR_TTLBIS __HCR(TTLBIS) |
| 28 | +#define HCR_ENSCXT __HCR(EnSCXT) |
| 29 | +#define HCR_TOCU __HCR(TOCU) |
| 30 | +#define HCR_AMVOFFEN __HCR(AMVOFFEN) |
| 31 | +#define HCR_TICAB __HCR(TICAB) |
| 32 | +#define HCR_TID4 __HCR(TID4) |
| 33 | +#define HCR_FIEN __HCR(FIEN) |
| 34 | +#define HCR_FWB __HCR(FWB) |
| 35 | +#define HCR_NV2 __HCR(NV2) |
| 36 | +#define HCR_AT __HCR(AT) |
| 37 | +#define HCR_NV1 __HCR(NV1) |
| 38 | +#define HCR_NV __HCR(NV) |
| 39 | +#define HCR_API __HCR(API) |
| 40 | +#define HCR_APK __HCR(APK) |
| 41 | +#define HCR_TEA __HCR(TEA) |
| 42 | +#define HCR_TERR __HCR(TERR) |
| 43 | +#define HCR_TLOR __HCR(TLOR) |
| 44 | +#define HCR_E2H __HCR(E2H) |
| 45 | +#define HCR_ID __HCR(ID) |
| 46 | +#define HCR_CD __HCR(CD) |
| 47 | +#define HCR_RW __HCR(RW) |
| 48 | +#define HCR_TRVM __HCR(TRVM) |
| 49 | +#define HCR_HCD __HCR(HCD) |
| 50 | +#define HCR_TDZ __HCR(TDZ) |
| 51 | +#define HCR_TGE __HCR(TGE) |
| 52 | +#define HCR_TVM __HCR(TVM) |
| 53 | +#define HCR_TTLB __HCR(TTLB) |
| 54 | +#define HCR_TPU __HCR(TPU) |
| 55 | +#define HCR_TPC __HCR(TPCP) |
| 56 | +#define HCR_TSW __HCR(TSW) |
| 57 | +#define HCR_TACR __HCR(TACR) |
| 58 | +#define HCR_TIDCP __HCR(TIDCP) |
| 59 | +#define HCR_TSC __HCR(TSC) |
| 60 | +#define HCR_TID3 __HCR(TID3) |
| 61 | +#define HCR_TID2 __HCR(TID2) |
| 62 | +#define HCR_TID1 __HCR(TID1) |
| 63 | +#define HCR_TID0 __HCR(TID0) |
| 64 | +#define HCR_TWE __HCR(TWE) |
| 65 | +#define HCR_TWI __HCR(TWI) |
| 66 | +#define HCR_DC __HCR(DC) |
| 67 | +#define HCR_BSU __HCR(BSU) |
| 68 | +#define HCR_BSU_IS __HCR(BSU_IS) |
| 69 | +#define HCR_FB __HCR(FB) |
| 70 | +#define HCR_VSE __HCR(VSE) |
| 71 | +#define HCR_VI __HCR(VI) |
| 72 | +#define HCR_VF __HCR(VF) |
| 73 | +#define HCR_AMO __HCR(AMO) |
| 74 | +#define HCR_IMO __HCR(IMO) |
| 75 | +#define HCR_FMO __HCR(FMO) |
| 76 | +#define HCR_PTW __HCR(PTW) |
| 77 | +#define HCR_SWIO __HCR(SWIO) |
| 78 | +#define HCR_VM __HCR(VM) |
76 | 79 |
|
77 | 80 | /*
|
78 | 81 | * The bits we set in HCR:
|
|
313 | 316 | GENMASK(15, 0))
|
314 | 317 |
|
315 | 318 | /*
|
316 |
| - * FGT register definitions |
317 |
| - * |
318 |
| - * RES0 and polarity masks as of DDI0487J.a, to be updated as needed. |
319 |
| - * We're not using the generated masks as they are usually ahead of |
320 |
| - * the published ARM ARM, which we use as a reference. |
321 |
| - * |
322 |
| - * Once we get to a point where the two describe the same thing, we'll |
323 |
| - * merge the definitions. One day. |
324 |
| - */ |
325 |
| -#define __HFGRTR_EL2_RES0 HFGxTR_EL2_RES0 |
326 |
| -#define __HFGRTR_EL2_MASK GENMASK(49, 0) |
327 |
| -#define __HFGRTR_EL2_nMASK ~(__HFGRTR_EL2_RES0 | __HFGRTR_EL2_MASK) |
328 |
| - |
329 |
| -/* |
330 |
| - * The HFGWTR bits are a subset of HFGRTR bits. To ensure we don't miss any |
331 |
| - * future additions, define __HFGWTR* macros relative to __HFGRTR* ones. |
| 319 | + * Polarity masks for HCRX_EL2, limited to the bits that we know about |
| 320 | + * at this point in time. It doesn't mean that we actually *handle* |
| 321 | + * them, but that at least those that are not advertised to a guest |
| 322 | + * will be RES0 for that guest. |
332 | 323 | */
|
333 |
| -#define __HFGRTR_ONLY_MASK (BIT(46) | BIT(42) | BIT(40) | BIT(28) | \ |
334 |
| - GENMASK(26, 25) | BIT(21) | BIT(18) | \ |
335 |
| - GENMASK(15, 14) | GENMASK(10, 9) | BIT(2)) |
336 |
| -#define __HFGWTR_EL2_RES0 (__HFGRTR_EL2_RES0 | __HFGRTR_ONLY_MASK) |
337 |
| -#define __HFGWTR_EL2_MASK (__HFGRTR_EL2_MASK & ~__HFGRTR_ONLY_MASK) |
338 |
| -#define __HFGWTR_EL2_nMASK ~(__HFGWTR_EL2_RES0 | __HFGWTR_EL2_MASK) |
339 |
| - |
340 |
| -#define __HFGITR_EL2_RES0 HFGITR_EL2_RES0 |
341 |
| -#define __HFGITR_EL2_MASK (BIT(62) | BIT(60) | GENMASK(54, 0)) |
342 |
| -#define __HFGITR_EL2_nMASK ~(__HFGITR_EL2_RES0 | __HFGITR_EL2_MASK) |
343 |
| - |
344 |
| -#define __HDFGRTR_EL2_RES0 HDFGRTR_EL2_RES0 |
345 |
| -#define __HDFGRTR_EL2_MASK (BIT(63) | GENMASK(58, 50) | GENMASK(48, 43) | \ |
346 |
| - GENMASK(41, 40) | GENMASK(37, 22) | \ |
347 |
| - GENMASK(19, 9) | GENMASK(7, 0)) |
348 |
| -#define __HDFGRTR_EL2_nMASK ~(__HDFGRTR_EL2_RES0 | __HDFGRTR_EL2_MASK) |
349 |
| - |
350 |
| -#define __HDFGWTR_EL2_RES0 HDFGWTR_EL2_RES0 |
351 |
| -#define __HDFGWTR_EL2_MASK (GENMASK(57, 52) | GENMASK(50, 48) | \ |
352 |
| - GENMASK(46, 44) | GENMASK(42, 41) | \ |
353 |
| - GENMASK(37, 35) | GENMASK(33, 31) | \ |
354 |
| - GENMASK(29, 23) | GENMASK(21, 10) | \ |
355 |
| - GENMASK(8, 7) | GENMASK(5, 0)) |
356 |
| -#define __HDFGWTR_EL2_nMASK ~(__HDFGWTR_EL2_RES0 | __HDFGWTR_EL2_MASK) |
357 |
| - |
358 |
| -#define __HAFGRTR_EL2_RES0 HAFGRTR_EL2_RES0 |
359 |
| -#define __HAFGRTR_EL2_MASK (GENMASK(49, 17) | GENMASK(4, 0)) |
360 |
| -#define __HAFGRTR_EL2_nMASK ~(__HAFGRTR_EL2_RES0 | __HAFGRTR_EL2_MASK) |
361 |
| - |
362 |
| -/* Similar definitions for HCRX_EL2 */ |
363 |
| -#define __HCRX_EL2_RES0 HCRX_EL2_RES0 |
364 |
| -#define __HCRX_EL2_MASK (BIT(6)) |
365 |
| -#define __HCRX_EL2_nMASK ~(__HCRX_EL2_RES0 | __HCRX_EL2_MASK) |
| 324 | +#define __HCRX_EL2_MASK (BIT_ULL(6)) |
| 325 | +#define __HCRX_EL2_nMASK (GENMASK_ULL(24, 14) | \ |
| 326 | + GENMASK_ULL(11, 7) | \ |
| 327 | + GENMASK_ULL(5, 0)) |
| 328 | +#define __HCRX_EL2_RES0 ~(__HCRX_EL2_nMASK | __HCRX_EL2_MASK) |
| 329 | +#define __HCRX_EL2_RES1 ~(__HCRX_EL2_nMASK | \ |
| 330 | + __HCRX_EL2_MASK | \ |
| 331 | + __HCRX_EL2_RES0) |
366 | 332 |
|
367 | 333 | /* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */
|
368 | 334 | #define HPFAR_MASK (~UL(0xf))
|
|
0 commit comments