.macro gen_mrs reg | |
.irp m, 3, 11, 15 | |
MRS X\m, \reg | |
.endr | |
.endm | |
.macro gen_tlbi reg | |
.irp m, 3, 11, 15 | |
TLBI \reg, X\m | |
.endr | |
.endm | |
func: | |
# Secure second stage | |
gen_mrs VSTTBR_EL2 | |
gen_mrs VSTCR_EL2 | |
# Timer changes | |
gen_mrs CNTP_TVAL_EL0 | |
gen_mrs CNTP_CTL_EL0 | |
gen_mrs CNTP_CVAL_EL0 | |
gen_mrs CNTV_TVAL_EL0 | |
gen_mrs CNTV_CTL_EL0 | |
gen_mrs CNTV_CVAL_EL0 | |
gen_mrs CNTHVS_TVAL_EL2 | |
gen_mrs CNTHVS_CVAL_EL2 | |
gen_mrs CNTHVS_CTL_EL2 | |
gen_mrs CNTHPS_TVAL_EL2 | |
gen_mrs CNTHPS_CVAL_EL2 | |
gen_mrs CNTHPS_CTL_EL2 | |
# Debug state | |
gen_mrs SDER32_EL2 | |
# Nested Virtualization | |
gen_mrs VNCR_EL2 | |
# PSTATE | |
MSR DIT, #01 | |
MSR DIT, #00 | |
MSR DIT, X3 | |
MSR DIT, X11 | |
MSR DIT, X15 | |
gen_mrs DIT | |
# TLB Maintenance instructions | |
TLBI VMALLE1OS | |
TLBI ALLE2OS | |
TLBI ALLE1OS | |
TLBI ALLE3OS | |
TLBI VMALLS12E1OS | |
gen_tlbi VAE1OS | |
gen_tlbi ASIDE1OS | |
gen_tlbi VAAE1OS | |
gen_tlbi VALE1OS | |
gen_tlbi VAALE1OS | |
gen_tlbi IPAS2E1OS | |
gen_tlbi IPAS2LE1OS | |
gen_tlbi VAE2OS | |
gen_tlbi VALE2OS | |
gen_tlbi VAE3OS | |
gen_tlbi VALE3OS | |
# TLB Range Maintenance Instructions | |
gen_tlbi RVAE1 | |
gen_tlbi RVAAE1 | |
gen_tlbi RVALE1 | |
gen_tlbi RVAALE1 | |
gen_tlbi RVAE1IS | |
gen_tlbi RVAAE1IS | |
gen_tlbi RVALE1IS | |
gen_tlbi RVAALE1IS | |
gen_tlbi RVAE1OS | |
gen_tlbi RVAAE1OS | |
gen_tlbi RVALE1OS | |
gen_tlbi RVAALE1OS | |
gen_tlbi RIPAS2E1IS | |
gen_tlbi RIPAS2LE1IS | |
gen_tlbi RIPAS2E1 | |
gen_tlbi RIPAS2LE1 | |
gen_tlbi RIPAS2E1OS | |
gen_tlbi RIPAS2LE1OS | |
gen_tlbi RVAE2 | |
gen_tlbi RVALE2 | |
gen_tlbi RVAE2IS | |
gen_tlbi RVALE2IS | |
gen_tlbi RVAE2OS | |
gen_tlbi RVALE2OS | |
gen_tlbi RVAE3 | |
gen_tlbi RVALE3 | |
gen_tlbi RVAE3IS | |
gen_tlbi RVALE3IS | |
gen_tlbi RVAE3OS | |
gen_tlbi RVALE3OS |