]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
powerpc/book3s64/pkeys: Use PVR check instead of cpu feature
authorAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Thu, 9 Jul 2020 03:29:24 +0000 (08:59 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Aug 2020 06:23:56 +0000 (08:23 +0200)
[ Upstream commit d79e7a5f26f1d179cbb915a8bf2469b6d7431c29 ]

We are wrongly using CPU_FTRS_POWER8 to check for P8 support. Instead, we should
use PVR value. Now considering we are using CPU_FTRS_POWER8, that
implies we returned true for P9 with older firmware. Keep the same behavior
by checking for P9 PVR value.

Fixes: cf43d3b26452 ("powerpc: Enable pkey subsystem")
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200709032946.881753-2-aneesh.kumar@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/powerpc/mm/book3s64/pkeys.c

index 268ce9581676a2eddac1d4ccbcd6360c6db19b94..fa237c8c161f7f1155a0eb0e28236862a38e9dc3 100644 (file)
@@ -83,13 +83,17 @@ static int pkey_initialize(void)
        scan_pkey_feature();
 
        /*
-        * Let's assume 32 pkeys on P8 bare metal, if its not defined by device
-        * tree. We make this exception since skiboot forgot to expose this
-        * property on power8.
+        * Let's assume 32 pkeys on P8/P9 bare metal, if its not defined by device
+        * tree. We make this exception since some version of skiboot forgot to
+        * expose this property on power8/9.
         */
-       if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR) &&
-                       cpu_has_feature(CPU_FTRS_POWER8))
-               pkeys_total = 32;
+       if (!pkeys_devtree_defined && !firmware_has_feature(FW_FEATURE_LPAR)) {
+               unsigned long pvr = mfspr(SPRN_PVR);
+
+               if (PVR_VER(pvr) == PVR_POWER8 || PVR_VER(pvr) == PVR_POWER8E ||
+                   PVR_VER(pvr) == PVR_POWER8NVL || PVR_VER(pvr) == PVR_POWER9)
+                       pkeys_total = 32;
+       }
 
        /*
         * Adjust the upper limit, based on the number of bits supported by