target/riscv: Add a virtualised MMU Mode
Add a new MMU mode that includes the current virt mode. Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 4b301bc0ea36da962fc1605371b65019ac3073df.1604464950.git.alistair.francis@wdc.com
This commit is contained in:
parent
3c8c36c908
commit
c445593d30
@ -18,6 +18,15 @@
|
|||||||
# define TARGET_VIRT_ADDR_SPACE_BITS 32 /* sv32 */
|
# define TARGET_VIRT_ADDR_SPACE_BITS 32 /* sv32 */
|
||||||
#endif
|
#endif
|
||||||
#define TARGET_PAGE_BITS 12 /* 4 KiB Pages */
|
#define TARGET_PAGE_BITS 12 /* 4 KiB Pages */
|
||||||
#define NB_MMU_MODES 4
|
/*
|
||||||
|
* The current MMU Modes are:
|
||||||
|
* - U mode 0b000
|
||||||
|
* - S mode 0b001
|
||||||
|
* - M mode 0b011
|
||||||
|
* - U mode HLV/HLVX/HSV 0b100
|
||||||
|
* - S mode HLV/HLVX/HSV 0b101
|
||||||
|
* - M mode HLV/HLVX/HSV 0b111
|
||||||
|
*/
|
||||||
|
#define NB_MMU_MODES 8
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -363,7 +363,9 @@ void QEMU_NORETURN riscv_raise_exception(CPURISCVState *env,
|
|||||||
target_ulong riscv_cpu_get_fflags(CPURISCVState *env);
|
target_ulong riscv_cpu_get_fflags(CPURISCVState *env);
|
||||||
void riscv_cpu_set_fflags(CPURISCVState *env, target_ulong);
|
void riscv_cpu_set_fflags(CPURISCVState *env, target_ulong);
|
||||||
|
|
||||||
#define TB_FLAGS_MMU_MASK 3
|
#define TB_FLAGS_MMU_MASK 7
|
||||||
|
#define TB_FLAGS_PRIV_MMU_MASK 3
|
||||||
|
#define TB_FLAGS_PRIV_HYP_ACCESS_MASK (1 << 2)
|
||||||
#define TB_FLAGS_MSTATUS_FS MSTATUS_FS
|
#define TB_FLAGS_MSTATUS_FS MSTATUS_FS
|
||||||
|
|
||||||
typedef CPURISCVState CPUArchState;
|
typedef CPURISCVState CPUArchState;
|
||||||
|
@ -323,7 +323,7 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical,
|
|||||||
* (riscv_cpu_do_interrupt) is correct */
|
* (riscv_cpu_do_interrupt) is correct */
|
||||||
MemTxResult res;
|
MemTxResult res;
|
||||||
MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
|
MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
|
||||||
int mode = mmu_idx;
|
int mode = mmu_idx & TB_FLAGS_PRIV_MMU_MASK;
|
||||||
bool use_background = false;
|
bool use_background = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user