target-ppc: QOM'ify CPU reset
Move code from cpu_state_reset() into ppc_cpu_reset(). Reorder #include of helper_regs.h to use it in translate_init.c. Adjust whitespace and add braces. Signed-off-by: Andreas Färber <afaerber@suse.de> Acked-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
6cca7ad686
commit
a138954205
@ -3138,50 +3138,7 @@ void cpu_dump_rfi (target_ulong RA, target_ulong msr)
|
|||||||
|
|
||||||
void cpu_state_reset(CPUPPCState *env)
|
void cpu_state_reset(CPUPPCState *env)
|
||||||
{
|
{
|
||||||
target_ulong msr;
|
cpu_reset(ENV_GET_CPU(env));
|
||||||
|
|
||||||
if (qemu_loglevel_mask(CPU_LOG_RESET)) {
|
|
||||||
qemu_log("CPU Reset (CPU %d)\n", env->cpu_index);
|
|
||||||
log_cpu_state(env, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
msr = (target_ulong)0;
|
|
||||||
if (0) {
|
|
||||||
/* XXX: find a suitable condition to enable the hypervisor mode */
|
|
||||||
msr |= (target_ulong)MSR_HVB;
|
|
||||||
}
|
|
||||||
msr |= (target_ulong)0 << MSR_AP; /* TO BE CHECKED */
|
|
||||||
msr |= (target_ulong)0 << MSR_SA; /* TO BE CHECKED */
|
|
||||||
msr |= (target_ulong)1 << MSR_EP;
|
|
||||||
#if defined (DO_SINGLE_STEP) && 0
|
|
||||||
/* Single step trace mode */
|
|
||||||
msr |= (target_ulong)1 << MSR_SE;
|
|
||||||
msr |= (target_ulong)1 << MSR_BE;
|
|
||||||
#endif
|
|
||||||
#if defined(CONFIG_USER_ONLY)
|
|
||||||
msr |= (target_ulong)1 << MSR_FP; /* Allow floating point usage */
|
|
||||||
msr |= (target_ulong)1 << MSR_VR; /* Allow altivec usage */
|
|
||||||
msr |= (target_ulong)1 << MSR_SPE; /* Allow SPE usage */
|
|
||||||
msr |= (target_ulong)1 << MSR_PR;
|
|
||||||
#else
|
|
||||||
env->excp_prefix = env->hreset_excp_prefix;
|
|
||||||
env->nip = env->hreset_vector | env->excp_prefix;
|
|
||||||
if (env->mmu_model != POWERPC_MMU_REAL)
|
|
||||||
ppc_tlb_invalidate_all(env);
|
|
||||||
#endif
|
|
||||||
env->msr = msr & env->msr_mask;
|
|
||||||
#if defined(TARGET_PPC64)
|
|
||||||
if (env->mmu_model & POWERPC_MMU_64)
|
|
||||||
env->msr |= (1ULL << MSR_SF);
|
|
||||||
#endif
|
|
||||||
hreg_compute_hflags(env);
|
|
||||||
env->reserve_addr = (target_ulong)-1ULL;
|
|
||||||
/* Be sure no exception or interrupt is pending */
|
|
||||||
env->pending_interrupts = 0;
|
|
||||||
env->exception_index = POWERPC_EXCP_NONE;
|
|
||||||
env->error_code = 0;
|
|
||||||
/* Flush all TLBs */
|
|
||||||
tlb_flush(env, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CPUPPCState *cpu_ppc_init (const char *cpu_model)
|
CPUPPCState *cpu_ppc_init (const char *cpu_model)
|
||||||
|
@ -9306,8 +9306,8 @@ GEN_SPEOP_LDST(evstwwe, 0x1C, 2),
|
|||||||
GEN_SPEOP_LDST(evstwwo, 0x1E, 2),
|
GEN_SPEOP_LDST(evstwwo, 0x1E, 2),
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "translate_init.c"
|
|
||||||
#include "helper_regs.h"
|
#include "helper_regs.h"
|
||||||
|
#include "translate_init.c"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Misc PowerPC helpers */
|
/* Misc PowerPC helpers */
|
||||||
|
@ -10211,10 +10211,54 @@ static void ppc_cpu_reset(CPUState *s)
|
|||||||
PowerPCCPU *cpu = POWERPC_CPU(s);
|
PowerPCCPU *cpu = POWERPC_CPU(s);
|
||||||
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
|
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
|
||||||
CPUPPCState *env = &cpu->env;
|
CPUPPCState *env = &cpu->env;
|
||||||
|
target_ulong msr;
|
||||||
|
|
||||||
|
if (qemu_loglevel_mask(CPU_LOG_RESET)) {
|
||||||
|
qemu_log("CPU Reset (CPU %d)\n", env->cpu_index);
|
||||||
|
log_cpu_state(env, 0);
|
||||||
|
}
|
||||||
|
|
||||||
pcc->parent_reset(s);
|
pcc->parent_reset(s);
|
||||||
|
|
||||||
cpu_state_reset(env);
|
msr = (target_ulong)0;
|
||||||
|
if (0) {
|
||||||
|
/* XXX: find a suitable condition to enable the hypervisor mode */
|
||||||
|
msr |= (target_ulong)MSR_HVB;
|
||||||
|
}
|
||||||
|
msr |= (target_ulong)0 << MSR_AP; /* TO BE CHECKED */
|
||||||
|
msr |= (target_ulong)0 << MSR_SA; /* TO BE CHECKED */
|
||||||
|
msr |= (target_ulong)1 << MSR_EP;
|
||||||
|
#if defined(DO_SINGLE_STEP) && 0
|
||||||
|
/* Single step trace mode */
|
||||||
|
msr |= (target_ulong)1 << MSR_SE;
|
||||||
|
msr |= (target_ulong)1 << MSR_BE;
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_USER_ONLY)
|
||||||
|
msr |= (target_ulong)1 << MSR_FP; /* Allow floating point usage */
|
||||||
|
msr |= (target_ulong)1 << MSR_VR; /* Allow altivec usage */
|
||||||
|
msr |= (target_ulong)1 << MSR_SPE; /* Allow SPE usage */
|
||||||
|
msr |= (target_ulong)1 << MSR_PR;
|
||||||
|
#else
|
||||||
|
env->excp_prefix = env->hreset_excp_prefix;
|
||||||
|
env->nip = env->hreset_vector | env->excp_prefix;
|
||||||
|
if (env->mmu_model != POWERPC_MMU_REAL) {
|
||||||
|
ppc_tlb_invalidate_all(env);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
env->msr = msr & env->msr_mask;
|
||||||
|
#if defined(TARGET_PPC64)
|
||||||
|
if (env->mmu_model & POWERPC_MMU_64) {
|
||||||
|
env->msr |= (1ULL << MSR_SF);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
hreg_compute_hflags(env);
|
||||||
|
env->reserve_addr = (target_ulong)-1ULL;
|
||||||
|
/* Be sure no exception or interrupt is pending */
|
||||||
|
env->pending_interrupts = 0;
|
||||||
|
env->exception_index = POWERPC_EXCP_NONE;
|
||||||
|
env->error_code = 0;
|
||||||
|
/* Flush all TLBs */
|
||||||
|
tlb_flush(env, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ppc_cpu_initfn(Object *obj)
|
static void ppc_cpu_initfn(Object *obj)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user