On Tue, Feb 15, 2022 at 06:41:24PM -0300, Fabiano Rosas wrote: > The top level init_proc calls register_generic_sprs but also registers > some other SPRs outside of that function. Let's group everything into > a single place. > > Signed-off-by: Fabiano Rosas <faro...@linux.ibm.com>
Reviewed-by: David Gibson <da...@gibson.dropbear.id.au> Of course the SVR probably doesn't belong in this generic function, but that can be a later cleanup. > --- > target/ppc/cpu_init.c | 58 ++++++++++++++++++++++++------------------- > 1 file changed, 32 insertions(+), 26 deletions(-) > > diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c > index 7488001385..5dc097f2fc 100644 > --- a/target/ppc/cpu_init.c > +++ b/target/ppc/cpu_init.c > @@ -150,8 +150,11 @@ static void _spr_register(CPUPPCState *env, int num, > const char *name, > oea_read, oea_write, 0, ival) > > /* Generic PowerPC SPRs */ > -static void register_generic_sprs(CPUPPCState *env) > +static void register_generic_sprs(PowerPCCPU *cpu) > { > + PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); > + CPUPPCState *env = &cpu->env; > + > /* Integer processing */ > spr_register(env, SPR_XER, "XER", > &spr_read_xer, &spr_write_xer, > @@ -192,6 +195,32 @@ static void register_generic_sprs(CPUPPCState *env) > SPR_NOACCESS, SPR_NOACCESS, > &spr_read_generic, &spr_write_generic, > 0x00000000); > + > + spr_register(env, SPR_PVR, "PVR", > + /* Linux permits userspace to read PVR */ > +#if defined(CONFIG_LINUX_USER) > + &spr_read_generic, > +#else > + SPR_NOACCESS, > +#endif > + SPR_NOACCESS, > + &spr_read_generic, SPR_NOACCESS, > + pcc->pvr); > + > + /* Register SVR if it's defined to anything else than POWERPC_SVR_NONE */ > + if (pcc->svr != POWERPC_SVR_NONE) { > + if (pcc->svr & POWERPC_SVR_E500) { > + spr_register(env, SPR_E500_SVR, "SVR", > + SPR_NOACCESS, SPR_NOACCESS, > + &spr_read_generic, SPR_NOACCESS, > + pcc->svr & ~POWERPC_SVR_E500); > + } else { > + spr_register(env, SPR_SVR, "SVR", > + SPR_NOACCESS, SPR_NOACCESS, > + &spr_read_generic, SPR_NOACCESS, > + pcc->svr); > + } > + } > } > > /* SPR common to all non-embedded PowerPC, including 601 */ > @@ -7241,31 +7270,8 @@ static void init_ppc_proc(PowerPCCPU *cpu) > env->tlb_type = TLB_NONE; > #endif > /* Register SPR common to all PowerPC implementations */ > - register_generic_sprs(env); > - spr_register(env, SPR_PVR, "PVR", > - /* Linux permits userspace to read PVR */ > -#if defined(CONFIG_LINUX_USER) > - &spr_read_generic, > -#else > - SPR_NOACCESS, > -#endif > - SPR_NOACCESS, > - &spr_read_generic, SPR_NOACCESS, > - pcc->pvr); > - /* Register SVR if it's defined to anything else than POWERPC_SVR_NONE */ > - if (pcc->svr != POWERPC_SVR_NONE) { > - if (pcc->svr & POWERPC_SVR_E500) { > - spr_register(env, SPR_E500_SVR, "SVR", > - SPR_NOACCESS, SPR_NOACCESS, > - &spr_read_generic, SPR_NOACCESS, > - pcc->svr & ~POWERPC_SVR_E500); > - } else { > - spr_register(env, SPR_SVR, "SVR", > - SPR_NOACCESS, SPR_NOACCESS, > - &spr_read_generic, SPR_NOACCESS, > - pcc->svr); > - } > - } > + register_generic_sprs(cpu); > + > /* PowerPC implementation specific initialisations (SPRs, timers, ...) */ > (*pcc->init_proc)(env); > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature