]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - arch/powerpc/platforms/powernv/opal.c
powerpc/powernv: Fix boot on Power8 bare metal due to opal_configure_cores()
[mirror_ubuntu-zesty-kernel.git] / arch / powerpc / platforms / powernv / opal.c
index 872df7580a0570d4475bc4d699f7de86af9734ac..26b290c1c91674eeeb05b3067487e7e34433b8a6 100644 (file)
@@ -59,6 +59,8 @@ static struct task_struct *kopald_tsk;
 
 void opal_configure_cores(void)
 {
+       u64 reinit_flags = 0;
+
        /* Do the actual re-init, This will clobber all FPRs, VRs, etc...
         *
         * It will preserve non volatile GPRs and HSPRG0/1. It will
@@ -66,11 +68,24 @@ void opal_configure_cores(void)
         * but it might clobber a bunch.
         */
 #ifdef __BIG_ENDIAN__
-       opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_BE);
+       reinit_flags |= OPAL_REINIT_CPUS_HILE_BE;
 #else
-       opal_reinit_cpus(OPAL_REINIT_CPUS_HILE_LE);
+       reinit_flags |= OPAL_REINIT_CPUS_HILE_LE;
 #endif
 
+       /*
+        * POWER9 always support running hash:
+        *  ie. Host hash  supports  hash guests
+        *      Host radix supports  hash/radix guests
+        */
+       if (early_cpu_has_feature(CPU_FTR_ARCH_300)) {
+               reinit_flags |= OPAL_REINIT_CPUS_MMU_HASH;
+               if (early_radix_enabled())
+                       reinit_flags |= OPAL_REINIT_CPUS_MMU_RADIX;
+       }
+
+       opal_reinit_cpus(reinit_flags);
+
        /* Restore some bits */
        if (cur_cpu_spec->cpu_restore)
                cur_cpu_spec->cpu_restore();
@@ -866,6 +881,17 @@ int opal_error_code(int rc)
        }
 }
 
+void powernv_set_nmmu_ptcr(unsigned long ptcr)
+{
+       int rc;
+
+       if (firmware_has_feature(FW_FEATURE_OPAL)) {
+               rc = opal_nmmu_set_ptcr(-1UL, ptcr);
+               if (rc != OPAL_SUCCESS && rc != OPAL_UNSUPPORTED)
+                       pr_warn("%s: Unable to set nest mmu ptcr\n", __func__);
+       }
+}
+
 EXPORT_SYMBOL_GPL(opal_poll_events);
 EXPORT_SYMBOL_GPL(opal_rtc_read);
 EXPORT_SYMBOL_GPL(opal_rtc_write);