@samitouri / QOSamiQemu / commits / 958d84e437

hw/intc/arm_gicv5: Define macros for config frame registers

Define constants for the various registers in the IRS config frame using the REG and FIELD macros. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Message-id: 20260327111700.795099-10-peter.maydell@linaro.org

Peter Maydell committed Mar 27, 2026 at 11:16 UTC 958d84e437f99e581903f83596a6387af88af0df
1 file changed +243
hw/intc/arm_gicv5.c
+243
@@ -7,6 +7,7 @@
7 */
8
9 #include "qemu/osdep.h"
10 +#include "hw/core/registerfields.h"
11 #include "hw/intc/arm_gicv5.h"
12 #include "qapi/error.h"
13 #include "qemu/log.h"
@@ -22,6 +23,248 @@ static const char *domain_name[] = {
23 [GICV5_ID_REALM] = "Realm",
24 };
25
26 +REG32(IRS_IDR0, 0x0)
27 + FIELD(IRS_IDR0, INT_DOM, 0, 2)
28 + FIELD(IRS_IDR0, PA_RANGE, 2, 4)
29 + FIELD(IRS_IDR0, VIRT, 6, 1)
30 + FIELD(IRS_IDR0, ONE_N, 7, 1)
31 + FIELD(IRS_IDR0, VIRT_ONE_N, 8, 1)
32 + FIELD(IRS_IDR0, SETLPI, 9, 1)
33 + FIELD(IRS_IDR0, MEC, 10, 1)
34 + FIELD(IRS_IDR0, MPAM, 11, 1)
35 + FIELD(IRS_IDR0, SWE, 12, 1)
36 + FIELD(IRS_IDR0, IRSID, 16, 16)
37 +
38 +REG32(IRS_IDR1, 0x4)
39 + FIELD(IRS_IDR1, PE_CNT, 0, 16)
40 + FIELD(IRS_IDR1, IAFFID_BITS, 16, 4)
41 + FIELD(IRS_IDR1, PRI_BITS, 20, 3)
42 +
43 +REG32(IRS_IDR2, 0x8)
44 + FIELD(IRS_IDR2, ID_BITS, 0, 5)
45 + FIELD(IRS_IDR2, LPI, 5, 1)
46 + FIELD(IRS_IDR2, MIN_LPI_ID_BITS, 6, 4)
47 + FIELD(IRS_IDR2, IST_LEVELS, 10, 1)
48 + FIELD(IRS_IDR2, IST_L2SZ, 11, 3)
49 + FIELD(IRS_IDR2, IST_MD, 14, 1)
50 + FIELD(IRS_IDR2, ISTMD_SZ, 15, 5)
51 +
52 +REG32(IRS_IDR3, 0xc)
53 + FIELD(IRS_IDR3, VMD, 0, 1)
54 + FIELD(IRS_IDR3, VMD_SZ, 1, 4)
55 + FIELD(IRS_IDR3, VM_ID_BITS, 5, 5)
56 + FIELD(IRS_IDR3, VMT_LEVELS, 10, 1)
57 +
58 +REG32(IRS_IDR4, 0x10)
59 + FIELD(IRS_IDR4, VPED_SZ, 0, 6)
60 + FIELD(IRS_IDR4, VPE_ID_BITS, 6, 4)
61 +
62 +REG32(IRS_IDR5, 0x14)
63 + FIELD(IRS_IDR5, SPI_RANGE, 0, 25)
64 +
65 +REG32(IRS_IDR6, 0x18)
66 + FIELD(IRS_IDR6, SPI_IRS_RANGE, 0, 25)
67 +
68 +REG32(IRS_IDR7, 0x1c)
69 + FIELD(IRS_IDR7, SPI_BASE, 0, 24)
70 +
71 +REG32(IRS_IIDR, 0x40)
72 + FIELD(IRS_IIDR, IMPLEMENTER, 0, 12)
73 + FIELD(IRS_IIDR, REVISION, 12, 4)
74 + FIELD(IRS_IIDR, VARIANT, 16, 4)
75 + FIELD(IRS_IIDR, PRODUCTID, 20, 12)
76 +
77 +REG32(IRS_AIDR, 0x44)
78 + FIELD(IRS_AIDR, ARCHMINORREV, 0, 4)
79 + FIELD(IRS_AIDR, ARCHMAJORREV, 4, 4)
80 + FIELD(IRS_AIDR, COMPONENT, 8, 4)
81 +
82 +REG32(IRS_CR0, 0x80)
83 + FIELD(IRS_CR0, IRSEN, 0, 1)
84 + FIELD(IRS_CR0, IDLE, 1, 1)
85 +
86 +REG32(IRS_CR1, 0x84)
87 + FIELD(IRS_CR1, SH, 0, 2)
88 + FIELD(IRS_CR1, OC, 2, 2)
89 + FIELD(IRS_CR1, IC, 4, 2)
90 + FIELD(IRS_CR1, IST_RA, 6, 1)
91 + FIELD(IRS_CR1, IST_WA, 7, 1)
92 + FIELD(IRS_CR1, VMT_RA, 8, 1)
93 + FIELD(IRS_CR1, VMT_WA, 9, 1)
94 + FIELD(IRS_CR1, VPET_RA, 10, 1)
95 + FIELD(IRS_CR1, VPET_WA, 11, 1)
96 + FIELD(IRS_CR1, VMD_RA, 12, 1)
97 + FIELD(IRS_CR1, VMD_WA, 13, 1)
98 + FIELD(IRS_CR1, VPED_RA, 14, 1)
99 + FIELD(IRS_CR1, VPED_WA, 15, 1)
100 +
101 +REG32(IRS_SYNCR, 0xc0)
102 + FIELD(IRS_SYNCR, SYNC, 31, 1)
103 +
104 +REG32(IRS_SYNC_STATUSR, 0xc4)
105 + FIELD(IRS_SYNC_STATUSR, IDLE, 0, 1)
106 +
107 +REG64(IRS_SPI_VMR, 0x100)
108 + FIELD(IRS_SPI_VMR, VM_ID, 0, 16)
109 + FIELD(IRS_SPI_VMR, VIRT, 63, 1)
110 +
111 +REG32(IRS_SPI_SELR, 0x108)
112 + FIELD(IRS_SPI_SELR, ID, 0, 24)
113 +
114 +REG32(IRS_SPI_DOMAINR, 0x10c)
115 + FIELD(IRS_SPI_DOMAINR, DOMAIN, 0, 2)
116 +
117 +REG32(IRS_SPI_RESAMPLER, 0x110)
118 + FIELD(IRS_SPI_RESAMPLER, SPI_ID, 0, 24)
119 +
120 +REG32(IRS_SPI_CFGR, 0x114)
121 + FIELD(IRS_SPI_CFGR, TM, 0, 1)
122 +
123 +REG32(IRS_SPI_STATUSR, 0x118)
124 + FIELD(IRS_SPI_STATUSR, IDLE, 0, 1)
125 + FIELD(IRS_SPI_STATUSR, V, 1, 1)
126 +
127 +REG32(IRS_PE_SELR, 0x140)
128 + FIELD(IRS_PE_SELR, IAFFID, 0, 16)
129 +
130 +REG32(IRS_PE_STATUSR, 0x144)
131 + FIELD(IRS_PE_STATUSR, IDLE, 0, 1)
132 + FIELD(IRS_PE_STATUSR, V, 1, 1)
133 + FIELD(IRS_PE_STATUSR, ONLINE, 2, 1)
134 +
135 +REG32(IRS_PE_CR0, 0x148)
136 + FIELD(IRS_PE_CR0, DPS, 0, 1)
137 +
138 +REG64(IRS_IST_BASER, 0x180)
139 + FIELD(IRS_IST_BASER, VALID, 0, 1)
140 + FIELD(IRS_IST_BASER, ADDR, 6, 50)
141 +
142 +REG32(IRS_IST_CFGR, 0x190)
143 + FIELD(IRS_IST_CFGR, LPI_ID_BITS, 0, 5)
144 + FIELD(IRS_IST_CFGR, L2SZ, 5, 2)
145 + FIELD(IRS_IST_CFGR, ISTSZ, 7, 2)
146 + FIELD(IRS_IST_CFGR, STRUCTURE, 16, 1)
147 +
148 +REG32(IRS_IST_STATUSR, 0x194)
149 + FIELD(IRS_IST_STATUSR, IDLE, 0, 1)
150 +
151 +REG32(IRS_MAP_L2_ISTR, 0x1c0)
152 + FIELD(IRS_MAP_L2_ISTR, ID, 0, 24)
153 +
154 +REG64(IRS_VMT_BASER, 0x200)
155 + FIELD(IRS_VMT_BASER, VALID, 0, 1)
156 + FIELD(IRS_VMT_BASER, ADDR, 3, 53)
157 +
158 +REG32(IRS_VMT_CFGR, 0x210)
159 + FIELD(IRS_VMT_CFGR, VM_ID_BITS, 0, 5)
160 + FIELD(IRS_VMT_CFGR, STRUCTURE, 16, 1)
161 +
162 +REG32(IRS_VMT_STATUSR, 0x124)
163 + FIELD(IRS_VMT_STATUSR, IDLE, 0, 1)
164 +
165 +REG64(IRS_VPE_SELR, 0x240)
166 + FIELD(IRS_VPE_SELR, VM_ID, 0, 16)
167 + FIELD(IRS_VPE_SELR, VPE_ID, 32, 16)
168 + FIELD(IRS_VPE_SELR, S, 63, 1)
169 +
170 +REG64(IRS_VPE_DBR, 0x248)
171 + FIELD(IRS_VPE_DBR, INTID, 0, 24)
172 + FIELD(IRS_VPE_DBR, DBPM, 32, 5)
173 + FIELD(IRS_VPE_DBR, REQ_DB, 62, 1)
174 + FIELD(IRS_VPE_DBR, DBV, 63, 1)
175 +
176 +REG32(IRS_VPE_HPPIR, 0x250)
177 + FIELD(IRS_VPE_HPPIR, ID, 0, 24)
178 + FIELD(IRS_VPE_HPPIR, TYPE, 29, 3)
179 + FIELD(IRS_VPE_HPPIR, HPPIV, 32, 1)
180 +
181 +REG32(IRS_VPE_CR0, 0x258)
182 + FIELD(IRS_VPE_CR0, DPS, 0, 1)
183 +
184 +REG32(IRS_VPE_STATUSR, 0x25c)
185 + FIELD(IRS_VPE_STATUSR, IDLE, 0, 1)
186 + FIELD(IRS_VPE_STATUSR, V, 1, 1)
187 +
188 +REG64(IRS_VM_DBR, 0x280)
189 + FIELD(IRS_VM_DBR, VPE_ID, 0, 16)
190 + FIELD(IRS_VM_DBR, EN, 63, 1)
191 +
192 +REG32(IRS_VM_SELR, 0x288)
193 + FIELD(IRS_VM_SELR, VM_ID, 0, 16)
194 +
195 +REG32(IRS_VM_STATUSR, 0x28c)
196 + FIELD(IRS_VM_STATUSR, IDLE, 0, 1)
197 + FIELD(IRS_VM_STATUSR, V, 1, 1)
198 +
199 +REG64(IRS_VMAP_L2_VMTR, 0x2c0)
200 + FIELD(IRS_VMAP_L2_VMTR, VM_ID, 0, 16)
201 + FIELD(IRS_VMAP_L2_VMTR, M, 63, 1)
202 +
203 +REG64(IRS_VMAP_VMR, 0x2c8)
204 + FIELD(IRS_VMAP_VMR, VM_ID, 0, 16)
205 + FIELD(IRS_VMAP_VMR, U, 62, 1)
206 + FIELD(IRS_VMAP_VMR, M, 63, 1)
207 +
208 +REG64(IRS_VMAP_VISTR, 0x2d0)
209 + FIELD(IRS_VMAP_VISTR, TYPE, 29, 3)
210 + FIELD(IRS_VMAP_VISTR, VM_ID, 32, 16)
211 + FIELD(IRS_VMAP_VISTR, U, 62, 1)
212 + FIELD(IRS_VMAP_VISTR, M, 63, 1)
213 +
214 +REG64(IRS_VMAP_L2_VISTR, 0x2d8)
215 + FIELD(IRS_VMAP_L2_VISTR, ID, 0, 24)
216 + FIELD(IRS_VMAP_L2_VISTR, TYPE, 29, 3)
217 + FIELD(IRS_VMAP_L2_VISTR, VM_ID, 32, 16)
218 + FIELD(IRS_VMAP_L2_VISTR, M, 63, 1)
219 +
220 +REG64(IRS_VMAP_VPER, 0x2e0)
221 + FIELD(IRS_VMAP_VPER, VPE_ID, 0, 16)
222 + FIELD(IRS_VMAP_VPER, VM_ID, 32, 16)
223 + FIELD(IRS_VMAP_VPER, M, 63, 1)
224 +
225 +REG64(IRS_SAVE_VMR, 0x300)
226 + FIELD(IRS_SAVE_VMR, VM_ID, 0, 16)
227 + FIELD(IRS_SAVE_VMR, Q, 62, 1)
228 + FIELD(IRS_SAVE_VMR, S, 63, 1)
229 +
230 +REG32(IRS_SAVE_VM_STATUSR, 0x308)
231 + FIELD(IRS_SAVE_VM_STATUSR, IDLE, 0, 1)
232 + FIELD(IRS_SAVE_VM_STATUSR, Q, 1, 1)
233 +
234 +REG32(IRS_MEC_IDR, 0x340)
235 + FIELD(IRS_MEC_IDR, MECIDSIZE, 0, 4)
236 +
237 +REG32(IRS_MEC_MECID_R, 0x344)
238 + FIELD(IRS_MEC_MICID_R, MECID, 0, 16)
239 +
240 +REG32(IRS_MPAM_IDR, 0x380)
241 + FIELD(IRS_MPAM_IDR, PARTID_MAX, 0, 16)
242 + FIELD(IRS_MPAM_IDR, PMG_MAX, 16, 8)
243 + FIELD(IRS_MPAM_IDR, HAS_MPAM_SP, 24, 1)
244 +
245 +REG32(IRS_MPAM_PARTID_R, 0x384)
246 + FIELD(IRS_MPAM_IDR, PARTID, 0, 16)
247 + FIELD(IRS_MPAM_IDR, PMG, 16, 8)
248 + FIELD(IRS_MPAM_IDR, MPAM_SP, 24, 2)
249 + FIELD(IRS_MPAM_IDR, IDLE, 31, 1)
250 +
251 +REG64(IRS_SWERR_STATUSR, 0x3c0)
252 + FIELD(IRS_SWERR_STATUSR, V, 0, 1)
253 + FIELD(IRS_SWERR_STATUSR, S0V, 1, 1)
254 + FIELD(IRS_SWERR_STATUSR, S1V, 2, 1)
255 + FIELD(IRS_SWERR_STATUSR, OF, 3, 1)
256 + FIELD(IRS_SWERR_STATUSR, EC, 16, 8)
257 + FIELD(IRS_SWERR_STATUSR, IMP_EC, 24, 8)
258 +
259 +REG64(IRS_SWERR_SYNDROMER0, 0x3c8)
260 + FIELD(IRS_SWERR_SYNDROMER0, VM_ID, 0, 16)
261 + FIELD(IRS_SWERR_SYNDROMER0, ID, 32, 24)
262 + FIELD(IRS_SWERR_SYNDROMER0, TYPE, 60, 3)
263 + FIELD(IRS_SWERR_SYNDROMER0, VIRTUAL, 63, 1)
264 +
265 +REG64(IRS_SWERR_SYNDROMER1, 0x3d0)
266 + FIELD(IRS_SWERR_SYNDROMER2, ADDR, 3, 53)
267 +
268 static bool config_readl(GICv5 *s, GICv5Domain domain, hwaddr offset,
269 uint64_t *data, MemTxAttrs attrs)
270 {