target/ppc: Remove the unusable e200 CPUs
There is currently no machine in QEMU (except the "none" machine) that can be run with with one of the e200 ppc CPUs - all machines either complain about an invalid CPU type or crash QEMU immediately. Looking at the history of this CPU type, it seems like it has never been used in QEMU and only implemented as a placeholder (see e.g. the comment about unimplemented instructions in the POWERPC_FAMILY(e200) section of cpu_init.c). Being completely unused and unusable since such a long time, let's just remove it now (without deprecation phase, since there were no users of this dead code anyway). Note: The init_excp_e200() is used by the e500 CPUs, too, so we rename this function to init_excp_e500() instead of removing it. Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Link: https://lore.kernel.org/r/20251024065726.738005-3-thuth@redhat.com Message-ID: <20251024065726.738005-3-thuth@redhat.com>
This commit is contained in:
parent
14e4390a32
commit
984432c505
3 changed files with 2 additions and 154 deletions
|
|
@ -244,11 +244,6 @@
|
|||
CPU_POWERPC_MPC5200B_v20, POWERPC_SVR_5200B_v20, G2LE)
|
||||
POWERPC_DEF_SVR("mpc5200b_v21", "MPC5200B v2.1",
|
||||
CPU_POWERPC_MPC5200B_v21, POWERPC_SVR_5200B_v21, G2LE)
|
||||
/* e200 family */
|
||||
POWERPC_DEF("e200z5", CPU_POWERPC_e200z5, e200,
|
||||
"PowerPC e200z5 core")
|
||||
POWERPC_DEF("e200z6", CPU_POWERPC_e200z6, e200,
|
||||
"PowerPC e200z6 core")
|
||||
/* e300 family */
|
||||
POWERPC_DEF("e300c1", CPU_POWERPC_e300c1, e300,
|
||||
"PowerPC e300c1 core")
|
||||
|
|
|
|||
|
|
@ -120,10 +120,6 @@ enum {
|
|||
#define CPU_POWERPC_MPC5200_v12 CPU_POWERPC_G2LEgp1
|
||||
#define CPU_POWERPC_MPC5200B_v20 CPU_POWERPC_G2LEgp1
|
||||
#define CPU_POWERPC_MPC5200B_v21 CPU_POWERPC_G2LEgp1
|
||||
/* e200 family */
|
||||
/* e200 cores */
|
||||
CPU_POWERPC_e200z5 = 0x81000000,
|
||||
CPU_POWERPC_e200z6 = 0x81120000,
|
||||
/* e300 family */
|
||||
/* e300 cores */
|
||||
CPU_POWERPC_e300c1 = 0x00830010,
|
||||
|
|
|
|||
|
|
@ -1811,7 +1811,7 @@ static void init_excp_G2(CPUPPCState *env)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void init_excp_e200(CPUPPCState *env, target_ulong ivpr_mask)
|
||||
static void init_excp_e500(CPUPPCState *env, target_ulong ivpr_mask)
|
||||
{
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000FFC;
|
||||
|
|
@ -2782,149 +2782,6 @@ POWERPC_FAMILY(G2LE)(ObjectClass *oc, const void *data)
|
|||
POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK;
|
||||
}
|
||||
|
||||
static void init_proc_e200(CPUPPCState *env)
|
||||
{
|
||||
register_BookE_sprs(env, 0x000000070000FFFFULL);
|
||||
|
||||
spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",
|
||||
&spr_read_spefscr, &spr_write_spefscr,
|
||||
&spr_read_spefscr, &spr_write_spefscr,
|
||||
0x00000000);
|
||||
/* Memory management */
|
||||
register_BookE206_sprs(env, 0x0000005D, NULL, 0);
|
||||
register_usprgh_sprs(env);
|
||||
|
||||
spr_register(env, SPR_HID0, "HID0",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_HID1, "HID1",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_ALTCTXCR, "ALTCTXCR",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_BUCSR, "BUCSR",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_CTXCR, "CTXCR",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_DBCNT, "DBCNT",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_DBCR3, "DBCR3",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_L1CFG0, "L1CFG0",
|
||||
&spr_read_generic, SPR_NOACCESS,
|
||||
&spr_read_generic, SPR_NOACCESS,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_L1CSR0, "L1CSR0",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_Exxx_L1FINV0, "L1FINV0",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_BOOKE_TLB0CFG, "TLB0CFG",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_BOOKE_TLB1CFG, "TLB1CFG",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_BOOKE_IAC3, "IAC3",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_BOOKE_IAC4, "IAC4",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000);
|
||||
|
||||
spr_register(env, SPR_MMUCSR0, "MMUCSR0",
|
||||
SPR_NOACCESS, SPR_NOACCESS,
|
||||
&spr_read_generic, &spr_write_generic,
|
||||
0x00000000); /* TOFIX */
|
||||
|
||||
init_tlbs_emb(env);
|
||||
init_excp_e200(env, 0xFFFF0000UL);
|
||||
env->dcache_line_size = 32;
|
||||
env->icache_line_size = 32;
|
||||
/* XXX: TODO: allocate internal IRQ controller */
|
||||
}
|
||||
|
||||
POWERPC_FAMILY(e200)(ObjectClass *oc, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
|
||||
|
||||
dc->desc = "e200 core";
|
||||
pcc->init_proc = init_proc_e200;
|
||||
pcc->check_pow = check_pow_hid0;
|
||||
pcc->check_attn = check_attn_none;
|
||||
/*
|
||||
* XXX: unimplemented instructions:
|
||||
* dcblc
|
||||
* dcbtlst
|
||||
* dcbtstls
|
||||
* icblc
|
||||
* icbtls
|
||||
* tlbivax
|
||||
* all SPE multiply-accumulate instructions
|
||||
*/
|
||||
pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL |
|
||||
PPC_SPE | PPC_SPE_SINGLE |
|
||||
PPC_WRTEE | PPC_RFDI |
|
||||
PPC_CACHE | PPC_CACHE_LOCK | PPC_CACHE_ICBI |
|
||||
PPC_CACHE_DCBZ | PPC_CACHE_DCBA |
|
||||
PPC_MEM_TLBSYNC | PPC_TLBIVAX |
|
||||
PPC_BOOKE;
|
||||
pcc->msr_mask = (1ull << MSR_UCLE) |
|
||||
(1ull << MSR_SPE) |
|
||||
(1ull << MSR_POW) |
|
||||
(1ull << MSR_CE) |
|
||||
(1ull << MSR_EE) |
|
||||
(1ull << MSR_PR) |
|
||||
(1ull << MSR_FP) |
|
||||
(1ull << MSR_ME) |
|
||||
(1ull << MSR_FE0) |
|
||||
(1ull << MSR_DWE) |
|
||||
(1ull << MSR_DE) |
|
||||
(1ull << MSR_FE1) |
|
||||
(1ull << MSR_IR) |
|
||||
(1ull << MSR_DR);
|
||||
pcc->mmu_model = POWERPC_MMU_BOOKE206;
|
||||
pcc->excp_model = POWERPC_EXCP_BOOKE;
|
||||
pcc->bus_model = PPC_FLAGS_INPUT_BookE;
|
||||
pcc->bfd_mach = bfd_mach_ppc_860;
|
||||
pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE |
|
||||
POWERPC_FLAG_UBLE | POWERPC_FLAG_DE |
|
||||
POWERPC_FLAG_BUS_CLK;
|
||||
}
|
||||
|
||||
enum fsl_e500_version {
|
||||
fsl_e500v1,
|
||||
fsl_e500v2,
|
||||
|
|
@ -3159,7 +3016,7 @@ static void init_proc_e500(CPUPPCState *env, int version)
|
|||
}
|
||||
#endif
|
||||
|
||||
init_excp_e200(env, ivpr_mask);
|
||||
init_excp_e500(env, ivpr_mask);
|
||||
/* Allocate hardware IRQ controller */
|
||||
ppce500_irq_init(env_archcpu(env));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue