qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] target/ppc: Fix test on mmu_model in hreg_compute_hflags_val


From: Cédric Le Goater
Subject: Re: [PATCH] target/ppc: Fix test on mmu_model in hreg_compute_hflags_value()
Date: Mon, 24 Jan 2022 10:43:25 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0

On 1/24/22 09:16, Cédric Le Goater wrote:
POWERPC_MMU_BOOKE is not a mask and should not be tested with a
bitwise AND operator.

It went unnoticed because it only impacts the 601 CPU implementation
for which we don't have a known firmware image.

I forgot to change that. There is one here :

  https://github.com/artyom-tarasenko/openfirmware

image :

  
https://github.com/artyom-tarasenko/openfirmware/releases/download/40p-20190413/q40pofw-serial.rom

Thanks,

C.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
  target/ppc/helper_regs.c | 6 ++++--
  1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c
index 7dca585dddeb..5b12cb03c961 100644
--- a/target/ppc/helper_regs.c
+++ b/target/ppc/helper_regs.c
@@ -156,7 +156,8 @@ static uint32_t hreg_compute_hflags_value(CPUPPCState *env)
       */
      unsigned immu_idx, dmmu_idx;
      dmmu_idx = msr & (1 << MSR_PR) ? 0 : 1;
-    if (env->mmu_model & POWERPC_MMU_BOOKE) {
+    if (env->mmu_model == POWERPC_MMU_BOOKE ||
+        env->mmu_model == POWERPC_MMU_BOOKE206) {
          dmmu_idx |= msr & (1 << MSR_GS) ? 4 : 0;
          immu_idx = dmmu_idx;
          immu_idx |= msr & (1 << MSR_IS) ? 2 : 0;
@@ -237,7 +238,8 @@ int hreg_store_msr(CPUPPCState *env, target_ulong value, 
int alter_hv)
          ((value >> MSR_DR) & 1) != msr_dr) {
          cpu_interrupt_exittb(cs);
      }
-    if ((env->mmu_model & POWERPC_MMU_BOOKE) &&
+    if ((env->mmu_model == POWERPC_MMU_BOOKE ||
+         env->mmu_model == POWERPC_MMU_BOOKE206) &&
          ((value >> MSR_GS) & 1) != msr_gs) {
          cpu_interrupt_exittb(cs);
      }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]