[PATCH 3/4] ARM: perf: Allow the use of the PMUv3 driver on 32bit ARM

Marc Zyngier marc.zyngier at arm.com
Thu May 4 04:31:34 PDT 2017


On 04/05/17 12:00, Vladimir Murzin wrote:
> 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

Arghh, -ECOPYPASTE. Thanks for the heads up!

> 
> 
>> +#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?

Sure, that shouldn't be an issue.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...



More information about the linux-arm-kernel mailing list