175
gicv5_set_handling(gic, id, hm, domain, type, virtual);
176
}
177
178
+static void gic_ppi_cactive_write(CPUARMState *env, const ARMCPRegInfo *ri,
179
+ uint64_t value)
180
+{
181
+ uint64_t old = raw_read(env, ri);
182
+ raw_write(env, ri, old & ~value);
183
+}
184
+
185
+static void gic_ppi_sactive_write(CPUARMState *env, const ARMCPRegInfo *ri,
186
+ uint64_t value)
187
+{
188
+ uint64_t old = raw_read(env, ri);
189
+ raw_write(env, ri, old | value);
190
+}
191
+
192
static const ARMCPRegInfo gicv5_cpuif_reginfo[] = {
193
/*
194
* Barrier: wait until the effects of a cpuif system register
268
*/
269
.resetfn = arm_cp_reset_ignore,
270
},
271
+ { .name = "ICC_PPI_CACTIVER0_EL1", .state = ARM_CP_STATE_AA64,
272
+ .opc0 = 3, .opc1 = 0, .crn = 12, .crm = 13, .opc2 = 0,
273
+ .access = PL1_RW, .type = ARM_CP_ALIAS | ARM_CP_IO | ARM_CP_NO_RAW,
274
+ .fieldoffset = offsetof(CPUARMState, gicv5_cpuif.ppi_active[0]),
275
+ .writefn = gic_ppi_cactive_write,
276
+ },
277
+ { .name = "ICC_PPI_CACTIVER1_EL1", .state = ARM_CP_STATE_AA64,
278
+ .opc0 = 3, .opc1 = 0, .crn = 12, .crm = 13, .opc2 = 1,
279
+ .access = PL1_RW, .type = ARM_CP_ALIAS | ARM_CP_IO | ARM_CP_NO_RAW,
280
+ .fieldoffset = offsetof(CPUARMState, gicv5_cpuif.ppi_active[1]),
281
+ .writefn = gic_ppi_cactive_write,
282
+ },
283
+ { .name = "ICC_PPI_SACTIVER0_EL1", .state = ARM_CP_STATE_AA64,
284
+ .opc0 = 3, .opc1 = 0, .crn = 12, .crm = 13, .opc2 = 2,
285
+ .access = PL1_RW, .type = ARM_CP_IO | ARM_CP_NO_RAW,
286
+ .fieldoffset = offsetof(CPUARMState, gicv5_cpuif.ppi_active[0]),
287
+ .writefn = gic_ppi_sactive_write,
288
+ },
289
+ { .name = "ICC_PPI_SACTIVER1_EL1", .state = ARM_CP_STATE_AA64,
290
+ .opc0 = 3, .opc1 = 0, .crn = 12, .crm = 13, .opc2 = 3,
291
+ .access = PL1_RW, .type = ARM_CP_IO | ARM_CP_NO_RAW,
292
+ .fieldoffset = offsetof(CPUARMState, gicv5_cpuif.ppi_active[1]),
293
+ .writefn = gic_ppi_sactive_write,
294
+ },
295
};
296
297
void define_gicv5_cpuif_regs(ARMCPU *cpu)