* [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9
@ 2024-10-28 5:34 Anshuman Khandual
2024-10-28 5:34 ` [PATCH V2 1/7] arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 Anshuman Khandual
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw)
To: linux-arm-kernel, linux-kernel
Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton,
James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon,
Mark Brown, Mark Rutland, kvmarm
This series enables FEAT_Debugv8p9 thus extending breakpoint and watchpoint
support upto 64. This series is based on v6.12-rc5 although this depends on
FEAT_FGT2 FGU series posted earlier, for MDSELR_EL1 handling in various KVM
guest configurations.
https://lore.kernel.org/all/20241001024356.1096072-1-anshuman.khandual@arm.com/
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: James Morse <james.morse@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: kvmarm@lists.linux.dev
Cc: linux-kernel@vger.kernel.org
Changes in V2:
Following changes have been made per review comments from Mark Rutland
- Orr MDCR_EL2_EBWE directly without an intermittent register
- Alphabetically order header files in debug-monitors.c
- Dropped embwe_ref_count mechanism
- Dropped preempt_enable() from AARCH64_DBG_READ
- Dropped preempt_disable() from AARCH64_DBG_WRITE
- Dropped set_bank_index()
- Renamed read/write_wb_reg() as __read/__write_wb_reg()
- Modified read/write_wb_reg() to have MDSELR_E1 based banked read/write
- Added required sysreg tools patches from KVM FEAT_FGT2 series for build
Changes in V1:
https://lore.kernel.org/all/20241001043602.1116991-1-anshuman.khandual@arm.com/
- Changed FTR_STRICT to FTR_NONSTRICT for the following ID_AA64DFR1_EL1
register fields - ABL_CMPs, DPFZS, PMICNTR, CTX_CMPs, WRPs and BRPs
Changes in RFC V2:
https://lore.kernel.org/linux-arm-kernel/20240620092607.267132-1-anshuman.khandual@arm.com/
- This series has been split from RFC V1 dealing only with arm64 breakpoints
- Restored back DBG_MDSCR_MASK definition (unrelated change)
- Added preempt_disable()/enable() blocks between selecting banks and registers
Changes in RFC:
https://lore.kernel.org/all/20240405080008.1225223-1-anshuman.khandual@arm.com/
Anshuman Khandual (7):
arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1
arm64/sysreg: Add register fields for MDSELR_EL1
arm64/sysreg: Add register fields for HDFGRTR2_EL2
arm64/sysreg: Add register fields for HDFGWTR2_EL2
arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register
arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9
arm64/hw_breakpoint: Enable FEAT_Debugv8p9
Documentation/arch/arm64/booting.rst | 19 +++++++
arch/arm64/include/asm/debug-monitors.h | 1 +
arch/arm64/include/asm/el2_setup.h | 26 +++++++++
arch/arm64/include/asm/hw_breakpoint.h | 46 ++++++++++++----
arch/arm64/include/asm/kvm_arm.h | 1 +
arch/arm64/kernel/cpufeature.c | 21 ++++++--
arch/arm64/kernel/debug-monitors.c | 15 ++++--
arch/arm64/kernel/hw_breakpoint.c | 38 +++++++++++++-
arch/arm64/tools/sysreg | 70 +++++++++++++++++++++++++
9 files changed, 216 insertions(+), 21 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 15+ messages in thread* [PATCH V2 1/7] arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 2/7] arm64/sysreg: Add register fields for MDSELR_EL1 Anshuman Khandual ` (6 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm This updates ID_AA64MMFR0_EL1 register fields as per the definitions based on DDI0601 2024-09. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Brown <broonie@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Reviewed-by: Mark Brown <broonie@kernel.org> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/tools/sysreg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 8d637ac4b7c6..41b0e54515eb 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -1556,6 +1556,7 @@ EndEnum UnsignedEnum 59:56 FGT 0b0000 NI 0b0001 IMP + 0b0010 FGT2 EndEnum Res0 55:48 UnsignedEnum 47:44 EXS @@ -1617,6 +1618,7 @@ Enum 3:0 PARANGE 0b0100 44 0b0101 48 0b0110 52 + 0b0111 56 EndEnum EndSysreg -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V2 2/7] arm64/sysreg: Add register fields for MDSELR_EL1 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 1/7] arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 3/7] arm64/sysreg: Add register fields for HDFGRTR2_EL2 Anshuman Khandual ` (5 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm This adds register fields for MDSELR_EL1 as per the definitions based on DDI0601 2024-09. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Brown <broonie@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Reviewed-by: Mark Brown <broonie@kernel.org> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/tools/sysreg | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 41b0e54515eb..a92fc241fb4e 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -93,6 +93,17 @@ Res0 63:32 Field 31:0 DTRTX EndSysreg +Sysreg MDSELR_EL1 2 0 0 4 2 +Res0 63:6 +Enum 5:4 BANK + 0b00 BANK_0 + 0b01 BANK_1 + 0b10 BANK_2 + 0b11 BANK_3 +EndEnum +Res0 3:0 +EndSysreg + Sysreg OSECCR_EL1 2 0 0 6 2 Res0 63:32 Field 31:0 EDECCR -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V2 3/7] arm64/sysreg: Add register fields for HDFGRTR2_EL2 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 1/7] arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 2/7] arm64/sysreg: Add register fields for MDSELR_EL1 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 4/7] arm64/sysreg: Add register fields for HDFGWTR2_EL2 Anshuman Khandual ` (4 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm This adds register fields for HDFGRTR2_EL2 as per the definitions based on DDI0601 2024-09. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Brown <broonie@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Reviewed-by: Mark Brown <broonie@kernel.org> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/tools/sysreg | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index a92fc241fb4e..1ee850b3e7a7 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -2476,6 +2476,35 @@ Field 1 ICIALLU Field 0 ICIALLUIS EndSysreg +Sysreg HDFGRTR2_EL2 3 4 3 1 0 +Res0 63:25 +Field 24 nPMBMAR_EL1 +Field 23 nMDSTEPOP_EL1 +Field 22 nTRBMPAM_EL1 +Res0 21 +Field 20 nTRCITECR_EL1 +Field 19 nPMSDSFR_EL1 +Field 18 nSPMDEVAFF_EL1 +Field 17 nSPMID +Field 16 nSPMSCR_EL1 +Field 15 nSPMACCESSR_EL1 +Field 14 nSPMCR_EL0 +Field 13 nSPMOVS +Field 12 nSPMINTEN +Field 11 nSPMCNTEN +Field 10 nSPMSELR_EL0 +Field 9 nSPMEVTYPERn_EL0 +Field 8 nSPMEVCNTRn_EL0 +Field 7 nPMSSCR_EL1 +Field 6 nPMSSDATA +Field 5 nMDSELR_EL1 +Field 4 nPMUACR_EL1 +Field 3 nPMICFILTR_EL0 +Field 2 nPMICNTR_EL0 +Field 1 nPMIAR_EL1 +Field 0 nPMECR_EL1 +EndSysreg + Sysreg HDFGRTR_EL2 3 4 3 1 4 Field 63 PMBIDR_EL1 Field 62 nPMSNEVFR_EL1 -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V2 4/7] arm64/sysreg: Add register fields for HDFGWTR2_EL2 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual ` (2 preceding siblings ...) 2024-10-28 5:34 ` [PATCH V2 3/7] arm64/sysreg: Add register fields for HDFGRTR2_EL2 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register Anshuman Khandual ` (3 subsequent siblings) 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm This adds register fields for HDFGWTR2_EL2 as per the definitions based on DDI0601 2024-09. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Brown <broonie@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Reviewed-by: Mark Brown <broonie@kernel.org> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/tools/sysreg | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg index 1ee850b3e7a7..3e97af013ef7 100644 --- a/arch/arm64/tools/sysreg +++ b/arch/arm64/tools/sysreg @@ -2505,6 +2505,34 @@ Field 1 nPMIAR_EL1 Field 0 nPMECR_EL1 EndSysreg +Sysreg HDFGWTR2_EL2 3 4 3 1 1 +Res0 63:25 +Field 24 nPMBMAR_EL1 +Field 23 nMDSTEPOP_EL1 +Field 22 nTRBMPAM_EL1 +Field 21 nPMZR_EL0 +Field 20 nTRCITECR_EL1 +Field 19 nPMSDSFR_EL1 +Res0 18:17 +Field 16 nSPMSCR_EL1 +Field 15 nSPMACCESSR_EL1 +Field 14 nSPMCR_EL0 +Field 13 nSPMOVS +Field 12 nSPMINTEN +Field 11 nSPMCNTEN +Field 10 nSPMSELR_EL0 +Field 9 nSPMEVTYPERn_EL0 +Field 8 nSPMEVCNTRn_EL0 +Field 7 nPMSSCR_EL1 +Res0 6 +Field 5 nMDSELR_EL1 +Field 4 nPMUACR_EL1 +Field 3 nPMICFILTR_EL0 +Field 2 nPMICNTR_EL0 +Field 1 nPMIAR_EL1 +Field 0 nPMECR_EL1 +EndSysreg + Sysreg HDFGRTR_EL2 3 4 3 1 4 Field 63 PMBIDR_EL1 Field 62 nPMSNEVFR_EL1 -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual ` (3 preceding siblings ...) 2024-10-28 5:34 ` [PATCH V2 4/7] arm64/sysreg: Add register fields for HDFGWTR2_EL2 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-12-10 16:41 ` Will Deacon 2024-10-28 5:34 ` [PATCH V2 6/7] arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9 Anshuman Khandual ` (2 subsequent siblings) 7 siblings, 1 reply; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm This adds required field details for ID_AA64DFR1_EL1, and also drops dummy ftr_raz[] array which is now redundant. These register fields will be used to enable increased breakpoint and watchpoint registers via FEAT_Debugv8p9 later. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> cc: Mark Brown <broonie@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Marc Zyngier <maz@kernel.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/kernel/cpufeature.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 718728a85430..bd4d85f5dd92 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -530,6 +530,21 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { ARM64_FTR_END, }; +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), + ARM64_FTR_END, +}; + static const struct arm64_ftr_bits ftr_mvfr0[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_EL1_FPRound_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_EL1_FPShVec_SHIFT, 4, 0), @@ -708,10 +723,6 @@ static const struct arm64_ftr_bits ftr_single32[] = { ARM64_FTR_END, }; -static const struct arm64_ftr_bits ftr_raz[] = { - ARM64_FTR_END, -}; - #define __ARM64_FTR_REG_OVERRIDE(id_str, id, table, ovr) { \ .sys_id = id, \ .reg = &(struct arm64_ftr_reg){ \ @@ -784,7 +795,7 @@ static const struct __ftr_reg_entry { /* Op1 = 0, CRn = 0, CRm = 5 */ ARM64_FTR_REG(SYS_ID_AA64DFR0_EL1, ftr_id_aa64dfr0), - ARM64_FTR_REG(SYS_ID_AA64DFR1_EL1, ftr_raz), + ARM64_FTR_REG(SYS_ID_AA64DFR1_EL1, ftr_id_aa64dfr1), /* Op1 = 0, CRn = 0, CRm = 6 */ ARM64_FTR_REG(SYS_ID_AA64ISAR0_EL1, ftr_id_aa64isar0), -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-10-28 5:34 ` [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register Anshuman Khandual @ 2024-12-10 16:41 ` Will Deacon 2024-12-10 16:56 ` Mark Rutland 2024-12-11 4:32 ` Anshuman Khandual 0 siblings, 2 replies; 15+ messages in thread From: Will Deacon @ 2024-12-10 16:41 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Mark Brown, Mark Rutland, kvmarm On Mon, Oct 28, 2024 at 11:04:24AM +0530, Anshuman Khandual wrote: > This adds required field details for ID_AA64DFR1_EL1, and also drops dummy > ftr_raz[] array which is now redundant. These register fields will be used > to enable increased breakpoint and watchpoint registers via FEAT_Debugv8p9 > later. > > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > cc: Mark Brown <broonie@kernel.org> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Marc Zyngier <maz@kernel.org> > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > --- > arch/arm64/kernel/cpufeature.c | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > index 718728a85430..bd4d85f5dd92 100644 > --- a/arch/arm64/kernel/cpufeature.c > +++ b/arch/arm64/kernel/cpufeature.c > @@ -530,6 +530,21 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { > ARM64_FTR_END, > }; > > +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), > + ARM64_FTR_END, > +}; I think I mentioned this on an earlier series, but it would be useful to see some justification in the commit message as to why some of these features are considered STRICT vs NONSTRICT and why LOWER_SAFE is preferred over EXACT. For example, why is EBEP strict whereas other PMU-related fields aren't? Why is the CTX_CMPs field treated differently to the same field in DFR0? I'm not saying the above table is wrong, it just looks arbitrary without the justification. Will ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-12-10 16:41 ` Will Deacon @ 2024-12-10 16:56 ` Mark Rutland 2024-12-10 17:05 ` Will Deacon 2024-12-11 4:32 ` Anshuman Khandual 1 sibling, 1 reply; 15+ messages in thread From: Mark Rutland @ 2024-12-10 16:56 UTC (permalink / raw) To: Will Deacon Cc: Anshuman Khandual, linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Mark Brown, kvmarm On Tue, Dec 10, 2024 at 04:41:44PM +0000, Will Deacon wrote: > On Mon, Oct 28, 2024 at 11:04:24AM +0530, Anshuman Khandual wrote: > > +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), > > + ARM64_FTR_END, > > +}; > > I think I mentioned this on an earlier series, but it would be useful to > see some justification in the commit message as to why some of these > features are considered STRICT vs NONSTRICT and why LOWER_SAFE is > preferred over EXACT. > > For example, why is EBEP strict whereas other PMU-related fields aren't? > Why is the CTX_CMPs field treated differently to the same field in DFR0? > > I'm not saying the above table is wrong, it just looks arbitrary without > the justification. FWIW, Anshuman and I discussed that on the v1 thread, after this v2 thread was posted. Anshuman promised to provide some rationale and make some updates in the next version (i.e. v3): https://lore.kernel.org/linux-arm-kernel/8efe902c-8b9f-494a-b9da-430d8ced32ef@arm.com/ Mark. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-12-10 16:56 ` Mark Rutland @ 2024-12-10 17:05 ` Will Deacon 0 siblings, 0 replies; 15+ messages in thread From: Will Deacon @ 2024-12-10 17:05 UTC (permalink / raw) To: Mark Rutland Cc: Anshuman Khandual, linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Mark Brown, kvmarm On Tue, Dec 10, 2024 at 04:56:25PM +0000, Mark Rutland wrote: > On Tue, Dec 10, 2024 at 04:41:44PM +0000, Will Deacon wrote: > > On Mon, Oct 28, 2024 at 11:04:24AM +0530, Anshuman Khandual wrote: > > > +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), > > > + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), > > > + ARM64_FTR_END, > > > +}; > > > > I think I mentioned this on an earlier series, but it would be useful to > > see some justification in the commit message as to why some of these > > features are considered STRICT vs NONSTRICT and why LOWER_SAFE is > > preferred over EXACT. > > > > For example, why is EBEP strict whereas other PMU-related fields aren't? > > Why is the CTX_CMPs field treated differently to the same field in DFR0? > > > > I'm not saying the above table is wrong, it just looks arbitrary without > > the justification. > > FWIW, Anshuman and I discussed that on the v1 thread, after this v2 > thread was posted. Anshuman promised to provide some rationale and make > some updates in the next version (i.e. v3): > > https://lore.kernel.org/linux-arm-kernel/8efe902c-8b9f-494a-b9da-430d8ced32ef@arm.com/ Perfect! I'll wait for the v3, then. Will ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-12-10 16:41 ` Will Deacon 2024-12-10 16:56 ` Mark Rutland @ 2024-12-11 4:32 ` Anshuman Khandual 2024-12-19 15:49 ` Will Deacon 1 sibling, 1 reply; 15+ messages in thread From: Anshuman Khandual @ 2024-12-11 4:32 UTC (permalink / raw) To: Will Deacon Cc: linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Mark Brown, Mark Rutland, kvmarm On 12/10/24 22:11, Will Deacon wrote: > On Mon, Oct 28, 2024 at 11:04:24AM +0530, Anshuman Khandual wrote: >> This adds required field details for ID_AA64DFR1_EL1, and also drops dummy >> ftr_raz[] array which is now redundant. These register fields will be used >> to enable increased breakpoint and watchpoint registers via FEAT_Debugv8p9 >> later. >> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Will Deacon <will@kernel.org> >> cc: Mark Brown <broonie@kernel.org> >> Cc: Mark Rutland <mark.rutland@arm.com> >> Cc: Marc Zyngier <maz@kernel.org> >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linux-kernel@vger.kernel.org >> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> >> --- >> arch/arm64/kernel/cpufeature.c | 21 ++++++++++++++++----- >> 1 file changed, 16 insertions(+), 5 deletions(-) >> >> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c >> index 718728a85430..bd4d85f5dd92 100644 >> --- a/arch/arm64/kernel/cpufeature.c >> +++ b/arch/arm64/kernel/cpufeature.c >> @@ -530,6 +530,21 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { >> ARM64_FTR_END, >> }; >> >> +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), >> + ARM64_FTR_END, >> +}; > > I think I mentioned this on an earlier series, but it would be useful to > see some justification in the commit message as to why some of these > features are considered STRICT vs NONSTRICT and why LOWER_SAFE is > preferred over EXACT. I have updated the commit message regarding STRICT vs NONSTRICT as Mark had mentioned earlier (see below). But just wondering about FTR_LOWER_SAFE. All similar fields have been marked as FTR_LOWER_SAFE. > > For example, why is EBEP strict whereas other PMU-related fields aren't? IIUC there are two types of fields here. - Feature presence (EBEP, ITE, ABLE etc) ---> FTR_STRICT - Debug resource count (WRPs, BRPs, CTX_CMPs etc) ---> FTR_NONSTRICT > Why is the CTX_CMPs field treated differently to the same field in DFR0? There is mismatch not only for CTX_CMPs but for WRPs and BRPs as well. As mentioned earlier, being resource count type, I believe these should be marked as FTR_NONSTRICT in existing DFR0 as well. I could send a patch fixing DFR0 first. > > I'm not saying the above table is wrong, it just looks arbitrary without > the justification. Please find the updated version (v3) for this patch here for reference. -------------- [PATCH] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register This adds required field details for ID_AA64DFR1_EL1, and also drops dummy ftr_raz[] array which is now redundant. These register fields will be used to enable increased breakpoint and watchpoint registers via FEAT_Debugv8p9 later. The register fields have been marked as FTR_STRICT, unless there is a known variation in practice. Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- arch/arm64/kernel/cpufeature.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 6ce71f444ed8..0dc22fde104e 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -534,6 +534,21 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { ARM64_FTR_END, }; +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), + ARM64_FTR_END, +}; + static const struct arm64_ftr_bits ftr_mvfr0[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_EL1_FPRound_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_EL1_FPShVec_SHIFT, 4, 0), @@ -720,10 +735,6 @@ static const struct arm64_ftr_bits ftr_single32[] = { ARM64_FTR_END, }; -static const struct arm64_ftr_bits ftr_raz[] = { - ARM64_FTR_END, -}; - #define __ARM64_FTR_REG_OVERRIDE(id_str, id, table, ovr) { \ .sys_id = id, \ .reg = &(struct arm64_ftr_reg){ \ @@ -796,7 +807,7 @@ static const struct __ftr_reg_entry { /* Op1 = 0, CRn = 0, CRm = 5 */ ARM64_FTR_REG(SYS_ID_AA64DFR0_EL1, ftr_id_aa64dfr0), - ARM64_FTR_REG(SYS_ID_AA64DFR1_EL1, ftr_raz), + ARM64_FTR_REG(SYS_ID_AA64DFR1_EL1, ftr_id_aa64dfr1), /* Op1 = 0, CRn = 0, CRm = 6 */ ARM64_FTR_REG(SYS_ID_AA64ISAR0_EL1, ftr_id_aa64isar0), -- 2.25.1 -------------- Changes in V3: - Updated commit message regarding FTR_STRICT - Updated ID_AA64DFR1_EL1.ABLE as FTR_NONSTRICT ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register 2024-12-11 4:32 ` Anshuman Khandual @ 2024-12-19 15:49 ` Will Deacon 0 siblings, 0 replies; 15+ messages in thread From: Will Deacon @ 2024-12-19 15:49 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Mark Brown, Mark Rutland, kvmarm On Wed, Dec 11, 2024 at 10:02:42AM +0530, Anshuman Khandual wrote: > > > On 12/10/24 22:11, Will Deacon wrote: > > On Mon, Oct 28, 2024 at 11:04:24AM +0530, Anshuman Khandual wrote: > >> This adds required field details for ID_AA64DFR1_EL1, and also drops dummy > >> ftr_raz[] array which is now redundant. These register fields will be used > >> to enable increased breakpoint and watchpoint registers via FEAT_Debugv8p9 > >> later. > >> > >> Cc: Catalin Marinas <catalin.marinas@arm.com> > >> Cc: Will Deacon <will@kernel.org> > >> cc: Mark Brown <broonie@kernel.org> > >> Cc: Mark Rutland <mark.rutland@arm.com> > >> Cc: Marc Zyngier <maz@kernel.org> > >> Cc: linux-arm-kernel@lists.infradead.org > >> Cc: linux-kernel@vger.kernel.org > >> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> > >> --- > >> arch/arm64/kernel/cpufeature.c | 21 ++++++++++++++++----- > >> 1 file changed, 16 insertions(+), 5 deletions(-) > >> > >> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > >> index 718728a85430..bd4d85f5dd92 100644 > >> --- a/arch/arm64/kernel/cpufeature.c > >> +++ b/arch/arm64/kernel/cpufeature.c > >> @@ -530,6 +530,21 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { > >> ARM64_FTR_END, > >> }; > >> > >> +static const struct arm64_ftr_bits ftr_id_aa64dfr1[] = { > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABL_CMPs_SHIFT, 8, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_DPFZS_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_EBEP_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ITE_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_ABLE_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_PMICNTR_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SPMU_SHIFT, 4, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_CTX_CMPs_SHIFT, 8, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_WRPs_SHIFT, 8, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_BRPs_SHIFT, 8, 0), > >> + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64DFR1_EL1_SYSPMUID_SHIFT, 8, 0), > >> + ARM64_FTR_END, > >> +}; > > > > I think I mentioned this on an earlier series, but it would be useful to > > see some justification in the commit message as to why some of these > > features are considered STRICT vs NONSTRICT and why LOWER_SAFE is > > preferred over EXACT. > > I have updated the commit message regarding STRICT vs NONSTRICT as Mark had > mentioned earlier (see below). But just wondering about FTR_LOWER_SAFE. All > similar fields have been marked as FTR_LOWER_SAFE. > > > > > For example, why is EBEP strict whereas other PMU-related fields aren't? > > IIUC there are two types of fields here. > > - Feature presence (EBEP, ITE, ABLE etc) ---> FTR_STRICT > - Debug resource count (WRPs, BRPs, CTX_CMPs etc) ---> FTR_NONSTRICT > > > Why is the CTX_CMPs field treated differently to the same field in DFR0? > > There is mismatch not only for CTX_CMPs but for WRPs and BRPs as well. As > mentioned earlier, being resource count type, I believe these should be > marked as FTR_NONSTRICT in existing DFR0 as well. I could send a patch > fixing DFR0 first. > > > > > I'm not saying the above table is wrong, it just looks arbitrary without > > the justification. > > Please find the updated version (v3) for this patch here for reference. Please send new versions as new threads otherwise it's too easy to lose track. Also, please give the rationale for the handling of each new field in the commit message. Will ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH V2 6/7] arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual ` (4 preceding siblings ...) 2024-10-28 5:34 ` [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 7/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual 2024-12-10 16:59 ` [PATCH V2 0/7] " Mark Rutland 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm, linux-doc Fine grained trap control for MDSELR_EL1 register needs to be configured in HDFGRTR2_EL2, and HDFGWTR2_EL2 registers when kernel enters at EL1, but EL2 is also present. This adds a new helper __init_el2_fgt2() initializing this new FEAT_FGT2 based fine grained registers. MDCR_EL2.EBWE needs to be enabled for additional (beyond 16) breakpoint and watchpoint exceptions when kernel enters at EL1, but EL2 is also present. This updates __init_el2_debug() as required for FEAT_Debugv8p9. While here, also update booting.rst with MDCR_EL3 and SCR_EL3 requirements. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@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 Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- Changes in V2: - Orr MDCR_EL2_EBWE directly without an intermittent register Documentation/arch/arm64/booting.rst | 19 +++++++++++++++++++ arch/arm64/include/asm/el2_setup.h | 26 ++++++++++++++++++++++++++ arch/arm64/include/asm/kvm_arm.h | 1 + 3 files changed, 46 insertions(+) diff --git a/Documentation/arch/arm64/booting.rst b/Documentation/arch/arm64/booting.rst index b57776a68f15..e69d972018cf 100644 --- a/Documentation/arch/arm64/booting.rst +++ b/Documentation/arch/arm64/booting.rst @@ -285,6 +285,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 (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: @@ -319,6 +325,19 @@ Before jumping into the kernel, the following conditions must be met: - ZCR_EL2.LEN must be initialised to the same value for all CPUs the kernel will execute on. + For CPUs with FEAT_Debugv8p9 extension present: + + - If the kernel is entered at EL1 and EL2 is present: + + - HDFGRTR2_EL2.nMDSELR_EL1 (bit 5) must be initialized to 0b1 + - HDFGWTR2_EL2.nMDSELR_EL1 (bit 5) must be initialized to 0b1 + - MDCR_EL2.EBWE (bit 43) must be initialized to 0b1 + + - If EL3 is present: + + - MDCR_EL3.TDA (bit 9) must be initialized to 0b0 + - MDCR_EL3.EBWE (bit 43) must be initialized to 0b1 + For CPUs with the Scalable Matrix Extension (FEAT_SME): - If EL3 is present: diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h index e0ffdf13a18b..289e9d8f8ee6 100644 --- a/arch/arm64/include/asm/el2_setup.h +++ b/arch/arm64/include/asm/el2_setup.h @@ -97,6 +97,13 @@ // to own it. .Lskip_trace_\@: + mrs x1, id_aa64dfr0_el1 + ubfx x1, x1, #ID_AA64DFR0_EL1_DebugVer_SHIFT, #4 + cmp x1, #ID_AA64DFR0_EL1_DebugVer_V8P9 + b.lt .Lskip_dbg_v8p9_\@ + + orr x2, x2, #MDCR_EL2_EBWE +.Lskip_dbg_v8p9_\@: msr mdcr_el2, x2 // Configure debug traps .endm @@ -215,6 +222,24 @@ .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_\@ + + mrs x1, id_aa64dfr0_el1 + ubfx x1, x1, #ID_AA64DFR0_EL1_DebugVer_SHIFT, #4 + cmp x1, #ID_AA64DFR0_EL1_DebugVer_V8P9 + b.lt .Lskip_dbg_v8p9_\@ + + mov_q x0, HDFGWTR2_EL2_nMDSELR_EL1 + msr_s SYS_HDFGWTR2_EL2, x0 + msr_s SYS_HDFGRTR2_EL2, x0 +.Lskip_dbg_v8p9_\@: +.Lskip_fgt2_\@: +.endm + .macro __init_el2_nvhe_prepare_eret mov x0, #INIT_PSTATE_EL1 msr spsr_el2, x0 @@ -240,6 +265,7 @@ __init_el2_nvhe_idregs __init_el2_cptr __init_el2_fgt + __init_el2_fgt2 .endm #ifndef __KVM_NVHE_HYPERVISOR__ diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index 109a85ee6910..34936f550118 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -312,6 +312,7 @@ GENMASK(15, 0)) /* Hyp Debug Configuration Register bits */ +#define MDCR_EL2_EBWE (UL(1) << 43) #define MDCR_EL2_E2TB_MASK (UL(0x3)) #define MDCR_EL2_E2TB_SHIFT (UL(24)) #define MDCR_EL2_HPMFZS (UL(1) << 36) -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH V2 7/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual ` (5 preceding siblings ...) 2024-10-28 5:34 ` [PATCH V2 6/7] arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9 Anshuman Khandual @ 2024-10-28 5:34 ` Anshuman Khandual 2024-12-10 16:59 ` [PATCH V2 0/7] " Mark Rutland 7 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-10-28 5:34 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Anshuman Khandual, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, Mark Rutland, kvmarm Currently there can be maximum 16 breakpoints, and 16 watchpoints available on a given platform - as detected from ID_AA64DFR0_EL1.[BRPs|WRPs] register fields. But these breakpoint, and watchpoints can be extended further up to 64 via a new arch feature FEAT_Debugv8p9. This first enables banked access for the breakpoint and watchpoint register set via MDSELR_EL1, extended exceptions via MDSCR_EL1.EMBWE and determining available breakpoints and watchpoints in the platform from ID_AA64DFR1_EL1, when FEAT_Debugv8p9 is enabled. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- Changes in V2: - Alphabetically order header files in debug-monitors.c - Dropped embwe_ref_count mechanism - Dropped preempt_enable() from AARCH64_DBG_READ - Dropped preempt_disable() from AARCH64_DBG_WRITE - Dropped set_bank_index() - Renamed read/write_wb_reg() as __read/__write_wb_reg() - Modified read/write_wb_reg() to have MDSELR_E1 based banked read/write arch/arm64/include/asm/debug-monitors.h | 1 + arch/arm64/include/asm/hw_breakpoint.h | 46 +++++++++++++++++++------ arch/arm64/kernel/debug-monitors.c | 15 +++++--- arch/arm64/kernel/hw_breakpoint.c | 38 ++++++++++++++++++-- 4 files changed, 84 insertions(+), 16 deletions(-) diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h index 13d437bcbf58..a14097673ae0 100644 --- a/arch/arm64/include/asm/debug-monitors.h +++ b/arch/arm64/include/asm/debug-monitors.h @@ -20,6 +20,7 @@ #define DBG_MDSCR_KDE (1 << 13) #define DBG_MDSCR_MDE (1 << 15) #define DBG_MDSCR_MASK ~(DBG_MDSCR_KDE | DBG_MDSCR_MDE) +#define DBG_MDSCR_EMBWE (1UL << 32) #define DBG_ESR_EVT(x) (((x) >> 27) & 0x7) diff --git a/arch/arm64/include/asm/hw_breakpoint.h b/arch/arm64/include/asm/hw_breakpoint.h index bd81cf17744a..ec7c7901c61a 100644 --- a/arch/arm64/include/asm/hw_breakpoint.h +++ b/arch/arm64/include/asm/hw_breakpoint.h @@ -79,8 +79,8 @@ static inline void decode_ctrl_reg(u32 reg, * Limits. * Changing these will require modifications to the register accessors. */ -#define ARM_MAX_BRP 16 -#define ARM_MAX_WRP 16 +#define ARM_MAX_BRP 64 +#define ARM_MAX_WRP 64 /* Virtual debug register bases. */ #define AARCH64_DBG_REG_BVR 0 @@ -94,6 +94,14 @@ static inline void decode_ctrl_reg(u32 reg, #define AARCH64_DBG_REG_NAME_WVR wvr #define AARCH64_DBG_REG_NAME_WCR wcr +static inline bool is_debug_v8p9_enabled(void) +{ + u64 dfr0 = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1); + int dver = cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_DebugVer_SHIFT); + + return dver == ID_AA64DFR0_EL1_DebugVer_V8P9; +} + /* Accessor macros for the debug registers. */ #define AARCH64_DBG_READ(N, REG, VAL) do {\ VAL = read_sysreg(dbg##REG##N##_el1);\ @@ -138,19 +146,37 @@ static inline void ptrace_hw_copy_thread(struct task_struct *task) /* Determine number of BRP registers available. */ static inline int get_num_brps(void) { - u64 dfr0 = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1); - return 1 + - cpuid_feature_extract_unsigned_field(dfr0, - ID_AA64DFR0_EL1_BRPs_SHIFT); + u64 dfr0, dfr1; + int dver, brps; + + dfr0 = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1); + dver = cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_DebugVer_SHIFT); + if (dver == ID_AA64DFR0_EL1_DebugVer_V8P9) { + dfr1 = read_sanitised_ftr_reg(SYS_ID_AA64DFR1_EL1); + brps = cpuid_feature_extract_unsigned_field_width(dfr1, + ID_AA64DFR1_EL1_BRPs_SHIFT, 8); + } else { + brps = cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_BRPs_SHIFT); + } + return 1 + brps; } /* Determine number of WRP registers available. */ static inline int get_num_wrps(void) { - u64 dfr0 = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1); - return 1 + - cpuid_feature_extract_unsigned_field(dfr0, - ID_AA64DFR0_EL1_WRPs_SHIFT); + u64 dfr0, dfr1; + int dver, wrps; + + dfr0 = read_sanitised_ftr_reg(SYS_ID_AA64DFR0_EL1); + dver = cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_DebugVer_SHIFT); + if (dver == ID_AA64DFR0_EL1_DebugVer_V8P9) { + dfr1 = read_sanitised_ftr_reg(SYS_ID_AA64DFR1_EL1); + wrps = cpuid_feature_extract_unsigned_field_width(dfr1, + ID_AA64DFR1_EL1_WRPs_SHIFT, 8); + } else { + wrps = cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_WRPs_SHIFT); + } + return 1 + wrps; } #ifdef CONFIG_CPU_PM diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c index 024a7b245056..b56716c654d8 100644 --- a/arch/arm64/kernel/debug-monitors.c +++ b/arch/arm64/kernel/debug-monitors.c @@ -21,6 +21,7 @@ #include <asm/cputype.h> #include <asm/daifflags.h> #include <asm/debug-monitors.h> +#include <asm/hw_breakpoint.h> #include <asm/system_misc.h> #include <asm/traps.h> @@ -34,7 +35,7 @@ u8 debug_monitors_arch(void) /* * MDSCR access routines. */ -static void mdscr_write(u32 mdscr) +static void mdscr_write(u64 mdscr) { unsigned long flags; flags = local_daif_save(); @@ -43,7 +44,7 @@ static void mdscr_write(u32 mdscr) } NOKPROBE_SYMBOL(mdscr_write); -static u32 mdscr_read(void) +static u64 mdscr_read(void) { return read_sysreg(mdscr_el1); } @@ -79,7 +80,7 @@ static DEFINE_PER_CPU(int, kde_ref_count); void enable_debug_monitors(enum dbg_active_el el) { - u32 mdscr, enable = 0; + u64 mdscr, enable = 0; WARN_ON(preemptible()); @@ -90,6 +91,9 @@ void enable_debug_monitors(enum dbg_active_el el) this_cpu_inc_return(kde_ref_count) == 1) enable |= DBG_MDSCR_KDE; + if (is_debug_v8p9_enabled()) + enable |= DBG_MDSCR_EMBWE; + if (enable && debug_enabled) { mdscr = mdscr_read(); mdscr |= enable; @@ -100,7 +104,7 @@ NOKPROBE_SYMBOL(enable_debug_monitors); void disable_debug_monitors(enum dbg_active_el el) { - u32 mdscr, disable = 0; + u64 mdscr, disable = 0; WARN_ON(preemptible()); @@ -111,6 +115,9 @@ void disable_debug_monitors(enum dbg_active_el el) this_cpu_dec_return(kde_ref_count) == 0) disable &= ~DBG_MDSCR_KDE; + if (is_debug_v8p9_enabled()) + disable &= ~DBG_MDSCR_EMBWE; + if (disable) { mdscr = mdscr_read(); mdscr &= disable; diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c index 722ac45f9f7b..630db607ca2b 100644 --- a/arch/arm64/kernel/hw_breakpoint.c +++ b/arch/arm64/kernel/hw_breakpoint.c @@ -103,7 +103,7 @@ int hw_breakpoint_slots(int type) WRITE_WB_REG_CASE(OFF, 14, REG, VAL); \ WRITE_WB_REG_CASE(OFF, 15, REG, VAL) -static u64 read_wb_reg(int reg, int n) +static u64 __read_wb_reg(int reg, int n) { u64 val = 0; @@ -118,9 +118,27 @@ static u64 read_wb_reg(int reg, int n) return val; } + +static u64 read_wb_reg(int reg, int n) +{ + int mdsel_bank, index; + u64 val; + + if (!is_debug_v8p9_enabled()) + return __read_wb_reg(reg, n); + + mdsel_bank = n / 16; + index = n % 16; + preempt_disable(); + write_sysreg_s(mdsel_bank << MDSELR_EL1_BANK_SHIFT, SYS_MDSELR_EL1); + isb(); + val = __read_wb_reg(reg, index); + preempt_enable(); + return val; +} NOKPROBE_SYMBOL(read_wb_reg); -static void write_wb_reg(int reg, int n, u64 val) +static void __write_wb_reg(int reg, int n, u64 val) { switch (reg + n) { GEN_WRITE_WB_REG_CASES(AARCH64_DBG_REG_BVR, AARCH64_DBG_REG_NAME_BVR, val); @@ -132,6 +150,22 @@ static void write_wb_reg(int reg, int n, u64 val) } isb(); } + +static void write_wb_reg(int reg, int n, u64 val) +{ + int mdsel_bank, index; + + if (!is_debug_v8p9_enabled()) + return __write_wb_reg(reg, n, val); + + mdsel_bank = n / 16; + index = n % 16; + preempt_disable(); + write_sysreg_s(mdsel_bank << MDSELR_EL1_BANK_SHIFT, SYS_MDSELR_EL1); + isb(); + __write_wb_reg(reg, index, val); + preempt_enable(); +} NOKPROBE_SYMBOL(write_wb_reg); /* -- 2.25.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual ` (6 preceding siblings ...) 2024-10-28 5:34 ` [PATCH V2 7/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual @ 2024-12-10 16:59 ` Mark Rutland 2024-12-11 8:34 ` Anshuman Khandual 7 siblings, 1 reply; 15+ messages in thread From: Mark Rutland @ 2024-12-10 16:59 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, kvmarm On Mon, Oct 28, 2024 at 11:04:19AM +0530, Anshuman Khandual wrote: > This series enables FEAT_Debugv8p9 thus extending breakpoint and watchpoint > support upto 64. This series is based on v6.12-rc5 although this depends on > FEAT_FGT2 FGU series posted earlier, for MDSELR_EL1 handling in various KVM > guest configurations. > > https://lore.kernel.org/all/20241001024356.1096072-1-anshuman.khandual@arm.com/ To avoid further confusion: since we discussed things further on the v1 thread after this v2 thread was posted, I'm waiting for a v3 to be posted which addresses the comments there (e.g. ID reg field handling, mutual exclusion for breakpoint manipulation). Mark. > Cc: Jonathan Corbet <corbet@lwn.net> > Cc: Marc Zyngier <maz@kernel.org> > Cc: Oliver Upton <oliver.upton@linux.dev> > Cc: James Morse <james.morse@arm.com> > Cc: Suzuki K Poulose <suzuki.poulose@arm.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Mark Brown <broonie@kernel.org> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: linux-arm-kernel@lists.infradead.org > Cc: kvmarm@lists.linux.dev > Cc: linux-kernel@vger.kernel.org > > Changes in V2: > > Following changes have been made per review comments from Mark Rutland > > - Orr MDCR_EL2_EBWE directly without an intermittent register > - Alphabetically order header files in debug-monitors.c > - Dropped embwe_ref_count mechanism > - Dropped preempt_enable() from AARCH64_DBG_READ > - Dropped preempt_disable() from AARCH64_DBG_WRITE > - Dropped set_bank_index() > - Renamed read/write_wb_reg() as __read/__write_wb_reg() > - Modified read/write_wb_reg() to have MDSELR_E1 based banked read/write > - Added required sysreg tools patches from KVM FEAT_FGT2 series for build > > Changes in V1: > > https://lore.kernel.org/all/20241001043602.1116991-1-anshuman.khandual@arm.com/ > > - Changed FTR_STRICT to FTR_NONSTRICT for the following ID_AA64DFR1_EL1 > register fields - ABL_CMPs, DPFZS, PMICNTR, CTX_CMPs, WRPs and BRPs > > Changes in RFC V2: > > https://lore.kernel.org/linux-arm-kernel/20240620092607.267132-1-anshuman.khandual@arm.com/ > > - This series has been split from RFC V1 dealing only with arm64 breakpoints > - Restored back DBG_MDSCR_MASK definition (unrelated change) > - Added preempt_disable()/enable() blocks between selecting banks and registers > > Changes in RFC: > > https://lore.kernel.org/all/20240405080008.1225223-1-anshuman.khandual@arm.com/ > > Anshuman Khandual (7): > arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 > arm64/sysreg: Add register fields for MDSELR_EL1 > arm64/sysreg: Add register fields for HDFGRTR2_EL2 > arm64/sysreg: Add register fields for HDFGWTR2_EL2 > arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register > arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9 > arm64/hw_breakpoint: Enable FEAT_Debugv8p9 > > Documentation/arch/arm64/booting.rst | 19 +++++++ > arch/arm64/include/asm/debug-monitors.h | 1 + > arch/arm64/include/asm/el2_setup.h | 26 +++++++++ > arch/arm64/include/asm/hw_breakpoint.h | 46 ++++++++++++---- > arch/arm64/include/asm/kvm_arm.h | 1 + > arch/arm64/kernel/cpufeature.c | 21 ++++++-- > arch/arm64/kernel/debug-monitors.c | 15 ++++-- > arch/arm64/kernel/hw_breakpoint.c | 38 +++++++++++++- > arch/arm64/tools/sysreg | 70 +++++++++++++++++++++++++ > 9 files changed, 216 insertions(+), 21 deletions(-) > > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 2024-12-10 16:59 ` [PATCH V2 0/7] " Mark Rutland @ 2024-12-11 8:34 ` Anshuman Khandual 0 siblings, 0 replies; 15+ messages in thread From: Anshuman Khandual @ 2024-12-11 8:34 UTC (permalink / raw) To: Mark Rutland Cc: linux-arm-kernel, linux-kernel, Jonathan Corbet, Marc Zyngier, Oliver Upton, James Morse, Suzuki K Poulose, Catalin Marinas, Will Deacon, Mark Brown, kvmarm On 12/10/24 22:29, Mark Rutland wrote: > On Mon, Oct 28, 2024 at 11:04:19AM +0530, Anshuman Khandual wrote: >> This series enables FEAT_Debugv8p9 thus extending breakpoint and watchpoint >> support upto 64. This series is based on v6.12-rc5 although this depends on >> FEAT_FGT2 FGU series posted earlier, for MDSELR_EL1 handling in various KVM >> guest configurations. >> >> https://lore.kernel.org/all/20241001024356.1096072-1-anshuman.khandual@arm.com/ > To avoid further confusion: since we discussed things further on the v1 > thread after this v2 thread was posted, I'm waiting for a v3 to be > posted which addresses the comments there (e.g. ID reg field handling, > mutual exclusion for breakpoint manipulation). Agreed, although I am still working on the mutual exclusion for breakpoint manipulation problem. Besides just carved out - MDCR_EL3.[TDS|TPM] related EL3 boot requirement's document update in a separate series as discussed. https://lore.kernel.org/all/20241211065425.1106683-1-anshuman.khandual@arm.com/ ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2024-12-19 15:50 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-10-28 5:34 [PATCH V2 0/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 1/7] arm64/sysreg: Update register fields for ID_AA64MMFR0_EL1 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 2/7] arm64/sysreg: Add register fields for MDSELR_EL1 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 3/7] arm64/sysreg: Add register fields for HDFGRTR2_EL2 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 4/7] arm64/sysreg: Add register fields for HDFGWTR2_EL2 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 5/7] arm64/cpufeature: Add field details for ID_AA64DFR1_EL1 register Anshuman Khandual 2024-12-10 16:41 ` Will Deacon 2024-12-10 16:56 ` Mark Rutland 2024-12-10 17:05 ` Will Deacon 2024-12-11 4:32 ` Anshuman Khandual 2024-12-19 15:49 ` Will Deacon 2024-10-28 5:34 ` [PATCH V2 6/7] arm64/boot: Enable EL2 requirements for FEAT_Debugv8p9 Anshuman Khandual 2024-10-28 5:34 ` [PATCH V2 7/7] arm64/hw_breakpoint: Enable FEAT_Debugv8p9 Anshuman Khandual 2024-12-10 16:59 ` [PATCH V2 0/7] " Mark Rutland 2024-12-11 8:34 ` Anshuman Khandual
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox