mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
target/arm: Add VHE system register redirection and aliasing
Several of the EL1/0 registers are redirected to the EL2 version when in EL2 and HCR_EL2.E2H is set. Many of these registers have side effects. Link together the two ARMCPRegInfo structures after they have been properly instantiated. Install common dispatch routines to all of the relevant registers. The same set of registers that are redirected also have additional EL12/EL02 aliases created to access the original register that was redirected. Omit the generic timer registers from redirection here, because we'll need multiple kinds of redirection from both EL0 and EL2. Tested-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200206105448.4726-29-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
b4ecf60f7e
commit
e2cce18f5c
2 changed files with 175 additions and 0 deletions
|
@ -2576,6 +2576,19 @@ struct ARMCPRegInfo {
|
|||
* fieldoffset is 0 then no reset will be done.
|
||||
*/
|
||||
CPResetFn *resetfn;
|
||||
|
||||
/*
|
||||
* "Original" writefn and readfn.
|
||||
* For ARMv8.1-VHE register aliases, we overwrite the read/write
|
||||
* accessor functions of various EL1/EL0 to perform the runtime
|
||||
* check for which sysreg should actually be modified, and then
|
||||
* forwards the operation. Before overwriting the accessors,
|
||||
* the original function is copied here, so that accesses that
|
||||
* really do go to the EL1/EL0 version proceed normally.
|
||||
* (The corresponding EL2 register is linked via opaque.)
|
||||
*/
|
||||
CPReadFn *orig_readfn;
|
||||
CPWriteFn *orig_writefn;
|
||||
};
|
||||
|
||||
/* Macros which are lvalues for the field in CPUARMState for the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue