[PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for SPE/FP/AltiVec int numbers
mihai.caraman at freescale.com
mihai.caraman at freescale.com
Mon Jul 28 18:54:04 EST 2014
> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Saturday, July 26, 2014 3:11 AM
> To: Caraman Mihai Claudiu-B02008
> Cc: Alexander Graf; kvm-ppc at vger.kernel.org; kvm at vger.kernel.org;
> linuxppc-dev at lists.ozlabs.org
> Subject: Re: [PATCH 1/6 v2] KVM: PPC: Book3E: Use common defines for
> SPE/FP/AltiVec int numbers
>
> On Thu, 2014-07-24 at 04:16 -0500, Caraman Mihai Claudiu-B02008 wrote:
> > Scott, Alex's request to define SPE handlers only for e500v2 implies
> changes
> > in 32-bit FSL kernel to have exclusive configurations for e200/e500v2
> and
> > e500mc/e5500. We would probably need something like this, what's your
> take on it?
>
> That is already a compile-time decision.
Yes, but is not fully implemented.
>
> > diff --git a/arch/powerpc/kernel/head_fsl_booke.S
> b/arch/powerpc/kernel/head_fsl_booke.S
> > index b497188..9d41015 100644
> > --- a/arch/powerpc/kernel/head_fsl_booke.S
> > +++ b/arch/powerpc/kernel/head_fsl_booke.S
> > @@ -613,6 +613,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
> > mfspr r10, SPRN_SPRG_RSCRATCH0
> > b InstructionStorage
> >
> > +/* Define SPE handlers only for e500v2 and e200 */
> > +#ifndef CONFIG_PPC_E500MC
> > #ifdef CONFIG_SPE
> > /* SPE Unavailable */
> > START_EXCEPTION(SPEUnavailable)
> > @@ -626,7 +628,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
> > EXCEPTION(0x2020, SPE_ALTIVEC_UNAVAIL, SPEUnavailable, \
> > unknown_exception, EXC_XFER_EE)
> > #endif /* CONFIG_SPE */
> > +#endif
>
> This is redundant:
>
> config SPE
> bool "SPE Support"
> depends on E200 || (E500 && !PPC_E500MC)
> default y
I see what you mean, but it's not redundant. Alex was looking to remove SPE
handlers for e500mc+ and the proposal handled !SPE case. In the new
light I find this variant more readable:
+/* Define SPE handlers for e200 and e500v2 */
#ifdef CONFIG_SPE
/* SPE Unavailable */
START_EXCEPTION(SPEUnavailable)
@@ -622,11 +623,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV)
b fast_exception_return
1: addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_EE_LITE(0x2010, KernelSPE)
-#else
+#elif defined(CONFIG_E200) || \
+ (defined(CONFIG_E500) && !defined(CONFIG_PPC_E500MC))
EXCEPTION(0x2020, SPE_ALTIVEC_UNAVAIL, SPEUnavailable, \
unknown_exception, EXC_XFER_EE)
#endif /* CONFIG_SPE */
>
> > diff --git a/arch/powerpc/kernel/cputable.c
> b/arch/powerpc/kernel/cputable.c
> > index c1faade..3ab65c2 100644
> > --- a/arch/powerpc/kernel/cputable.c
> > +++ b/arch/powerpc/kernel/cputable.c
> > @@ -2030,6 +2030,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
> > #endif /* CONFIG_PPC32 */
> > #ifdef CONFIG_E500
> > #ifdef CONFIG_PPC32
> > +#ifndef CONFIG_PPC_E500MC
> > { /* e500 */
> > .pvr_mask = 0xffff0000,
> > .pvr_value = 0x80200000,
> > @@ -2069,6 +2070,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
> > .machine_check = machine_check_e500,
> > .platform = "ppc8548",
> > },
> > +#endif /* !CONFIG_PPC_E500MC */
> > { /* e500mc */
> > .pvr_mask = 0xffff0000,
> > .pvr_value = 0x80230000,
> >
>
> This looks a bit strange -- e500v2 gets excluded if PPC_E500MC, but
> e500mc gets included in !PPC_E500MC?
Right, my main purpose was to get rid of __setup_e500_ivors on PPC_E500MC
which refers SPEUnavailable. I will add an #else to exclude e500mc.
The "generic E500 PPC" default cpu advertises PPC_FEATURE_HAS_SPE_COMP.
Do we want to excluded it if PPC_E500MC? Is this cpu useful without cpu_setup()
and if so why don't we also have a default for 64-bit?
-Mike
More information about the Linuxppc-dev
mailing list