Op1
#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
#define __ACCESS_CP15_64(Op1, CRm) \
"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
encoding = sys_reg(sr->Op0, sr->Op1, sr->CRn, sr->CRm, sr->Op2);
Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \
Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \
u32 op = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 op = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 op = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
{ AA32(LO), Op1( 0), CRn( 0), CRm((n)), Op2( 4), \
{ Op1( 0), CRn( 0), CRm((n)), Op2( 5), trap_dbg_wb_reg, NULL, n }, \
{ Op1( 0), CRn( 0), CRm((n)), Op2( 6), trap_dbg_wb_reg, NULL, n }, \
{ Op1( 0), CRn( 0), CRm((n)), Op2( 7), trap_dbg_wb_reg, NULL, n }
{ AA32(HI), Op1( 0), CRn( 1), CRm((n)), Op2( 1), \
{ Op1( 0), CRn( 0), CRm( 0), Op2( 0), trap_dbgdidr },
{ Op1( 0), CRn( 0), CRm( 0), Op2( 2), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 1), Op2( 0), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 2), Op2( 0), trap_debug_regs, NULL, MDCCINT_EL1 },
{ Op1( 0), CRn( 0), CRm( 2), Op2( 2), trap_debug_regs, NULL, MDSCR_EL1 },
{ Op1( 0), CRn( 0), CRm( 3), Op2( 0), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 3), Op2( 2), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 6), Op2( 0), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 6), Op2( 2), trap_raz_wi },
{ Op1( 0), CRn( 0), CRm( 7), Op2( 0), trap_debug_regs, NULL, DBGVCR32_EL2 },
{ Op1( 0), CRn( 1), CRm( 0), Op2( 0), trap_raz_wi },
{ Op1( 0), CRn( 1), CRm( 0), Op2( 4), trap_oslar_el1 },
{ Op1( 0), CRn( 1), CRm( 1), Op2( 4), trap_oslsr_el1, NULL, OSLSR_EL1 },
{ Op1( 0), CRn( 1), CRm( 3), Op2( 4), trap_raz_wi },
{ Op1( 0), CRn( 1), CRm( 4), Op2( 4), trap_raz_wi },
{ Op1( 0), CRn( 2), CRm( 0), Op2( 0), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm( 0), Op2( 7), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm( 1), Op2( 7), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm( 2), Op2( 7), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm( 8), Op2( 6), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm( 9), Op2( 6), trap_raz_wi },
{ Op1( 0), CRn( 7), CRm(14), Op2( 6), trap_dbgauthstatus_el1 },
{ Op1( 0), CRm( 1), .access = trap_raz_wi },
{ Op1( 0), CRm( 2), .access = trap_raz_wi },
Op1(_Op1), CRn(_CRn), CRm(_CRm), Op2(_Op2), \
{ Op1( 0), CRn( 0), CRm( 0), Op2( 1), access_ctr },
{ Op1( 0), CRn( 1), CRm( 0), Op2( 0), access_vm_reg, NULL, SCTLR_EL1 },
{ AA32(LO), Op1( 0), CRn( 1), CRm( 0), Op2( 1), access_actlr, NULL, ACTLR_EL1 },
{ AA32(HI), Op1( 0), CRn( 1), CRm( 0), Op2( 3), access_actlr, NULL, ACTLR_EL1 },
{ Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, TTBR0_EL1 },
{ Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, TTBR1_EL1 },
{ AA32(LO), Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, TCR_EL1 },
{ AA32(HI), Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, TCR_EL1 },
{ Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, DACR32_EL2 },
{ Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, ESR_EL1 },
{ Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, IFSR32_EL2 },
{ Op1( 0), CRn( 5), CRm( 1), Op2( 0), access_vm_reg, NULL, AFSR0_EL1 },
{ Op1( 0), CRn( 5), CRm( 1), Op2( 1), access_vm_reg, NULL, AFSR1_EL1 },
{ AA32(LO), Op1( 0), CRn( 6), CRm( 0), Op2( 0), access_vm_reg, NULL, FAR_EL1 },
{ AA32(HI), Op1( 0), CRn( 6), CRm( 0), Op2( 2), access_vm_reg, NULL, FAR_EL1 },
{ Op1( 0), CRn( 7), CRm( 6), Op2( 2), access_dcsw },
{ Op1( 0), CRn( 7), CRm(10), Op2( 2), access_dcsw },
{ Op1( 0), CRn( 7), CRm(14), Op2( 2), access_dcsw },
{ AA32(LO), Op1( 0), CRn(10), CRm( 2), Op2( 0), access_vm_reg, NULL, MAIR_EL1 },
{ AA32(HI), Op1( 0), CRn(10), CRm( 2), Op2( 1), access_vm_reg, NULL, MAIR_EL1 },
{ AA32(LO), Op1( 0), CRn(10), CRm( 3), Op2( 0), access_vm_reg, NULL, AMAIR_EL1 },
{ AA32(HI), Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, AMAIR_EL1 },
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, CONTEXTIDR_EL1 },
{ Op1(1), CRn( 0), CRm( 0), Op2(0), access_ccsidr },
{ Op1(1), CRn( 0), CRm( 0), Op2(1), access_clidr },
{ Op1(1), CRn( 0), CRm( 0), Op2(2), undef_access },
{ Op1(2), CRn( 0), CRm( 0), Op2(0), access_csselr, NULL, CSSELR_EL1 },
{ Op1( 0), CRn( 0), CRm( 2), Op2( 0), access_vm_reg, NULL, TTBR0_EL1 },
{ Op1( 0), CRn( 0), CRm(12), Op2( 0), access_gic_sgi }, /* ICC_SGI1R */
{ Op1( 1), CRn( 0), CRm( 2), Op2( 0), access_vm_reg, NULL, TTBR1_EL1 },
{ Op1( 1), CRn( 0), CRm(12), Op2( 0), access_gic_sgi }, /* ICC_ASGI1R */
{ Op1( 2), CRn( 0), CRm(12), Op2( 0), access_gic_sgi }, /* ICC_SGI0R */
params.Op1 = (esr >> 16) & 0xf;
params->Op1 = 0;
if (params.Op1 == 0 && params.CRn == 0 &&
if (params.Op1 == 1 && params.CRn == 0 &&
params->Op1 = ((id & KVM_REG_ARM64_SYSREG_OP1_MASK)
(reg->Op1 << KVM_REG_ARM64_SYSREG_OP1_SHIFT) |
switch (p->Op1) {
if (p->Op1 == 4) { /* ICC_SRE_EL2 */
p->Op0, p->Op1, p->CRn, p->CRm, p->Op2, str_write_read(p->is_write));
sys_reg((u32)(x)->Op0, (u32)(x)->Op1, \
if (i1->Op1 != i2->Op1)
return i1->Op1 - i2->Op1;
u8 Op1;
#define Op1(_x) .Op1 = _x
Op0(sys_reg_Op0(reg)), Op1(sys_reg_Op1(reg)), \
Op0(0), Op1(sys_reg_Op1(reg)), \
.Op1 = sys_reg_Op1(reg), \
.Op1 = ((esr) >> 14) & 0x7, \
((struct sys_reg_params){ .Op1 = ((esr) >> 14) & 0x7, \
return (p->Op0 == 3 && !(p->Op1 & 0b100) && p->Op1 != 2 &&
u8 Op1;
__entry->Op1 = reg->Op1;
__entry->Op0, __entry->Op1, __entry->CRn,
__field(u8, Op1)