Continuing in my series of filling in bits of the architecture that probably nobody much cares about, this series fixes up Feat_DoubleLock. DoubleLock is a part of the debug architecture which allows a guest OS to suppress debug exceptions while it is powering down a CPU so that they don't cause updates to bits of debug register state that then don't get preserved across the power-down/up sequence. The reason for looking at QEMU's support here is that recent versions of the architecture define that the feature becomes first optional (after v8.2 or so) and then mustn't be implemented at all at v9.
We have only ever implemented this by NOPing the OSDLR_EL1 register, which is not correct for either the "implement the feature" or the "don't implement the feature" case. What is supposed to happen is that if the feature is implemented then there is one writable bit which is set to 1 to suppress debug exceptions, and if the feature is not implemented then the bit is RAZ/WI. We also don't properly implement the related OS Lock which does something very similar. There we correctly implemented the register reading and writing parts but didn't make the bit do anything. The series starts with some code movement, while I was messing with the debug code, shifting 500 lines of debug related code out of the massive helper.c and into debug_helper.c. Patch 2 is big but almost entirely pure code motion (best reviewed with git's --color-moved support). I think this helps in our ongoing quest to make helper.c less of a massive grabbag of miscellaneous things. Patch 3 implements the required behaviour of the OS Lock (which turns out to be very easy). Patch 4 adds support for some AArch32 debug ID registers we turn out to be missing. Clearly nobody was trying to read these, but one of them is where the field for "is FEAT_DoubleLock present" is kept, so we need the data internally. Finally, patch 5 fixes the implementation of OSDLR_EL1 to either be RAZ/WI or to have a bit that has the required suppress-debug-exceptions behaviour. thanks -- PMM Peter Maydell (5): target/arm: Fix code style issues in debug helper functions target/arm: Move define_debug_regs() to debug_helper.c target/arm: Suppress debug exceptions when OS Lock set target/arm: Implement AArch32 DBGDEVID, DBGDEVID1, DBGDEVID2 target/arm: Correctly implement Feat_DoubleLock target/arm/cpregs.h | 3 + target/arm/cpu.h | 43 +++ target/arm/internals.h | 9 + target/arm/cpu64.c | 6 + target/arm/cpu_tcg.c | 6 + target/arm/debug_helper.c | 577 ++++++++++++++++++++++++++++++++++++++ target/arm/helper.c | 513 +-------------------------------- 7 files changed, 645 insertions(+), 512 deletions(-) -- 2.25.1