The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
@ 2025-02-27  3:51 Anshuman Khandual
  2025-03-11 17:17 ` Catalin Marinas
  0 siblings, 1 reply; 4+ messages in thread
From: Anshuman Khandual @ 2025-02-27  3:51 UTC (permalink / raw)
  To: linux-arm-kernel, catalin.marinas, mark.rutland, robh
  Cc: Anshuman Khandual, Will Deacon, Jonathan Corbet, Marc Zyngier,
	Oliver Upton, linux-doc, linux-kernel, kvmarm, stable

FEAT_PMUv3p9 registers such as PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1
access from EL1 requires appropriate EL2 fine grained trap configuration
via FEAT_FGT2 based trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2.
Otherwise such register accesses will result in traps into EL2.

Add a new helper __init_el2_fgt2() which initializes FEAT_FGT2 based fine
grained trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2 (setting the
bits nPMICNTR_EL0, nPMICFILTR_EL0 and nPMUACR_EL1) to enable access into
PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1 registers.

Also update booting.rst with SCR_EL3.FGTEn2 requirement for all FEAT_FGT2
based registers to be accessible in EL2.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: kvmarm@lists.linux.dev
Fixes: 0bbff9ed8165 ("perf/arm_pmuv3: Add PMUv3.9 per counter EL0 access control")
Fixes: d8226d8cfbaf ("perf: arm_pmuv3: Add support for Armv9.4 PMU instruction counter")
Cc: stable@vger.kernel.org
Tested-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
---
Changes in V3:

- Added 'MDCR_EL3.EnPM2 = 0b1' as a booting requirement per Mark
- Added 'Fixes:' and 'CC: stable' tags per Mark

Changes in V2:

https://lore.kernel.org/all/20250203050828.1049370-8-anshuman.khandual@arm.com/

 Documentation/arch/arm64/booting.rst | 22 ++++++++++++++++++++++
 arch/arm64/include/asm/el2_setup.h   | 25 +++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/Documentation/arch/arm64/booting.rst b/Documentation/arch/arm64/booting.rst
index cad6fdc96b98..dee7b6de864f 100644
--- a/Documentation/arch/arm64/booting.rst
+++ b/Documentation/arch/arm64/booting.rst
@@ -288,6 +288,12 @@ Before jumping into the kernel, the following conditions must be met:
 
     - SCR_EL3.FGTEn (bit 27) must be initialised to 0b1.
 
+  For CPUs with the Fine Grained Traps 2 (FEAT_FGT2) extension present:
+
+  - If EL3 is present and the kernel is entered at EL2:
+
+    - SCR_EL3.FGTEn2 (bit 59) must be initialised to 0b1.
+
   For CPUs with support for HCRX_EL2 (FEAT_HCX) present:
 
   - If EL3 is present and the kernel is entered at EL2:
@@ -382,6 +388,22 @@ Before jumping into the kernel, the following conditions must be met:
 
     - SMCR_EL2.EZT0 (bit 30) must be initialised to 0b1.
 
+  For CPUs with the Performance Monitors Extension (FEAT_PMUv3p9):
+
+ - If EL3 is present:
+
+    - MDCR_EL3.EnPM2 (bit 7) must be initialised to 0b1.
+
+ - If the kernel is entered at EL1 and EL2 is present:
+
+    - HDFGRTR2_EL2.nPMICNTR_EL0 (bit 2) must be initialised to 0b1.
+    - HDFGRTR2_EL2.nPMICFILTR_EL0 (bit 3) must be initialised to 0b1.
+    - HDFGRTR2_EL2.nPMUACR_EL1 (bit 4) must be initialised to 0b1.
+
+    - HDFGWTR2_EL2.nPMICNTR_EL0 (bit 2) must be initialised to 0b1.
+    - HDFGWTR2_EL2.nPMICFILTR_EL0 (bit 3) must be initialised to 0b1.
+    - HDFGWTR2_EL2.nPMUACR_EL1 (bit 4) must be initialised to 0b1.
+
   For CPUs with Memory Copy and Memory Set instructions (FEAT_MOPS):
 
   - If the kernel is entered at EL1 and EL2 is present:
diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
index 25e162651750..1a0071faf57e 100644
--- a/arch/arm64/include/asm/el2_setup.h
+++ b/arch/arm64/include/asm/el2_setup.h
@@ -233,6 +233,30 @@
 .Lskip_fgt_\@:
 .endm
 
+.macro __init_el2_fgt2
+	mrs	x1, id_aa64mmfr0_el1
+	ubfx	x1, x1, #ID_AA64MMFR0_EL1_FGT_SHIFT, #4
+	cmp	x1, #ID_AA64MMFR0_EL1_FGT_FGT2
+	b.lt	.Lskip_fgt2_\@
+
+	mov	x0, xzr
+	mrs	x1, id_aa64dfr0_el1
+	ubfx	x1, x1, #ID_AA64DFR0_EL1_PMUVer_SHIFT, #4
+	cmp	x1, #ID_AA64DFR0_EL1_PMUVer_V3P9
+	b.lt	.Lskip_pmuv3p9_\@
+
+	orr	x0, x0, #HDFGRTR2_EL2_nPMICNTR_EL0
+	orr	x0, x0, #HDFGRTR2_EL2_nPMICFILTR_EL0
+	orr	x0, x0, #HDFGRTR2_EL2_nPMUACR_EL1
+.Lskip_pmuv3p9_\@:
+	msr_s   SYS_HDFGRTR2_EL2, x0
+	msr_s   SYS_HDFGWTR2_EL2, x0
+	msr_s   SYS_HFGRTR2_EL2, xzr
+	msr_s   SYS_HFGWTR2_EL2, xzr
+	msr_s   SYS_HFGITR2_EL2, xzr
+.Lskip_fgt2_\@:
+.endm
+
 .macro __init_el2_gcs
 	mrs_s	x1, SYS_ID_AA64PFR1_EL1
 	ubfx	x1, x1, #ID_AA64PFR1_EL1_GCS_SHIFT, #4
@@ -283,6 +307,7 @@
 	__init_el2_nvhe_idregs
 	__init_el2_cptr
 	__init_el2_fgt
+	__init_el2_fgt2
         __init_el2_gcs
 .endm
 
-- 
2.25.1


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

* Re: [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
  2025-02-27  3:51 [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9 Anshuman Khandual
@ 2025-03-11 17:17 ` Catalin Marinas
  2025-03-12  3:46   ` Anshuman Khandual
  0 siblings, 1 reply; 4+ messages in thread
From: Catalin Marinas @ 2025-03-11 17:17 UTC (permalink / raw)
  To: linux-arm-kernel, mark.rutland, robh, Anshuman Khandual
  Cc: Will Deacon, Jonathan Corbet, Marc Zyngier, Oliver Upton,
	linux-doc, linux-kernel, kvmarm, stable

On Thu, 27 Feb 2025 09:21:19 +0530, Anshuman Khandual wrote:
> FEAT_PMUv3p9 registers such as PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1
> access from EL1 requires appropriate EL2 fine grained trap configuration
> via FEAT_FGT2 based trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2.
> Otherwise such register accesses will result in traps into EL2.
> 
> Add a new helper __init_el2_fgt2() which initializes FEAT_FGT2 based fine
> grained trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2 (setting the
> bits nPMICNTR_EL0, nPMICFILTR_EL0 and nPMUACR_EL1) to enable access into
> PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1 registers.
> 
> [...]

Applied to arm64 (for-next/el2-enable-feat-pmuv3p9), thanks!

[1/1] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
      https://git.kernel.org/arm64/c/858c7bfcb35e

I removed Cc: stable since, if it gets backported automatically, it will
miss the sysreg updates and break the build. Please send it to stable
directly once it lands upstream, together with the dependencies.

-- 
Catalin


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

* Re: [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
  2025-03-11 17:17 ` Catalin Marinas
