This series fully models the behaviour of WFxT instructions. We already had support for WFE for M-profile but we left off A-profile as it has more potential sources of wake-ups. The main one is the event stream which includes events from significant bits of the timer ticking over.
The series starts with some refactoring of the syndrome register helpers to use registerfields. We then expand the WFIT trap handling to report the register used. We then implement the event stream events for SEV, global monitor and the timer related ones before enabling WFE for A-profile and then finally WFET. Note on AI usage. As an experiment I previously posted a series with the help of Gemini. This series however is a ground up re-implementation which takes some different approaches on modelling the event stream. In particular rather than running multiple timers we use the same wxft timer and just compute if the timeout or timer event will come first. The only bits that remain from the Gemini experiment are the tests at the end of the series. I've split up the patches and audited the boot.S changes but I've still to go through the mini-GIC library and the test case itself. Alex. Alex Bennée (35): target/arm: migrate basic syndrome helpers to registerfields target/arm: migrate system/cp trap syndromes to registerfields target/arm: migrate FP/SIMD trap syndromes to registerfields target/arm: migrate eret trap syndromes to registerfields target/arm: migrate SME trap syndromes to registerfields target/arm: migrate PAC trap syndromes to registerfields target/arm: migrate BTI trap syndromes to registerfields target/arm: migrate BXJ trap syndromes to registerfields target/arm: migrate Granule Protection traps to registerfields target/arm: migrate fault syndromes to registerfields target/arm: migrate debug syndromes to registerfields target/arm: migrate wfx syndromes to registerfields target/arm: migrate gcs syndromes to registerfields target/arm: migrate memory op syndromes to registerfields target/arm: migrate check_hcr_el2_trap to use syndrome helper target/arm: use syndrome helpers in arm_cpu_do_interrupt_aarch32_hyp target/arm: use syndrome helpers to set SAME_EL EC bit target/arm: make whpx use syndrome helpers for decode target/arm: make hvf use syndrome helpers for decode target/arm: use syndrome helpers in merge_syn_data_abort target/arm: use syndrome helpers to query VNCR bit target/arm: remove old syndrome defines target/arm: report register in WFIT syndromes target/arm: remove event_register check from arm_cpu_has_work target/arm: redefine event stream fields target/arm: add gt_calc_next_event_stream target/arm: wrap event_register in a union target/arm: ensure aarch64 DISAS_WFE will exit target/arm: implements SEV/SEVL for all modes target/arm: implement global monitor events target/arm: enable event stream on WFE instructions target/arm: implement WFET tests/tcg: split stage 1 between devices and RAM tests/tcg: create a mini-gic3 library tests/tcg: add basic test for aarch64 wf[ie][t] insns target/arm/cpu.h | 21 +- target/arm/internals.h | 12 +- target/arm/syndrome.h | 587 ++++++++++++++++++---- target/arm/tcg/helper-defs.h | 3 +- tests/tcg/aarch64/system/lib/gicv3.h | 56 +++ target/arm/tcg/a32.decode | 5 +- target/arm/tcg/a64.decode | 5 +- target/arm/tcg/t16.decode | 4 +- target/arm/tcg/t32.decode | 4 +- hw/intc/armv7m_nvic.c | 2 +- target/arm/cpu.c | 11 +- target/arm/helper.c | 97 +++- target/arm/hvf/hvf.c | 14 +- target/arm/machine.c | 4 +- target/arm/tcg/debug.c | 2 +- target/arm/tcg/m_helper.c | 4 +- target/arm/tcg/op_helper.c | 122 ++++- target/arm/tcg/tlb_helper.c | 6 +- target/arm/tcg/translate-a64.c | 60 ++- target/arm/tcg/translate.c | 19 +- target/arm/tcg/vfp_helper.c | 5 +- target/arm/whpx/whpx-all.c | 13 +- tests/tcg/aarch64/system/lib/gicv3.c | 77 +++ tests/tcg/aarch64/system/wfx.c | 126 +++++ tests/tcg/aarch64/Makefile.softmmu-target | 15 +- tests/tcg/aarch64/system/boot.S | 55 +- 26 files changed, 1116 insertions(+), 213 deletions(-) create mode 100644 tests/tcg/aarch64/system/lib/gicv3.h create mode 100644 tests/tcg/aarch64/system/lib/gicv3.c create mode 100644 tests/tcg/aarch64/system/wfx.c -- 2.47.3
