I did this myself 9 months ago, but never posted it for some reason.
https://gitlab.com/rth7680/qemu/-/commit/2598d4896e19376fbae3926728ac737e7bbea190
The only difference I have is
+static CPAccessResult access_rndr(CPUARMState *env, const ARMCPRegInfo *ri,
+ bool isread)
+{
+ if (env->cp15.scr_el3 & SCR_TRNDR) {
+ return CP_ACCESS_TRAP_EL3;
+ }
+ return CP_ACCESS_OK;
+}
static CPAccessResult access_rndr(CPUARMState *env, const ARMCPRegInfo *ri,
bool isread)
{
if (env->cp15.scr_el3 & SCR_TRNDR) {
return CP_ACCESS_TRAP_EL3;
}
/*
* Note that FEAT_RNDR_TRAP may be implemented without FEAT_RNDR.
* In that case, if the trap is not enabled, the read undefs.
*/
if (!cpu_isar_feature(aa64_rndr, env_archcpu(env))) {
return CP_ACCESS_UNDEFINED;
}
return CP_ACCESS_OK;
}
...
if (cpu_isar_feature(aa64_rndr, cpu) ||
cpu_isar_feature(aa64_rndr_trap, cpu)) {
define_arm_cp_regs(cpu, rndr_reginfo);
}
r~