FIELD(GIC_CDHM, TYPE, 29, 3)
FIELD(GIC_CDHM, HM, 32, 1)
+FIELD(GIC_CDRCFG, ID, 0, 24)
+FIELD(GIC_CDRCFG, TYPE, 29, 3)
+
static GICv5Common *gicv5_get_gic(CPUARMState *env)
{
return env->gicv5state;
gicv5_set_pending(gic, id, pending, domain, type, virtual);
}
+static void gic_cdrcfg_write(CPUARMState *env, const ARMCPRegInfo *ri,
+ uint64_t value)
+{
+ GICv5Common *gic = gicv5_get_gic(env);
+ GICv5IntType type = FIELD_EX64(value, GIC_CDRCFG, TYPE);
+ uint32_t id = FIELD_EX64(value, GIC_CDRCFG, ID);
+ bool virtual = false;
+ GICv5Domain domain = gicv5_current_phys_domain(env);
+
+ env->gicv5_cpuif.icc_icsr_el1 =
+ gicv5_request_config(gic, id, domain, type, virtual);
+}
+
static void gic_cdhm_write(CPUARMState *env, const ARMCPRegInfo *ri,
uint64_t value)
{
.access = PL1_W, .type = ARM_CP_IO | ARM_CP_NO_RAW,
.writefn = gic_cdpend_write,
},
+ { .name = "GIC_CDRCFG", .state = ARM_CP_STATE_AA64,
+ .opc0 = 1, .opc1 = 0, .crn = 12, .crm = 1, .opc2 = 5,
+ .access = PL1_W, .type = ARM_CP_IO | ARM_CP_NO_RAW,
+ .writefn = gic_cdrcfg_write,
+ },
{ .name = "GIC_CDHM", .state = ARM_CP_STATE_AA64,
.opc0 = 1, .opc1 = 0, .crn = 12, .crm = 2, .opc2 = 1,
.access = PL1_W, .type = ARM_CP_IO | ARM_CP_NO_RAW,
.writefn = gic_cdhm_write,
},
+ { .name = "ICC_ICSR_EL1", .state = ARM_CP_STATE_AA64,
+ .opc0 = 3, .opc1 = 0, .crn = 12, .crm = 10, .opc2 = 4,
+ .access = PL1_RW, .type = ARM_CP_NO_RAW,
+ .fieldoffset = offsetof(CPUARMState, gicv5_cpuif.icc_icsr_el1),
+ .resetvalue = 0,
+ },
};
void define_gicv5_cpuif_regs(ARMCPU *cpu)