This is based on mainline, without any extra ARMv9-A dependencies which are still under development. This is good enough to pass all of the tests within
https://github.com/Huawei/Huawei_CCA_QEMU With the exception of the final patch, all of the code below is my own. The Huawei code was based on last year's qemu-6.2, and the Granule Protection Check was done at the wrong level. I have integrated the GPC into the normal arm_cpu_tlb_fill code path. The first two patches are bug fixes that are unrelated to RME. The bug fixed by the second patch was uncovered by the VTCR_EL2 setting used by the Realm Management Monitor included with TF-A. The final patch is more or less a hack, required by Huawei's changes to TF-A. Given that current TF-A supports QEMU virt board, using FDT, I think the correct solution going forward is to *not* skip creating the fdt node. I have not yet tried to build mainline TF-A and TF-RMM, or see what has been integrated into TF-A-TESTS. See https://git.trustedfirmware.org/ for the relevant repos. r~ Richard Henderson (22): target/arm: Fix pmsav8 stage2 secure parameter target/arm: Rewrite check_s2_mmu_setup target/arm: Add isar_feature_aa64_rme target/arm: Update SCR and HCR for RME target/arm: SCR_EL3.NS may be RES1 target/arm: Add RME cpregs target/arm: Introduce ARMSecuritySpace include/exec/memattrs: Add two bits of space to MemTxAttrs target/arm: Adjust the order of Phys and Stage2 ARMMMUIdx target/arm: Introduce ARMMMUIdx_Phys_{Realm,Root} target/arm: Pipe ARMSecuritySpace through ptw.c target/arm: NSTable is RES0 for the RME EL3 regime target/arm: Handle Block and Page bits for security space target/arm: Handle no-execute for Realm and Root regimes target/arm: Use get_phys_addr_with_struct in S1_ptw_translate target/arm: Move s1_is_El0 into S1Translate target/arm: Use get_phys_addr_with_struct for stage2 target/arm: Add GPC syndrome target/arm: Implement GPC exceptions target/arm: Implement the granule protection check target/arm: Enable RME for -cpu max hw/arm/virt: Add some memory for Realm Management Monitor include/exec/memattrs.h | 9 +- include/hw/arm/virt.h | 2 + target/arm/cpu-param.h | 2 +- target/arm/cpu.h | 143 ++++++-- target/arm/internals.h | 27 ++ target/arm/syndrome.h | 9 + hw/arm/virt.c | 43 +++ target/arm/cpu.c | 4 + target/arm/cpu64.c | 37 ++ target/arm/helper.c | 138 +++++++- target/arm/ptw.c | 749 ++++++++++++++++++++++++++++++---------- target/arm/tlb_helper.c | 92 ++++- 12 files changed, 1030 insertions(+), 225 deletions(-) -- 2.34.1