Message ID | 20191218182607.21607-3-ionela.voinescu@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: ARMv8.4 Activity Monitors support | expand |
On 18/12/2019 18:26, Ionela Voinescu wrote: > +/* > + * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present > + */ > + .macro reset_amuserenr_el0, tmpreg > + mrs \tmpreg, id_aa64pfr0_el1 // Check ID_AA64PFR0_EL1 > + ubfx \tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4 > + cbz \tmpreg, 9000f // Skip if no AMU present > + msr_s SYS_AMUSERENR_EL0, xzr // Disable AMU access from EL0 > +9000: AIUI you can steer away from the obscure numbering scheme and define the label using the macro counter: cbz \tmpreg, .Lskip_\@ [...] .Lskip_\@: .endm > + .endm
On Thursday 23 Jan 2020 at 17:04:32 (+0000), Valentin Schneider wrote: > On 18/12/2019 18:26, Ionela Voinescu wrote: > > +/* > > + * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present > > + */ > > + .macro reset_amuserenr_el0, tmpreg > > + mrs \tmpreg, id_aa64pfr0_el1 // Check ID_AA64PFR0_EL1 > > + ubfx \tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4 > > + cbz \tmpreg, 9000f // Skip if no AMU present > > + msr_s SYS_AMUSERENR_EL0, xzr // Disable AMU access from EL0 > > +9000: > > AIUI you can steer away from the obscure numbering scheme and define the > label using the macro counter: > > cbz \tmpreg, .Lskip_\@ > [...] > .Lskip_\@: > .endm > Cool, good to know! Although calling it "obscure numbering scheme" does make it more appealing to use. Thanks, I'll change it in the next version :). Ionela. > > > + .endm
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index 2cc0dd8bd9f7..83bb499e8916 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h @@ -443,6 +443,16 @@ USER(\label, ic ivau, \tmp2) // invalidate I line PoU 9000: .endm +/* + * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present + */ + .macro reset_amuserenr_el0, tmpreg + mrs \tmpreg, id_aa64pfr0_el1 // Check ID_AA64PFR0_EL1 + ubfx \tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4 + cbz \tmpreg, 9000f // Skip if no AMU present + msr_s SYS_AMUSERENR_EL0, xzr // Disable AMU access from EL0 +9000: + .endm /* * copy_page - copy src to dest using temp registers t1-t8 */ diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index a1e0592d1fbc..d8aae1152c08 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -124,6 +124,7 @@ alternative_endif ubfx x11, x11, #1, #1 msr oslar_el1, x11 reset_pmuserenr_el0 x0 // Disable PMU access from EL0 + reset_amuserenr_el0 x0 // Disable AMU access from EL0 alternative_if ARM64_HAS_RAS_EXTN msr_s SYS_DISR_EL1, xzr @@ -415,6 +416,8 @@ ENTRY(__cpu_setup) isb // Unmask debug exceptions now, enable_dbg // since this is per-cpu reset_pmuserenr_el0 x0 // Disable PMU access from EL0 + reset_amuserenr_el0 x0 // Disable AMU access from EL0 + /* * Memory region attributes for LPAE: *
The activity monitors extension is an optional extension introduced by the ARMv8.4 CPU architecture. In order to access the activity monitors counters safely, if desired, the kernel should detect the presence of the extension through the feature register, and mediate the access. Therefore, disable direct accesses to activity monitors counters from EL0 (userspace) and trap them to EL1 (kernel). Signed-off-by: Ionela Voinescu <ionela.voinescu@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Steve Capper <steve.capper@arm.com> --- arch/arm64/include/asm/assembler.h | 10 ++++++++++ arch/arm64/mm/proc.S | 3 +++ 2 files changed, 13 insertions(+)