@ 2025-03-12  3:46   ` Anshuman Khandual
  2025-04-29  5:37     ` Anshuman Khandual
  0 siblings, 1 reply; 4+ messages in thread
From: Anshuman Khandual @ 2025-03-12  3:46 UTC (permalink / raw)
  To: Catalin Marinas, linux-arm-kernel, mark.rutland, robh
  Cc: Will Deacon, Jonathan Corbet, Marc Zyngier, Oliver Upton,
	linux-doc, linux-kernel, kvmarm, stable



On 3/11/25 22:47, Catalin Marinas wrote:
> On Thu, 27 Feb 2025 09:21:19 +0530, Anshuman Khandual wrote:
>> FEAT_PMUv3p9 registers such as PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1
>> access from EL1 requires appropriate EL2 fine grained trap configuration
>> via FEAT_FGT2 based trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2.
>> Otherwise such register accesses will result in traps into EL2.
>>
>> Add a new helper __init_el2_fgt2() which initializes FEAT_FGT2 based fine
>> grained trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2 (setting the
>> bits nPMICNTR_EL0, nPMICFILTR_EL0 and nPMUACR_EL1) to enable access into
>> PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1 registers.
>>
>> [...]
> 
> Applied to arm64 (for-next/el2-enable-feat-pmuv3p9), thanks!
> 
> [1/1] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
>       https://git.kernel.org/arm64/c/858c7bfcb35e
> 
> I removed Cc: stable since, if it gets backported automatically, it will
> miss the sysreg updates and break the build. Please send it to stable
> directly once it lands upstream, together with the dependencies.

Sure, will do that.

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

* Re: [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
  2025-03-12  3:46   ` Anshuman Khandual
@ 2025-04-29  5:37     ` Anshuman Khandual
  0 siblings, 0 replies; 4+ messages in thread
From: Anshuman Khandual @ 2025-04-29  5:37 UTC (permalink / raw)
  To: Catalin Marinas, linux-arm-kernel, mark.rutland, robh
  Cc: Will Deacon, Jonathan Corbet, Marc Zyngier, Oliver Upton,
	linux-doc, linux-kernel, kvmarm, stable



On 3/12/25 09:16, Anshuman Khandual wrote:
> 
> 
> On 3/11/25 22:47, Catalin Marinas wrote:
>> On Thu, 27 Feb 2025 09:21:19 +0530, Anshuman Khandual wrote:
>>> FEAT_PMUv3p9 registers such as PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1
>>> access from EL1 requires appropriate EL2 fine grained trap configuration
>>> via FEAT_FGT2 based trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2.
>>> Otherwise such register accesses will result in traps into EL2.
>>>
>>> Add a new helper __init_el2_fgt2() which initializes FEAT_FGT2 based fine
>>> grained trap control registers HDFGRTR2_EL2 and HDFGWTR2_EL2 (setting the
>>> bits nPMICNTR_EL0, nPMICFILTR_EL0 and nPMUACR_EL1) to enable access into
>>> PMICNTR_EL0, PMICFILTR_EL0, and PMUACR_EL1 registers.
>>>
>>> [...]
>>
>> Applied to arm64 (for-next/el2-enable-feat-pmuv3p9), thanks!
>>
>> [1/1] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9
>>       https://git.kernel.org/arm64/c/858c7bfcb35e
>>
>> I removed Cc: stable since, if it gets backported automatically, it will
>> miss the sysreg updates and break the build. Please send it to stable
>> directly once it lands upstream, together with the dependencies.
> 
> Sure, will do that.
> 

Just FYI,

This patch along with required tools sysreg patches are merged in applicable
stable branches which are now available in v6.12.25 and v6.14.4 respectively.

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

end of thread, other threads:[~2025-04-29  5:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-27  3:51 [PATCH V3] arm64/boot: Enable EL2 requirements for FEAT_PMUv3p9 Anshuman Khandual
2025-03-11 17:17 ` Catalin Marinas
2025-03-12  3:46   ` Anshuman Khandual
2025-04-29  5:37     ` Anshuman Khandual

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