mirror of https://gitee.com/openkylin/qemu.git
target/ppc: Fix test on mmu_model in hreg_compute_hflags_value()
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. Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20220124081609.3672341-1-clg@kaod.org> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
1977434bbf
commit
63f38cc3d2
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue