diff mbox

[v0] spapr: Restore support for 970MP and POWER8NVL CPU cores

Message ID 1467200246-32708-1-git-send-email-bharata@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bharata B Rao June 29, 2016, 11:37 a.m. UTC
Introduction of core based CPU hotplug for PowerPC sPAPR didn't
add support for 970MP and POWER8NVL based core types. Add support for
the same.

While we are here, add support for explicit specification of POWER5+_v2.1
core type.

Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
---
 hw/ppc/spapr_cpu_core.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

Comments

Thomas Huth June 29, 2016, 12:28 p.m. UTC | #1
On 29.06.2016 13:37, Bharata B Rao wrote:
> Introduction of core based CPU hotplug for PowerPC sPAPR didn't
> add support for 970MP and POWER8NVL based core types. Add support for
> the same.
> 
> While we are here, add support for explicit specification of POWER5+_v2.1
> core type.
> 
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr_cpu_core.c | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
> index 2aa0dc5..e30b159 100644
> --- a/hw/ppc/spapr_cpu_core.c
> +++ b/hw/ppc/spapr_cpu_core.c
> @@ -337,12 +337,15 @@ static void glue(glue(spapr_cpu_core_, _fname), _initfn(Object *obj)) \
>      core->cpu_class = oc; \
>  }
>  
> +SPAPR_CPU_CORE_INITFN(970mp_v1.0, 970MP_v10);
> +SPAPR_CPU_CORE_INITFN(970mp_v1.1, 970MP_v11);
>  SPAPR_CPU_CORE_INITFN(970_v2.2, 970);
>  SPAPR_CPU_CORE_INITFN(POWER5+_v2.1, POWER5plus);
>  SPAPR_CPU_CORE_INITFN(POWER7_v2.3, POWER7);
>  SPAPR_CPU_CORE_INITFN(POWER7+_v2.1, POWER7plus);
>  SPAPR_CPU_CORE_INITFN(POWER8_v2.0, POWER8);
>  SPAPR_CPU_CORE_INITFN(POWER8E_v2.1, POWER8E);
> +SPAPR_CPU_CORE_INITFN(POWER8NVL_v1.0, POWER8NVL);
>  
>  typedef struct SPAPRCoreInfo {
>      const char *name;
> @@ -350,10 +353,19 @@ typedef struct SPAPRCoreInfo {
>  } SPAPRCoreInfo;
>  
>  static const SPAPRCoreInfo spapr_cores[] = {
> -    /* 970 */
> +    /* 970 and aliaes */
> +    { .name = "970_v2.2", .initfn = spapr_cpu_core_970_initfn },
>      { .name = "970", .initfn = spapr_cpu_core_970_initfn },
>  
> -    /* POWER5 */
> +    /* 970MP variants and aliases */
> +    { .name = "970MP_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> +    { .name = "970mp_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> +    { .name = "970MP_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> +    { .name = "970mp_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> +    { .name = "970mp", .initfn = spapr_cpu_core_970MP_v11_initfn },

Are the upper-case "970MP_v1.1" and "970MP_v1.0" lines required here?
According to target-ppc/cpu-models.c, these CPU models are always
spelled with lower-case letters in QEMU, aren't they?

 Thomas
Bharata B Rao June 29, 2016, 1:33 p.m. UTC | #2
On Wed, Jun 29, 2016 at 02:28:08PM +0200, Thomas Huth wrote:
> On 29.06.2016 13:37, Bharata B Rao wrote:
> > Introduction of core based CPU hotplug for PowerPC sPAPR didn't
> > add support for 970MP and POWER8NVL based core types. Add support for
> > the same.
> > 
> > While we are here, add support for explicit specification of POWER5+_v2.1
> > core type.
> > 
> > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> > ---
> >  hw/ppc/spapr_cpu_core.c | 20 ++++++++++++++++++--
> >  1 file changed, 18 insertions(+), 2 deletions(-)
> > 
> > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
> > index 2aa0dc5..e30b159 100644
> > --- a/hw/ppc/spapr_cpu_core.c
> > +++ b/hw/ppc/spapr_cpu_core.c
> > @@ -337,12 +337,15 @@ static void glue(glue(spapr_cpu_core_, _fname), _initfn(Object *obj)) \
> >      core->cpu_class = oc; \
> >  }
> >  
> > +SPAPR_CPU_CORE_INITFN(970mp_v1.0, 970MP_v10);
> > +SPAPR_CPU_CORE_INITFN(970mp_v1.1, 970MP_v11);
> >  SPAPR_CPU_CORE_INITFN(970_v2.2, 970);
> >  SPAPR_CPU_CORE_INITFN(POWER5+_v2.1, POWER5plus);
> >  SPAPR_CPU_CORE_INITFN(POWER7_v2.3, POWER7);
> >  SPAPR_CPU_CORE_INITFN(POWER7+_v2.1, POWER7plus);
> >  SPAPR_CPU_CORE_INITFN(POWER8_v2.0, POWER8);
> >  SPAPR_CPU_CORE_INITFN(POWER8E_v2.1, POWER8E);
> > +SPAPR_CPU_CORE_INITFN(POWER8NVL_v1.0, POWER8NVL);
> >  
> >  typedef struct SPAPRCoreInfo {
> >      const char *name;
> > @@ -350,10 +353,19 @@ typedef struct SPAPRCoreInfo {
> >  } SPAPRCoreInfo;
> >  
> >  static const SPAPRCoreInfo spapr_cores[] = {
> > -    /* 970 */
> > +    /* 970 and aliaes */
> > +    { .name = "970_v2.2", .initfn = spapr_cpu_core_970_initfn },
> >      { .name = "970", .initfn = spapr_cpu_core_970_initfn },
> >  
> > -    /* POWER5 */
> > +    /* 970MP variants and aliases */
> > +    { .name = "970MP_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> > +    { .name = "970mp_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> > +    { .name = "970MP_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> > +    { .name = "970mp_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> > +    { .name = "970mp", .initfn = spapr_cpu_core_970MP_v11_initfn },
> 
> Are the upper-case "970MP_v1.1" and "970MP_v1.0" lines required here?
> According to target-ppc/cpu-models.c, these CPU models are always
> spelled with lower-case letters in QEMU, aren't they?

The .name here is used to build the type of spapr-cpu-core based on the
CPU model specified. I saw that we support both

-cpu 970MP_v1.1 and
-cpu 970mp_v1.1

Same for v1.0 (but support only -cpu 970mp and not -cpu 970MP!)

Hence the above lines are needed to register appropriate spapr-cpu-core
types (970mp_v1.1-spapr-cpu-core or 970MP_v1.1-spapr-cpu-core) based on the
CPU model specified.

Regards,
Bharata.
David Gibson June 30, 2016, 12:46 a.m. UTC | #3
On Wed, Jun 29, 2016 at 05:07:26PM +0530, Bharata B Rao wrote:
> Introduction of core based CPU hotplug for PowerPC sPAPR didn't
> add support for 970MP and POWER8NVL based core types. Add support for
> the same.
> 
> While we are here, add support for explicit specification of POWER5+_v2.1
> core type.
> 
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>

Applied to ppc-for-2.7, thanks.

> ---
>  hw/ppc/spapr_cpu_core.c | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
> index 2aa0dc5..e30b159 100644
> --- a/hw/ppc/spapr_cpu_core.c
> +++ b/hw/ppc/spapr_cpu_core.c
> @@ -337,12 +337,15 @@ static void glue(glue(spapr_cpu_core_, _fname), _initfn(Object *obj)) \
>      core->cpu_class = oc; \
>  }
>  
> +SPAPR_CPU_CORE_INITFN(970mp_v1.0, 970MP_v10);
> +SPAPR_CPU_CORE_INITFN(970mp_v1.1, 970MP_v11);
>  SPAPR_CPU_CORE_INITFN(970_v2.2, 970);
>  SPAPR_CPU_CORE_INITFN(POWER5+_v2.1, POWER5plus);
>  SPAPR_CPU_CORE_INITFN(POWER7_v2.3, POWER7);
>  SPAPR_CPU_CORE_INITFN(POWER7+_v2.1, POWER7plus);
>  SPAPR_CPU_CORE_INITFN(POWER8_v2.0, POWER8);
>  SPAPR_CPU_CORE_INITFN(POWER8E_v2.1, POWER8E);
> +SPAPR_CPU_CORE_INITFN(POWER8NVL_v1.0, POWER8NVL);
>  
>  typedef struct SPAPRCoreInfo {
>      const char *name;
> @@ -350,10 +353,19 @@ typedef struct SPAPRCoreInfo {
>  } SPAPRCoreInfo;
>  
>  static const SPAPRCoreInfo spapr_cores[] = {
> -    /* 970 */
> +    /* 970 and aliaes */
> +    { .name = "970_v2.2", .initfn = spapr_cpu_core_970_initfn },
>      { .name = "970", .initfn = spapr_cpu_core_970_initfn },
>  
> -    /* POWER5 */
> +    /* 970MP variants and aliases */
> +    { .name = "970MP_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> +    { .name = "970mp_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
> +    { .name = "970MP_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> +    { .name = "970mp_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
> +    { .name = "970mp", .initfn = spapr_cpu_core_970MP_v11_initfn },
> +
> +    /* POWER5 and aliases */
> +    { .name = "POWER5+_v2.1", .initfn = spapr_cpu_core_POWER5plus_initfn },
>      { .name = "POWER5+", .initfn = spapr_cpu_core_POWER5plus_initfn },
>  
>      /* POWER7 and aliases */
> @@ -373,6 +385,10 @@ static const SPAPRCoreInfo spapr_cores[] = {
>      { .name = "POWER8E_v2.1", .initfn = spapr_cpu_core_POWER8E_initfn },
>      { .name = "POWER8E", .initfn = spapr_cpu_core_POWER8E_initfn },
>  
> +    /* POWER8NVL and aliases */
> +    { .name = "POWER8NVL_v1.0", .initfn = spapr_cpu_core_POWER8NVL_initfn },
> +    { .name = "POWER8NVL", .initfn = spapr_cpu_core_POWER8NVL_initfn },
> +
>      { .name = NULL }
>  };
>
diff mbox

Patch

diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 2aa0dc5..e30b159 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -337,12 +337,15 @@  static void glue(glue(spapr_cpu_core_, _fname), _initfn(Object *obj)) \
     core->cpu_class = oc; \
 }
 
+SPAPR_CPU_CORE_INITFN(970mp_v1.0, 970MP_v10);
+SPAPR_CPU_CORE_INITFN(970mp_v1.1, 970MP_v11);
 SPAPR_CPU_CORE_INITFN(970_v2.2, 970);
 SPAPR_CPU_CORE_INITFN(POWER5+_v2.1, POWER5plus);
 SPAPR_CPU_CORE_INITFN(POWER7_v2.3, POWER7);
 SPAPR_CPU_CORE_INITFN(POWER7+_v2.1, POWER7plus);
 SPAPR_CPU_CORE_INITFN(POWER8_v2.0, POWER8);
 SPAPR_CPU_CORE_INITFN(POWER8E_v2.1, POWER8E);
+SPAPR_CPU_CORE_INITFN(POWER8NVL_v1.0, POWER8NVL);
 
 typedef struct SPAPRCoreInfo {
     const char *name;
@@ -350,10 +353,19 @@  typedef struct SPAPRCoreInfo {
 } SPAPRCoreInfo;
 
 static const SPAPRCoreInfo spapr_cores[] = {
-    /* 970 */
+    /* 970 and aliaes */
+    { .name = "970_v2.2", .initfn = spapr_cpu_core_970_initfn },
     { .name = "970", .initfn = spapr_cpu_core_970_initfn },
 
-    /* POWER5 */
+    /* 970MP variants and aliases */
+    { .name = "970MP_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
+    { .name = "970mp_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn },
+    { .name = "970MP_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
+    { .name = "970mp_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn },
+    { .name = "970mp", .initfn = spapr_cpu_core_970MP_v11_initfn },
+
+    /* POWER5 and aliases */
+    { .name = "POWER5+_v2.1", .initfn = spapr_cpu_core_POWER5plus_initfn },
     { .name = "POWER5+", .initfn = spapr_cpu_core_POWER5plus_initfn },
 
     /* POWER7 and aliases */
@@ -373,6 +385,10 @@  static const SPAPRCoreInfo spapr_cores[] = {
     { .name = "POWER8E_v2.1", .initfn = spapr_cpu_core_POWER8E_initfn },
     { .name = "POWER8E", .initfn = spapr_cpu_core_POWER8E_initfn },
 
+    /* POWER8NVL and aliases */
+    { .name = "POWER8NVL_v1.0", .initfn = spapr_cpu_core_POWER8NVL_initfn },
+    { .name = "POWER8NVL", .initfn = spapr_cpu_core_POWER8NVL_initfn },
+
     { .name = NULL }
 };