[PATCH v1] arm64/boot: Disable trapping of PMZR_EL0 writes to EL2
Oliver Upton
oupton at kernel.org
Tue Sep 22 12:47:58 PDT 2026
Hi Fuad,
On Tue, Sep 22, 2026 at 07:14:30PM +0100, Fuad Tabba wrote:
> @@ -426,6 +427,11 @@
> orr x0, x0, #HDFGRTR2_EL2_nPMICNTR_EL0
> orr x0, x0, #HDFGRTR2_EL2_nPMICFILTR_EL0
> orr x0, x0, #HDFGRTR2_EL2_nPMUACR_EL1
> + orr x2, x2, #HDFGWTR2_EL2_nPMICNTR_EL0
> + orr x2, x2, #HDFGWTR2_EL2_nPMICFILTR_EL0
> + orr x2, x2, #HDFGWTR2_EL2_nPMUACR_EL1
> + /* PMZR_EL0 is write-only, so it has no read trap to disable */
> + orr x2, x2, #HDFGWTR2_EL2_nPMZR_EL0
We can trim 3 instructions from this by using the read-trap bits as the
starting point for the write-trap bits, like below. It also makes clear
the point that most of our trap bits are symmetrical for read and write.
Thanks,
Oliver
diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
index aa8ec9df8024..6c5d2cc4e6fa 100644
--- a/arch/arm64/include/asm/el2_setup.h
+++ b/arch/arm64/include/asm/el2_setup.h
@@ -418,6 +418,7 @@
b.lt .Lskip_fgt2_\@
mov x0, xzr
+ mov x2, xzr
mrs x1, id_aa64dfr0_el1
ubfx x1, x1, #ID_AA64DFR0_EL1_PMUVer_SHIFT, #4
cmp x1, #ID_AA64DFR0_EL1_PMUVer_V3P9
@@ -426,6 +427,9 @@
orr x0, x0, #HDFGRTR2_EL2_nPMICNTR_EL0
orr x0, x0, #HDFGRTR2_EL2_nPMICFILTR_EL0
orr x0, x0, #HDFGRTR2_EL2_nPMUACR_EL1
+
+ /* PMZR_EL0 is write-only, so it has no read trap to disable */
+ orr x2, x0, #HDFGWTR2_EL2_nPMZR_EL0
.Lskip_pmuv3p9_\@:
/* If SPE is implemented, */
__spe_vers_imp .Lskip_spefds_\@, ID_AA64DFR0_EL1_PMSVer_IMP, x1
@@ -439,7 +443,7 @@
.Lskip_spefds_\@:
msr_s SYS_HDFGRTR2_EL2, x0
- msr_s SYS_HDFGWTR2_EL2, x0
+ msr_s SYS_HDFGWTR2_EL2, x2
msr_s SYS_HFGRTR2_EL2, xzr
msr_s SYS_HFGWTR2_EL2, xzr
msr_s SYS_HFGITR2_EL2, xzr
More information about the linux-arm-kernel
mailing list