From: Edgar E. Iglesias Date: Mon, 5 Jul 2010 08:24:56 +0000 (+0200) Subject: cris: Dont clobber the MMU state across calls to cpu_get_phys_page_debug. X-Git-Tag: TizenStudio_2.0_p2.3.2~208^2~7465 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3c4fe427edc88b04bd528351f5ce1c8a2e14f5f8;p=sdk%2Femulator%2Fqemu.git cris: Dont clobber the MMU state across calls to cpu_get_phys_page_debug. Signed-off-by: Edgar E. Iglesias --- diff --git a/target-cris/helper.c b/target-cris/helper.c index 240bda0..19c3755 100644 --- a/target-cris/helper.c +++ b/target-cris/helper.c @@ -248,9 +248,26 @@ void do_interrupt(CPUState *env) target_phys_addr_t cpu_get_phys_page_debug(CPUState * env, target_ulong addr) { uint32_t phy = addr; + uint32_t r_cause, r_tlb_sel, rand_lfsr; struct cris_mmu_result res; int miss; + + /* Save MMU state. */ + r_tlb_sel = env->sregs[SFR_RW_MM_TLB_SEL]; + r_cause = env->sregs[SFR_R_MM_CAUSE]; + rand_lfsr = env->mmu_rand_lfsr; + miss = cris_mmu_translate(&res, env, addr, 0, 0); + /* If D TLB misses, try I TLB. */ + if (miss) { + miss = cris_mmu_translate(&res, env, addr, 2, 0); + } + + /* Restore MMU state. */ + env->sregs[SFR_RW_MM_TLB_SEL] = r_tlb_sel; + env->sregs[SFR_R_MM_CAUSE] = r_cause; + env->mmu_rand_lfsr = rand_lfsr; + if (!miss) phy = res.phy; D(fprintf(stderr, "%s %x -> %x\n", __func__, addr, phy));