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~

Reply via email to