mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-21 12:53:01 +00:00
target/ppc: Make hash64_opts field mandatory for 64-bit hash MMUs
Currently some cpus set the hash64_opts field in the class structure, with specific details of their variant of the 64-bit hash mmu. For the remaining cpus with that mmu, ppc_hash64_realize() fills in defaults. But there are only a couple of cpus that use those fallbacks, so just have them to set the has64_opts field instead, simplifying the logic. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Greg Kurz <groug@kaod.org>
This commit is contained in:
parent
b07c59f7c8
commit
21e405f1ec
@ -1100,25 +1100,12 @@ void ppc_hash64_init(PowerPCCPU *cpu)
|
||||
CPUPPCState *env = &cpu->env;
|
||||
PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
|
||||
|
||||
if (pcc->hash64_opts) {
|
||||
cpu->hash64_opts = g_memdup(pcc->hash64_opts,
|
||||
sizeof(*cpu->hash64_opts));
|
||||
} else if (env->mmu_model & POWERPC_MMU_64) {
|
||||
/* Use default sets of page sizes. We don't support MPSS */
|
||||
static const PPCHash64Options defopts = {
|
||||
.sps = {
|
||||
{ .page_shift = 12, /* 4K */
|
||||
.slb_enc = 0,
|
||||
.enc = { { .page_shift = 12, .pte_enc = 0 } }
|
||||
},
|
||||
{ .page_shift = 24, /* 16M */
|
||||
.slb_enc = 0x100,
|
||||
.enc = { { .page_shift = 24, .pte_enc = 0 } }
|
||||
},
|
||||
},
|
||||
};
|
||||
cpu->hash64_opts = g_memdup(&defopts, sizeof(*cpu->hash64_opts));
|
||||
if (!pcc->hash64_opts) {
|
||||
assert(!(env->mmu_model & POWERPC_MMU_64));
|
||||
return;
|
||||
}
|
||||
|
||||
cpu->hash64_opts = g_memdup(pcc->hash64_opts, sizeof(*cpu->hash64_opts));
|
||||
}
|
||||
|
||||
void ppc_hash64_finalize(PowerPCCPU *cpu)
|
||||
@ -1126,6 +1113,19 @@ void ppc_hash64_finalize(PowerPCCPU *cpu)
|
||||
g_free(cpu->hash64_opts);
|
||||
}
|
||||
|
||||
const PPCHash64Options ppc_hash64_opts_basic = {
|
||||
.sps = {
|
||||
{ .page_shift = 12, /* 4K */
|
||||
.slb_enc = 0,
|
||||
.enc = { { .page_shift = 12, .pte_enc = 0 } }
|
||||
},
|
||||
{ .page_shift = 24, /* 16M */
|
||||
.slb_enc = 0x100,
|
||||
.enc = { { .page_shift = 24, .pte_enc = 0 } }
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const PPCHash64Options ppc_hash64_opts_POWER7 = {
|
||||
.sps = {
|
||||
{
|
||||
|
@ -156,6 +156,7 @@ struct PPCHash64Options {
|
||||
PPCHash64SegmentPageSizes sps[PPC_PAGE_SIZES_MAX_SZ];
|
||||
};
|
||||
|
||||
extern const PPCHash64Options ppc_hash64_opts_basic;
|
||||
extern const PPCHash64Options ppc_hash64_opts_POWER7;
|
||||
|
||||
#endif /* CONFIG_USER_ONLY */
|
||||
|
@ -8242,6 +8242,7 @@ POWERPC_FAMILY(970)(ObjectClass *oc, void *data)
|
||||
pcc->mmu_model = POWERPC_MMU_64B;
|
||||
#if defined(CONFIG_SOFTMMU)
|
||||
pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault;
|
||||
pcc->hash64_opts = &ppc_hash64_opts_basic;
|
||||
#endif
|
||||
pcc->excp_model = POWERPC_EXCP_970;
|
||||
pcc->bus_model = PPC_FLAGS_INPUT_970;
|
||||
@ -8319,6 +8320,7 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data)
|
||||
pcc->mmu_model = POWERPC_MMU_2_03;
|
||||
#if defined(CONFIG_SOFTMMU)
|
||||
pcc->handle_mmu_fault = ppc_hash64_handle_mmu_fault;
|
||||
pcc->hash64_opts = &ppc_hash64_opts_basic;
|
||||
#endif
|
||||
pcc->excp_model = POWERPC_EXCP_970;
|
||||
pcc->bus_model = PPC_FLAGS_INPUT_970;
|
||||
|
Loading…
x
Reference in New Issue
Block a user