From 3a5a9dd6cd5861c3ac6a90f9ee733ec54c034879 Mon Sep 17 00:00:00 2001 From: Artyom Tarasenko Date: Thu, 1 Mar 2018 21:13:34 -0500 Subject: [PATCH] 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". Backports commit 84f8f5876628963e67f66edde8a71208c4274ac8 from qemu --- qemu/target-sparc/cpu.h | 7 +++---- qemu/target-sparc/translate.c | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/qemu/target-sparc/cpu.h b/qemu/target-sparc/cpu.h index b56ade30..d97f65b4 100644 --- a/qemu/target-sparc/cpu.h +++ b/qemu/target-sparc/cpu.h @@ -226,7 +226,7 @@ enum { #if !defined(TARGET_SPARC64) #define NB_MMU_MODES 3 #else -#define NB_MMU_MODES 7 +#define NB_MMU_MODES 6 typedef struct trap_state { uint64_t tpc; uint64_t tnpc; @@ -676,8 +676,7 @@ static inline CPUSPARCState *cpu_init(struct uc_struct *uc, const char *cpu_mode #define MMU_KERNEL_IDX 2 #define MMU_KERNEL_SECONDARY_IDX 3 #define MMU_NUCLEUS_IDX 4 -#define MMU_HYPV_IDX 5 -#define MMU_PHYS_IDX 6 +#define MMU_PHYS_IDX 5 #else #define MMU_USER_IDX 0 #define MMU_KERNEL_IDX 1 @@ -723,7 +722,7 @@ static inline int cpu_mmu_index(CPUSPARCState *env, bool ifetch) : (env->lsu & DMMU_E) == 0) { return MMU_PHYS_IDX; } else if (cpu_hypervisor_mode(env)) { - return MMU_HYPV_IDX; + return MMU_PHYS_IDX; } else if (env->tl > 0) { return MMU_NUCLEUS_IDX; } else if (cpu_supervisor_mode(env)) { diff --git a/qemu/target-sparc/translate.c b/qemu/target-sparc/translate.c index 50470f2c..bf658e54 100644 --- a/qemu/target-sparc/translate.c +++ b/qemu/target-sparc/translate.c @@ -2293,7 +2293,7 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop) case ASI_NUCLEUS_QUAD_LDD: case ASI_NUCLEUS_QUAD_LDD_L: if (hypervisor(dc)) { - mem_idx = MMU_HYPV_IDX; + mem_idx = MMU_PHYS_IDX; } else { mem_idx = MMU_NUCLEUS_IDX; }