]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors
authorAmit Machhiwal <amachhiw@linux.ibm.com>
Sun, 14 Jun 2026 17:34:37 +0000 (23:04 +0530)
committerMadhavan Srinivasan <maddy@linux.ibm.com>
Wed, 15 Jul 2026 02:34:13 +0000 (08:04 +0530)
When using device tree CPU features (dt-cpu-ftrs), the kernel bypasses
the traditional cputable-based CPU identification and instead derives
CPU features from the device tree's "ibm,powerpc-cpu-features" node
provided by firmware.

However, CPU_FTR_P11_PVR is a kernel-internal feature flag used to
identify Power11 and later processors, and is not represented in the
device tree's ISA feature set. While ISA v3.1 support (indicated by
CPU_FTR_ARCH_31) is present on both Power10 and Power11, the
CPU_FTR_P11_PVR flag is specifically needed by code that must
distinguish between Power10 and Power11 processors.

Without this flag set, code that checks for Power11 using
cpu_has_feature(CPU_FTR_P11_PVR) will incorrectly return false on
Power11+ systems using dt-cpu-ftrs, leading to incorrect behavior.

This issue manifests specifically in powernv environments (bare-metal
or QEMU TCG with powernv machine type), where skiboot/OPAL firmware
provides the "ibm,powerpc-cpu-features" node, causing the kernel to
use dt-cpu-ftrs. The issue does not affect pseries guests, where SLOF
firmware does not provide this node, causing the kernel to fall back
to the traditional cputable path (identify_cpu) which correctly sets
CPU_FTR_P11_PVR during PVR-based CPU identification.

In powernv TCG guests, the missing flag causes KVM code to trigger
warnings when attempting to create KVM guests, as cpu_features shows
0x000c00eb8f4fb187 (missing bit 53) instead of the correct
0x002c00eb8f4fb187 (with bit 53 set).

Fix this by setting CPU_FTR_P11_PVR for all processors with
PVR >= PVR_POWER11 when ISA v3.1 support is detected in
cpufeatures_setup_start(). This approach ensures forward
compatibility with future processor generations.

Fixes: 96e266e3bcd6 ("KVM: PPC: Book3S HV: Add Power11 capability support for Nested PAPR guests")
Cc: stable@vger.kernel.org # v6.13+
Signed-off-by: Amit Machhiwal <amachhiw@linux.ibm.com>
Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
Reviewed-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20260614173437.26352-1-amachhiw@linux.ibm.com
arch/powerpc/kernel/dt_cpu_ftrs.c

index 3af6c06af02f31f6927ee18866d208fcff8fc51c..e5853daa6a486ade5c41797824365662dada015f 100644 (file)
@@ -704,6 +704,15 @@ static void __init cpufeatures_setup_start(u32 isa)
        if (isa >= ISA_V3_1) {
                cur_cpu_spec->cpu_features |= CPU_FTR_ARCH_31;
                cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_ARCH_3_1;
+
+               /*
+                * CPU_FTR_P11_PVR is a kernel-internal flag to identify
+                * Power11 and later processors. While ISA v3.1 is supported
+                * by Power10+, this flag specifically indicates Power11+
+                * for code that needs to distinguish between P10 and P11.
+                */
+               if (PVR_VER(mfspr(SPRN_PVR)) >= PVR_POWER11)
+                       cur_cpu_spec->cpu_features |= CPU_FTR_P11_PVR;
        }
 }