target-sparc: use direct address translation in hyperprivileged mode
Please note that QEMU doesn't impelement Real->Physical address translation. The "Real Address" is always the "Physical Address". Suggested-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Artyom Tarasenko <atar4qemu@gmail.com>
This commit is contained in:
parent
5c65df364a
commit
84f8f58766
@ -230,7 +230,7 @@ enum {
|
|||||||
#if !defined(TARGET_SPARC64)
|
#if !defined(TARGET_SPARC64)
|
||||||
#define NB_MMU_MODES 3
|
#define NB_MMU_MODES 3
|
||||||
#else
|
#else
|
||||||
#define NB_MMU_MODES 7
|
#define NB_MMU_MODES 6
|
||||||
typedef struct trap_state {
|
typedef struct trap_state {
|
||||||
uint64_t tpc;
|
uint64_t tpc;
|
||||||
uint64_t tnpc;
|
uint64_t tnpc;
|
||||||
@ -676,8 +676,7 @@ int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc);
|
|||||||
#define MMU_KERNEL_IDX 2
|
#define MMU_KERNEL_IDX 2
|
||||||
#define MMU_KERNEL_SECONDARY_IDX 3
|
#define MMU_KERNEL_SECONDARY_IDX 3
|
||||||
#define MMU_NUCLEUS_IDX 4
|
#define MMU_NUCLEUS_IDX 4
|
||||||
#define MMU_HYPV_IDX 5
|
#define MMU_PHYS_IDX 5
|
||||||
#define MMU_PHYS_IDX 6
|
|
||||||
#else
|
#else
|
||||||
#define MMU_USER_IDX 0
|
#define MMU_USER_IDX 0
|
||||||
#define MMU_KERNEL_IDX 1
|
#define MMU_KERNEL_IDX 1
|
||||||
@ -723,7 +722,7 @@ static inline int cpu_mmu_index(CPUSPARCState *env, bool ifetch)
|
|||||||
: (env->lsu & DMMU_E) == 0) {
|
: (env->lsu & DMMU_E) == 0) {
|
||||||
return MMU_PHYS_IDX;
|
return MMU_PHYS_IDX;
|
||||||
} else if (cpu_hypervisor_mode(env)) {
|
} else if (cpu_hypervisor_mode(env)) {
|
||||||
return MMU_HYPV_IDX;
|
return MMU_PHYS_IDX;
|
||||||
} else if (env->tl > 0) {
|
} else if (env->tl > 0) {
|
||||||
return MMU_NUCLEUS_IDX;
|
return MMU_NUCLEUS_IDX;
|
||||||
} else if (cpu_supervisor_mode(env)) {
|
} else if (cpu_supervisor_mode(env)) {
|
||||||
|
@ -2143,7 +2143,7 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
|
|||||||
case ASI_NUCLEUS_QUAD_LDD:
|
case ASI_NUCLEUS_QUAD_LDD:
|
||||||
case ASI_NUCLEUS_QUAD_LDD_L:
|
case ASI_NUCLEUS_QUAD_LDD_L:
|
||||||
if (hypervisor(dc)) {
|
if (hypervisor(dc)) {
|
||||||
mem_idx = MMU_HYPV_IDX;
|
mem_idx = MMU_PHYS_IDX;
|
||||||
} else {
|
} else {
|
||||||
mem_idx = MMU_NUCLEUS_IDX;
|
mem_idx = MMU_NUCLEUS_IDX;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user