mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
target/arm: Update MSR access for PAN
For aarch64, there's a dedicated msr (imm, reg) insn. For aarch32, this is done via msr to cpsr. Writes from el0 are ignored, which is already handled by the CPSR_USER mask. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200208125816.14954-12-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
1408451118
commit
220f508f49
4 changed files with 43 additions and 0 deletions
|
@ -4163,6 +4163,24 @@ static void aa64_daif_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
|||
env->daif = value & PSTATE_DAIF;
|
||||
}
|
||||
|
||||
static uint64_t aa64_pan_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
||||
{
|
||||
return env->pstate & PSTATE_PAN;
|
||||
}
|
||||
|
||||
static void aa64_pan_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||
uint64_t value)
|
||||
{
|
||||
env->pstate = (env->pstate & ~PSTATE_PAN) | (value & PSTATE_PAN);
|
||||
}
|
||||
|
||||
static const ARMCPRegInfo pan_reginfo = {
|
||||
.name = "PAN", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 0, .crn = 4, .crm = 2, .opc2 = 3,
|
||||
.type = ARM_CP_NO_RAW, .access = PL1_RW,
|
||||
.readfn = aa64_pan_read, .writefn = aa64_pan_write
|
||||
};
|
||||
|
||||
static CPAccessResult aa64_cacheop_access(CPUARMState *env,
|
||||
const ARMCPRegInfo *ri,
|
||||
bool isread)
|
||||
|
@ -7599,6 +7617,9 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
if (cpu_isar_feature(aa64_lor, cpu)) {
|
||||
define_arm_cp_regs(cpu, lor_reginfo);
|
||||
}
|
||||
if (cpu_isar_feature(aa64_pan, cpu)) {
|
||||
define_one_arm_cp_reg(cpu, &pan_reginfo);
|
||||
}
|
||||
|
||||
if (arm_feature(env, ARM_FEATURE_EL2) && cpu_isar_feature(aa64_vh, cpu)) {
|
||||
define_arm_cp_regs(cpu, vhe_reginfo);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue