[PATCH] perf/arm-cmn: Support CMN-600AE

Ilkka Koskinen ilkka at os.amperecomputing.com
Thu Dec 4 15:48:25 PST 2025


On Mon, 24 Nov 2025, Robin Murphy wrote:
> The functional safety features of CMN-600AE have little to no impact on
> the PMU relative to the base CMN-600 design, so for simplicity we can
> reasonably just treat it as the same thing. The only obvious difference
> is that the revision numbers aren't aligned, so we may hide some aliases
> for events which do actually exist, but those can still be specified via
> the underlying "type,eventid" format so it's not too big a deal.
>
> Signed-off-by: Robin Murphy <robin.murphy at arm.com>

Looks good to me.

Reviewed-by: Ilkka Koskinen <ilkka at os.amperecomputing.com>

> ---
> drivers/perf/arm-cmn.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
> index 23245352a3fc..651edd73bfcb 100644
> --- a/drivers/perf/arm-cmn.c
> +++ b/drivers/perf/arm-cmn.c
> @@ -210,6 +210,7 @@ enum cmn_model {
> enum cmn_part {
> 	PART_CMN600 = 0x434,
> 	PART_CMN650 = 0x436,
> +	PART_CMN600AE = 0x438,
> 	PART_CMN700 = 0x43c,
> 	PART_CI700 = 0x43a,
> 	PART_CMN_S3 = 0x43e,
> @@ -2266,6 +2267,9 @@ static int arm_cmn_discover(struct arm_cmn *cmn, unsigned int rgn_offset)
> 	reg = readq_relaxed(cfg_region + CMN_CFGM_PERIPH_ID_01);
> 	part = FIELD_GET(CMN_CFGM_PID0_PART_0, reg);
> 	part |= FIELD_GET(CMN_CFGM_PID1_PART_1, reg) << 8;
> +	/* 600AE is close enough that it's not really worth more complexity */
> +	if (part == PART_CMN600AE)
> +		part = PART_CMN600;
> 	if (cmn->part && cmn->part != part)
> 		dev_warn(cmn->dev,
> 			 "Firmware binding mismatch: expected part number 0x%x, found 0x%x\n",
> -- 
> 2.34.1
>
>



More information about the linux-arm-kernel mailing list