static void __hyp_text __sysreg_save_state(struct kvm_cpu_context *ctxt) { ctxt->sys_regs[MPIDR_EL1] = read_sysreg(vmpidr_el2); ctxt->sys_regs[CSSELR_EL1] = read_sysreg(csselr_el1); ctxt->sys_regs[SCTLR_EL1] = read_sysreg_el1(sctlr); ctxt->sys_regs[CPACR_EL1] = read_sysreg_el1(cpacr); ctxt->sys_regs[TTBR0_EL1] = read_sysreg_el1(ttbr0); ctxt->sys_regs[TTBR1_EL1] = read_sysreg_el1(ttbr1); ctxt->sys_regs[TCR_EL1] = read_sysreg_el1(tcr); ctxt->sys_regs[ESR_EL1] = read_sysreg_el1(esr); ctxt->sys_regs[AFSR0_EL1] = read_sysreg_el1(afsr0); ctxt->sys_regs[AFSR1_EL1] = read_sysreg_el1(afsr1); ctxt->sys_regs[FAR_EL1] = read_sysreg_el1(far); ctxt->sys_regs[MAIR_EL1] = read_sysreg_el1(mair); ctxt->sys_regs[VBAR_EL1] = read_sysreg_el1(vbar); ctxt->sys_regs[CONTEXTIDR_EL1] = read_sysreg_el1(contextidr); ctxt->sys_regs[AMAIR_EL1] = read_sysreg_el1(amair); ctxt->sys_regs[CNTKCTL_EL1] = read_sysreg_el1(cntkctl); ctxt->sys_regs[PAR_EL1] = read_sysreg(par_el1); ctxt->sys_regs[TPIDR_EL1] = read_sysreg(tpidr_el1); ctxt->gp_regs.sp_el1 = read_sysreg(sp_el1); ctxt->gp_regs.elr_el1 = read_sysreg_el1(elr); ctxt->gp_regs.spsr[KVM_SPSR_EL1]= read_sysreg_el1(spsr); ctxt->gp_regs.regs.pc = read_sysreg_el2(elr); ctxt->gp_regs.regs.pstate = read_sysreg_el2(spsr); if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN)) ctxt->sys_regs[DISR_EL1] = read_sysreg_s(SYS_VDISR_EL2); }
static void sve_probe_vqs(DECLARE_BITMAP(map, SVE_VQ_MAX)) { unsigned int vq, vl; unsigned long zcr; bitmap_zero(map, SVE_VQ_MAX); zcr = ZCR_ELx_LEN_MASK; zcr = read_sysreg_s(SYS_ZCR_EL1) & ~zcr; for (vq = SVE_VQ_MAX; vq >= SVE_VQ_MIN; --vq) { write_sysreg_s(zcr | (vq - 1), SYS_ZCR_EL1); /* self-syncing */ vl = sve_get_vl(); vq = sve_vq_from_vl(vl); /* skip intervening lengths */ set_bit(vq_to_bit(vq), map); } }