diff options
author | Mark Rutland <mark.rutland@arm.com> | 2014-11-24 07:03:32 -0500 |
---|---|---|
committer | Mark Rutland <mark.rutland@arm.com> | 2015-01-15 07:24:07 -0500 |
commit | cf99a48dce66b126391bb33c7709892d3d8002d7 (patch) | |
tree | e192eeadee744d0575856d7691d0bf51bacae800 | |
parent | b1940cd21c0f4abdce101253e860feff547291b0 (diff) |
arm64: introduce common ESR_ELx_* definitions
Currently we have separate ESR_EL{1,2}_* macros, despite the fact that
the encodings are common. While encodings are architected to refer to
the current EL or a lower EL, the macros refer to particular ELs (e.g.
ESR_ELx_EC_DABT_EL0). Having these duplicate definitions is redundant,
and their naming is misleading.
This patch introduces common ESR_ELx_* macros that can be used in all
cases, in preparation for later patches which will migrate existing
users over. Some additional cleanups are made in the process:
* Suffixes for particular exception levelts (e.g. _EL0, _EL1) are
replaced with more general _LOW and _CUR suffixes, matching the
architectural intent.
* ESR_ELx_EC_WFx, rather than ESR_ELx_EC_WFI is introduced, as this
EC encoding covers traps from both WFE and WFI. Similarly,
ESR_ELx_WFx_ISS_WFE rather than ESR_ELx_EC_WFI_ISS_WFE is introduced.
* Multi-bit fields are given consistently named _SHIFT and _MASK macros.
* UL() is used for compatiblity with assembly files.
* Comments are added for currently unallocated ESR_ELx.EC encodings.
For fields other than ESR_ELx.EC, macros are only implemented for fields
for which there is already an ESR_EL{1,2}_* macro.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Will Deacon <will.deacon@arm.com>
-rw-r--r-- | arch/arm64/include/asm/esr.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 72674f4c3871..0fd1b0e15ea8 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h | |||
@@ -54,4 +54,83 @@ | |||
54 | #define ESR_EL1_EC_BKPT32 (0x38) | 54 | #define ESR_EL1_EC_BKPT32 (0x38) |
55 | #define ESR_EL1_EC_BRK64 (0x3C) | 55 | #define ESR_EL1_EC_BRK64 (0x3C) |
56 | 56 | ||
57 | #define ESR_ELx_EC_UNKNOWN (0x00) | ||
58 | #define ESR_ELx_EC_WFx (0x01) | ||
59 | /* Unallocated EC: 0x02 */ | ||
60 | #define ESR_ELx_EC_CP15_32 (0x03) | ||
61 | #define ESR_ELx_EC_CP15_64 (0x04) | ||
62 | #define ESR_ELx_EC_CP14_MR (0x05) | ||
63 | #define ESR_ELx_EC_CP14_LS (0x06) | ||
64 | #define ESR_ELx_EC_FP_ASIMD (0x07) | ||
65 | #define ESR_ELx_EC_CP10_ID (0x08) | ||
66 | /* Unallocated EC: 0x09 - 0x0B */ | ||
67 | #define ESR_ELx_EC_CP14_64 (0x0C) | ||
68 | /* Unallocated EC: 0x0d */ | ||
69 | #define ESR_ELx_EC_ILL (0x0E) | ||
70 | /* Unallocated EC: 0x0F - 0x10 */ | ||
71 | #define ESR_ELx_EC_SVC32 (0x11) | ||
72 | #define ESR_ELx_EC_HVC32 (0x12) | ||
73 | #define ESR_ELx_EC_SMC32 (0x13) | ||
74 | /* Unallocated EC: 0x14 */ | ||
75 | #define ESR_ELx_EC_SVC64 (0x15) | ||
76 | #define ESR_ELx_EC_HVC64 (0x16) | ||
77 | #define ESR_ELx_EC_SMC64 (0x17) | ||
78 | #define ESR_ELx_EC_SYS64 (0x18) | ||
79 | /* Unallocated EC: 0x19 - 0x1E */ | ||
80 | #define ESR_ELx_EC_IMP_DEF (0x1f) | ||
81 | #define ESR_ELx_EC_IABT_LOW (0x20) | ||
82 | #define ESR_ELx_EC_IABT_CUR (0x21) | ||
83 | #define ESR_ELx_EC_PC_ALIGN (0x22) | ||
84 | /* Unallocated EC: 0x23 */ | ||
85 | #define ESR_ELx_EC_DABT_LOW (0x24) | ||
86 | #define ESR_ELx_EC_DABT_CUR (0x25) | ||
87 | #define ESR_ELx_EC_SP_ALIGN (0x26) | ||
88 | /* Unallocated EC: 0x27 */ | ||
89 | #define ESR_ELx_EC_FP_EXC32 (0x28) | ||
90 | /* Unallocated EC: 0x29 - 0x2B */ | ||
91 | #define ESR_ELx_EC_FP_EXC64 (0x2C) | ||
92 | /* Unallocated EC: 0x2D - 0x2E */ | ||
93 | #define ESR_ELx_EC_SERROR (0x2F) | ||
94 | #define ESR_ELx_EC_BREAKPT_LOW (0x30) | ||
95 | #define ESR_ELx_EC_BREAKPT_CUR (0x31) | ||
96 | #define ESR_ELx_EC_SOFTSTP_LOW (0x32) | ||
97 | #define ESR_ELx_EC_SOFTSTP_CUR (0x33) | ||
98 | #define ESR_ELx_EC_WATCHPT_LOW (0x34) | ||
99 | #define ESR_ELx_EC_WATCHPT_CUR (0x35) | ||
100 | /* Unallocated EC: 0x36 - 0x37 */ | ||
101 | #define ESR_ELx_EC_BKPT32 (0x38) | ||
102 | /* Unallocated EC: 0x39 */ | ||
103 | #define ESR_ELx_EC_VECTOR32 (0x3A) | ||
104 | /* Unallocted EC: 0x3B */ | ||
105 | #define ESR_ELx_EC_BRK64 (0x3C) | ||
106 | /* Unallocated EC: 0x3D - 0x3F */ | ||
107 | #define ESR_ELx_EC_MAX (0x3F) | ||
108 | |||
109 | #define ESR_ELx_EC_SHIFT (26) | ||
110 | #define ESR_ELx_EC_MASK (UL(0x3F) << ESR_ELx_EC_SHIFT) | ||
111 | |||
112 | #define ESR_ELx_IL (UL(1) << 25) | ||
113 | #define ESR_ELx_ISS_MASK (ESR_ELx_IL - 1) | ||
114 | #define ESR_ELx_ISV (UL(1) << 24) | ||
115 | #define ESR_ELx_SAS_SHIFT (22) | ||
116 | #define ESR_ELx_SAS (UL(3) << ESR_ELx_SAS_SHIFT) | ||
117 | #define ESR_ELx_SSE (UL(1) << 21) | ||
118 | #define ESR_ELx_SRT_SHIFT (16) | ||
119 | #define ESR_ELx_SRT_MASK (UL(0x1F) << ESR_ELx_SRT_SHIFT) | ||
120 | #define ESR_ELx_SF (UL(1) << 15) | ||
121 | #define ESR_ELx_AR (UL(1) << 14) | ||
122 | #define ESR_ELx_EA (UL(1) << 9) | ||
123 | #define ESR_ELx_CM (UL(1) << 8) | ||
124 | #define ESR_ELx_S1PTW (UL(1) << 7) | ||
125 | #define ESR_ELx_WNR (UL(1) << 6) | ||
126 | #define ESR_ELx_FSC (0x3F) | ||
127 | #define ESR_ELx_FSC_TYPE (0x3C) | ||
128 | #define ESR_ELx_FSC_EXTABT (0x10) | ||
129 | #define ESR_ELx_FSC_FAULT (0x04) | ||
130 | #define ESR_ELx_FSC_PERM (0x0C) | ||
131 | #define ESR_ELx_CV (UL(1) << 24) | ||
132 | #define ESR_ELx_COND_SHIFT (20) | ||
133 | #define ESR_ELx_COND_MASK (UL(0xF) << ESR_ELx_COND_SHIFT) | ||
134 | #define ESR_ELx_WFx_ISS_WFE (UL(1) << 0) | ||
135 | |||
57 | #endif /* __ASM_ESR_H */ | 136 | #endif /* __ASM_ESR_H */ |