diff mbox

[2/3] hw/ppc/spapr: Fix the selection of the processor features

Message ID 1475061390-17644-3-git-send-email-thuth@redhat.com
State New
Headers show

Commit Message

Thomas Huth Sept. 28, 2016, 11:16 a.m. UTC
The current code uses pa_features_206 for POWERPC_MMU_2_06, and
for everything else, it uses pa_features_207. This is bad in some
cases because there is also a "degraded" MMU version of ISA 2.06,
called POWERPC_MMU_2_06a, which should of course use the flags for
2.06 instead. And there is also the possibility that the user runs
the pseries machine with a POWER5+ or even 970 processor. In that
case we certainly do not want to set the flags for 2.07, and rather
simply skip the setting of the pa-features property instead.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 hw/ppc/spapr.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Comments

Cédric Le Goater Sept. 28, 2016, 1:30 p.m. UTC | #1
On 09/28/2016 01:16 PM, Thomas Huth wrote:
> The current code uses pa_features_206 for POWERPC_MMU_2_06, and
> for everything else, it uses pa_features_207. This is bad in some
> cases because there is also a "degraded" MMU version of ISA 2.06,
> called POWERPC_MMU_2_06a, which should of course use the flags for
> 2.06 instead. And there is also the possibility that the user runs
> the pseries machine with a POWER5+ or even 970 processor. In that
> case we certainly do not want to set the flags for 2.07, and rather
> simply skip the setting of the pa-features property instead.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>

Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.

> ---
>  hw/ppc/spapr.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 7ac775d..46d6b90 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -559,12 +559,19 @@ static void spapr_populate_pa_features(CPUPPCState *env, void *fdt, int offset)
>      uint8_t *pa_features;
>      size_t pa_size;
>  
> -    if (env->mmu_model == POWERPC_MMU_2_06) {
> +    switch (env->mmu_model) {
> +    case POWERPC_MMU_2_06:
> +    case POWERPC_MMU_2_06a:
>          pa_features = pa_features_206;
>          pa_size = sizeof(pa_features_206);
> -    } else { /* env->mmu_model == POWERPC_MMU_2_07 */
> +        break;
> +    case POWERPC_MMU_2_07:
> +    case POWERPC_MMU_2_07a:
>          pa_features = pa_features_207;
>          pa_size = sizeof(pa_features_207);
> +        break;
> +    default:
> +        return;
>      }
>  
>      if (env->ci_large_pages) {
>
diff mbox

Patch

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 7ac775d..46d6b90 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -559,12 +559,19 @@  static void spapr_populate_pa_features(CPUPPCState *env, void *fdt, int offset)
     uint8_t *pa_features;
     size_t pa_size;
 
-    if (env->mmu_model == POWERPC_MMU_2_06) {
+    switch (env->mmu_model) {
+    case POWERPC_MMU_2_06:
+    case POWERPC_MMU_2_06a:
         pa_features = pa_features_206;
         pa_size = sizeof(pa_features_206);
-    } else { /* env->mmu_model == POWERPC_MMU_2_07 */
+        break;
+    case POWERPC_MMU_2_07:
+    case POWERPC_MMU_2_07a:
         pa_features = pa_features_207;
         pa_size = sizeof(pa_features_207);
+        break;
+    default:
+        return;
     }
 
     if (env->ci_large_pages) {