LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors
@ 2026-06-14 17:34 Amit Machhiwal
  2026-06-16  5:26 ` Mukesh Kumar Chaurasiya
  2026-06-16  5:39 ` Christophe Leroy (CS GROUP)
  0 siblings, 2 replies; 4+ messages in thread
From: Amit Machhiwal @ 2026-06-14 17:34 UTC (permalink / raw)
  To: linuxppc-dev, Madhavan Srinivasan
  Cc: Amit Machhiwal, Vaibhav Jain, Harsh Prateek Bora, Ritesh Harjani,
	Anushree Mathur, Gautam Menghani, Nicholas Piggin,
	Michael Ellerman, Christophe Leroy (CS GROUP), stable,
	linux-kernel

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>
---
Related: https://lore.kernel.org/all/20260609053327.61563-1-amachhiw@linux.ibm.com/
---

 arch/powerpc/kernel/dt_cpu_ftrs.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 3af6c06af02f..e5853daa6a48 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -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;
 	}
 }
 

base-commit: 424280953322cf66314f3ba5e2d1ef345f21c770
-- 
2.50.1 (Apple Git-155)



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors
  2026-06-14 17:34 [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors Amit Machhiwal
@ 2026-06-16  5:26 ` Mukesh Kumar Chaurasiya
  2026-06-16  5:39 ` Christophe Leroy (CS GROUP)
  1 sibling, 0 replies; 4+ messages in thread
From: Mukesh Kumar Chaurasiya @ 2026-06-16  5:26 UTC (permalink / raw)
  To: Amit Machhiwal
  Cc: linuxppc-dev, Madhavan Srinivasan, Vaibhav Jain,
	Harsh Prateek Bora, Ritesh Harjani, Anushree Mathur,
	Gautam Menghani, Nicholas Piggin, Michael Ellerman,
	Christophe Leroy (CS GROUP), stable, linux-kernel

On Sun, Jun 14, 2026 at 11:04:37PM +0530, Amit Machhiwal wrote:
> 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>
> ---
> Related: https://lore.kernel.org/all/20260609053327.61563-1-amachhiw@linux.ibm.com/
> ---
> 
>  arch/powerpc/kernel/dt_cpu_ftrs.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
> index 3af6c06af02f..e5853daa6a48 100644
> --- a/arch/powerpc/kernel/dt_cpu_ftrs.c
> +++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
> @@ -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;
>  	}
>  }
>  
> 
> base-commit: 424280953322cf66314f3ba5e2d1ef345f21c770
> -- 
> 2.50.1 (Apple Git-155)
> 
LGTM

Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors
  2026-06-14 17:34 [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors Amit Machhiwal
  2026-06-16  5:26 ` Mukesh Kumar Chaurasiya
@ 2026-06-16  5:39 ` Christophe Leroy (CS GROUP)
  2026-06-16  6:38   ` Amit Machhiwal
  1 sibling, 1 reply; 4+ messages in thread
From: Christophe Leroy (CS GROUP) @ 2026-06-16  5:39 UTC (permalink / raw)
  To: Amit Machhiwal, linuxppc-dev, Madhavan Srinivasan
  Cc: Vaibhav Jain, Harsh Prateek Bora, Ritesh Harjani, Anushree Mathur,
	Gautam Menghani, Nicholas Piggin, Michael Ellerman, stable,
	linux-kernel



Le 14/06/2026 à 19:34, Amit Machhiwal a écrit :
> 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>
> ---
> Related: https://lore.kernel.org/all/20260609053327.61563-1-amachhiw@linux.ibm.com/
> ---
> 
>   arch/powerpc/kernel/dt_cpu_ftrs.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
> index 3af6c06af02f..e5853daa6a48 100644
> --- a/arch/powerpc/kernel/dt_cpu_ftrs.c
> +++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
> @@ -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)

Are we sure this test will always be correct ?

For instance PVR_PA6T is higher than PVR_POWER11 allthough it is not ISA 3.1

Wouldn't is be cleaner and safer to just do:

	PVR_VER(mfspr(SPRN_PVR)) == PVR_POWER11

> +			cur_cpu_spec->cpu_features |= CPU_FTR_P11_PVR;
>   	}
>   }
>   
> 
> base-commit: 424280953322cf66314f3ba5e2d1ef345f21c770



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors
  2026-06-16  5:39 ` Christophe Leroy (CS GROUP)
@ 2026-06-16  6:38   ` Amit Machhiwal
  0 siblings, 0 replies; 4+ messages in thread
From: Amit Machhiwal @ 2026-06-16  6:38 UTC (permalink / raw)
  To: Christophe Leroy (CS GROUP)
  Cc: Amit Machhiwal, linuxppc-dev, Madhavan Srinivasan, Vaibhav Jain,
	Harsh Prateek Bora, Ritesh Harjani, Anushree Mathur,
	Gautam Menghani, Nicholas Piggin, Michael Ellerman, stable,
	linux-kernel

Hi Christophe,

Thanks for reviewing this patch. Please find my response inline.

On 2026/06/16 07:39 AM, Christophe Leroy (CS GROUP) wrote:
> 
> 
> Le 14/06/2026 à 19:34, Amit Machhiwal a écrit :
> > 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>
> > ---
> > Related: https://lore.kernel.org/all/20260609053327.61563-1-amachhiw@linux.ibm.com/
> > ---
> > 
> >   arch/powerpc/kernel/dt_cpu_ftrs.c | 9 +++++++++
> >   1 file changed, 9 insertions(+)
> > 
> > diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
> > index 3af6c06af02f..e5853daa6a48 100644
> > --- a/arch/powerpc/kernel/dt_cpu_ftrs.c
> > +++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
> > @@ -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)
> 
> Are we sure this test will always be correct ?
> 
> For instance PVR_PA6T is higher than PVR_POWER11 allthough it is not ISA 3.1
> 
> Wouldn't is be cleaner and safer to just do:
> 
> 	PVR_VER(mfspr(SPRN_PVR)) == PVR_POWER11

You're absolutely right to point out the PVR ordering concern. But PA6T
cannot actually reach this path because we're already gated by:

  if (isa >= ISA_V3_1)

and PA6T does not implement ISA v3.1.

My rationale for using `>= PVR_POWER11` is that `CPU_FTR_P11_PVR` is
intended to be included for Power11 and later processors, not just
Power11 itself, as it identifies a CPU feature. Using `== PVR_POWER11`
would mean we'd need to revisit this code for every future generation.

This approach is consistent with existing kernel code. For example, in
arch/powerpc/perf/hv-gpci.c:

  /* sysinfo interface files are only available for power10 and above platforms */
  if (PVR_VER(mfspr(SPRN_PVR)) >= PVR_POWER10)
      add_sysinfo_interface_files();

Also, I couldn't find any current users of `PVR_PA6T` or `PVR_BE` in the
kernel tree, so there doesn't appear to be a present-day ISA v3.1+
example where the comparison would misidentify a processor.

Please let me know your further thoughts on this.

Thanks,
Amit

> 
> > +			cur_cpu_spec->cpu_features |= CPU_FTR_P11_PVR;
> >   	}
> >   }
> > 
> > base-commit: 424280953322cf66314f3ba5e2d1ef345f21c770
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-16  6:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-14 17:34 [PATCH] powerpc/dt_cpu_ftrs: Set CPU_FTR_P11_PVR for Power11 and later processors Amit Machhiwal
2026-06-16  5:26 ` Mukesh Kumar Chaurasiya
2026-06-16  5:39 ` Christophe Leroy (CS GROUP)
2026-06-16  6:38   ` Amit Machhiwal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox