microblaze: Make writes to MMU_ZPR flush the TLB.
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Tue, 26 May 2009 23:19:58 +0000 (01:19 +0200)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Tue, 26 May 2009 23:19:58 +0000 (01:19 +0200)
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>

target-microblaze/mmu.c

index 72d3183..d14373c 100644 (file)
@@ -220,6 +220,13 @@ void mmu_write(CPUState *env, uint32_t rn, uint32_t v)
             D(qemu_log("%s ram[%d][%d]=%x\n", __func__, rn & 1, i, v));
             break;
         case MMU_R_ZPR:
+            /* Changes to the zone protection reg flush the QEMU TLB.
+               Fortunately, these are very uncommon.  */
+            if (v != env->mmu.regs[rn]) {
+                tlb_flush(env, 1);
+            }
+            env->mmu.regs[rn] = v;
+            break;
         case MMU_R_PID:
             if (v != env->mmu.regs[rn]) {
                 mmu_change_pid(env, v);