CRm
#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
u8 CRm = sys_reg_CRm(instr);
if (CRm == TLBI_CRm_nROS &&
if ((CRm == TLBI_CRm_RIS || CRm == TLBI_CRm_ROS ||
CRm == TLBI_CRm_RNS) &&
u8 CRm = sys_reg_CRm(instr);
if (CRm == TLBI_CRm_IPAIS || CRm == TLBI_CRm_IPAONS)
if (CRm == TLBI_CRm_nROS &&
if ((CRm == TLBI_CRm_RIS || CRm == TLBI_CRm_ROS ||
CRm == TLBI_CRm_RNS) &&
#define __SYS_BARRIER_INSN(op0, op1, CRn, CRm, op2, Rt) \
sys_insn((op0), (op1), (CRn), (CRm), (op2)) | \
encoding = sys_reg(sr->Op0, sr->Op1, sr->CRn, sr->CRm, sr->Op2);
Op0(3), Op1(0), CRn(0), CRm(crm), Op2(op2), \
if (r->CRn == 9 && r->CRm == 13 && r->Op2 == 0)
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
if (r->CRn == 9 && r->CRm == 13 && r->Op2 == 0)
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
if (r->CRn == 9 && r->CRm == 13) {
} else if (r->CRn == 0 && r->CRm == 9) {
} else if (r->CRn == 14 && (r->CRm & 12) == 8) {
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
if (r->CRn == 9 && r->CRm == 13 && r->Op2 == 1) {
} else if (r->CRn == 14 && (r->CRm & 12) == 12) {
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
if (r->CRm & 0x2)
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);
u8 CRm = sys_reg_CRm(instr);
if (CRm == TLBI_CRm_nROS &&
u32 sys_encoding = sys_insn(p->Op0, p->Op1, p->CRn, p->CRm, p->Op2);
u8 CRm = sys_reg_CRm(instr);
if (CRm == TLBI_CRm_IPAIS && (Op2 == 2 || Op2 == 6) &&
if (CRm == TLBI_CRm_IPAONS && (Op2 == 0 || Op2 == 4) &&
if (CRm == TLBI_CRm_IPAONS && (Op2 == 3 || Op2 == 7) &&
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.CRm = (esr >> 1) & 0xf;
params->CRm = 3;
if (params->CRm > 3)
(params.CRm || params.Op2 == 6 /* REVIDR */))
params.CRm == 0 && params.Op2 == 7 /* AIDR */)
params->CRm = ((id & KVM_REG_ARM64_SYSREG_CRM_MASK)
(reg->CRm << KVM_REG_ARM64_SYSREG_CRM_SHIFT) |
return &dbg->dbg_bvr[rd->CRm];
return &dbg->dbg_bcr[rd->CRm];
return &dbg->dbg_wvr[rd->CRm];
return &dbg->dbg_wcr[rd->CRm];
p->Op0, p->Op1, p->CRn, p->CRm, p->Op2, str_write_read(p->is_write));
(u32)(x)->CRn, (u32)(x)->CRm, (u32)(x)->Op2)
if (i1->CRm != i2->CRm)
return i1->CRm - i2->CRm;
u8 CRm;
#define CRm(_x) .CRm = _x
CRn(sys_reg_CRn(reg)), CRm(sys_reg_CRm(reg)), \
CRn(sys_reg_CRn(reg)), CRm(sys_reg_CRm(reg)), \
.CRm = sys_reg_CRm(reg), \
.CRm = ((esr) >> 1) & 0xf, \
.CRm = ((esr) >> 1) & 0xf, \
p->CRn == 0 && !(p->CRm & 0b1000));
u8 CRm;
__entry->CRm = reg->CRm;
__entry->CRm, __entry->Op2,
__field(u8, CRm)
#define __SYS_BARRIER_INSN(CRm, op2, Rt) \
__emit_inst(0xd5000000 | sys_insn(0, 3, 3, (CRm), (op2)) | ((Rt) & 0x1f))