[PATCH 3/4] ARM: perf: Allow the use of the PMUv3 driver on 32bit ARM
Vladimir Murzin
vladimir.murzin at arm.com
Thu May 4 04:00:40 PDT 2017
Hi Marc,
On 24/03/17 12:15, Marc Zyngier wrote:
> The only thing stopping the PMUv3 driver from compiling on 32bit
> is the lack of defined system registers names. This is easily
> solved by providing the sysreg accessors and updating the Kconfig entry.
>
> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
> ---
> arch/arm/include/asm/arm_pmuv3.h | 115 +++++++++++++++++++++++++++++++++++++++
> drivers/perf/Kconfig | 4 +-
> 2 files changed, 117 insertions(+), 2 deletions(-)
> create mode 100644 arch/arm/include/asm/arm_pmuv3.h
>
> diff --git a/arch/arm/include/asm/arm_pmuv3.h b/arch/arm/include/asm/arm_pmuv3.h
> new file mode 100644
> index 000000000000..df14de3d7bdf
> --- /dev/null
> +++ b/arch/arm/include/asm/arm_pmuv3.h
> @@ -0,0 +1,115 @@
> +/*
> + * Copyright (C) 2012 ARM Ltd.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program. If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef __ASM_PMUV3_H
> +#define __ASM_PMUV3_H
> +
> +#include <asm/cp15.h>
> +
> +#define pmcr __ACCESS_CP15(c9, 0, c12, 0)
> +#define pmselr __ACCESS_CP15(c9, 0, c12, 5)
> +#define pmccntr __ACCESS_CP15_64(0, c9)
> +#define pmxevcntr __ACCESS_CP15(c9, 0, c13, 2)
> +#define pmxevtyper __ACCESS_CP15(c9, 0, c13, 1)
> +#define pmcntenset __ACCESS_CP15(c9, 0, c12, 1)
> +#define pmcntenclr __ACCESS_CP15(c9, 0, c12, 2)
> +#define pmintenset __ACCESS_CP15(c9, 0, c12, 1)
Encoding is not right here
To access the PMINTENSET:
MRC p15,0,<Rt>,c9,c14,1 ; Read PMINTENSET into Rt
MCR p15,0,<Rt>,c9,c14,1 ; Write Rt to PMINTENSET
> +#define pmintenclr __ACCESS_CP15(c9, 0, c12, 2)
Ditto
To access the PMINTENCLR:
MRC p15,0,<Rt>,c9,c14,2 ; Read PMINTENCLR into Rt
MCR p15,0,<Rt>,c9,c14,2 ; Write Rt to PMINTENCLR
> +#define pmovsclr __ACCESS_CP15(c9, 0, c12, 3)
Nit: in 32-bit world it is named as PMOVSR.
> +#define pmceid0 __ACCESS_CP15(c9, 0, c12, 6)
> +#define pmceid1 __ACCESS_CP15(c9, 0, c12, 7)
Can all these defines be done in uppercase to be in align with existent users
of __ACCESS_CP15() macro?
Thanks
Vladimir
More information about the linux-arm-kernel
mailing list