]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf/arm-cmn: Support CMN-600AE
authorRobin Murphy <robin.murphy@arm.com>
Mon, 24 Nov 2025 16:39:54 +0000 (16:39 +0000)
committerWill Deacon <will@kernel.org>
Mon, 5 Jan 2026 16:49:00 +0000 (16:49 +0000)
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@arm.com>
Reviewed-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Tested-by: Michal Simek <michal.simek@amd.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/arm-cmn.c

index 23245352a3fc0aa0219bacca37b451814f6b8862..651edd73bfcb1e06803672f913346d1458e8dd89 100644 (file)
@@ -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",