summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target-microblaze/mmu.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/target-microblaze/mmu.c b/target-microblaze/mmu.c
index 72d318384..d14373ce4 100644
--- a/target-microblaze/mmu.c
+++ b/target-microblaze/mmu.c
@@ -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);