arm64 CPU DT binding updates
Subsystems (4)
v2 cover arm64 CPU DT binding updates
Hi all,
Here's a quick turnaround from v1 so I don't have to remember where to pick up from next week :)
Thanks,
Robin.
Robin Murphy (5):
dt-bindings: ARM: Add recent Cortex/Neoverse CPUs
dt-bindings: ARM: Add recent Cortex/Neoverse PMUs
dt-bindings: ARM: Clean up PMU compatible list
arm64: perf: Refactor PMU init callbacks
arm64: perf: Support new DT compatibles
.../devicetree/bindings/arm/cpus.yaml | 9 + .../devicetree/bindings/arm/pmu.yaml | 41 +++-- arch/arm64/kernel/perf_event.c | 168 ++++++++---------- 3 files changed, 111 insertions(+), 107 deletions(-)
Signature · 1 line
2.23.0.dirty
PATCH v2 1/5 dt-bindings: ARM: Add recent Cortex/Neoverse CPUs
The CPU group has been busy since we last updated these bindings... Add definitions for all the new Cortex-A and Neoverse cores now available.
---
v2: no change, just resending for completeness
Documentation/devicetree/bindings/arm/cpus.yaml | 9 +++++++++ 1 file changed, 9 insertions(+)
Documentation/devicetree/bindings/arm/cpus.yaml +9 -0
@@ -123,11 +123,18 @@ properties: - arm,cortex-a12 - arm,cortex-a15 - arm,cortex-a17 + - arm,cortex-a32 + - arm,cortex-a34 + - arm,cortex-a35 - arm,cortex-a53 - arm,cortex-a55 - arm,cortex-a57 + - arm,cortex-a65 - arm,cortex-a72 - arm,cortex-a73 + - arm,cortex-a75 + - arm,cortex-a76 + - arm,cortex-a77 - arm,cortex-m0 - arm,cortex-m0+ - arm,cortex-m1
@@ -136,6 +143,8 @@ properties: - arm,cortex-r4 - arm,cortex-r5 - arm,cortex-r7 + - arm,neoverse-e1 + - arm,neoverse-n1 - brcm,brahma-b15 - brcm,brahma-b53 - brcm,vulcan
Signature · 1 line
2.23.0.dirty
Re: [PATCH v2 1/5] dt-bindings: ARM: Add recent Cortex/Neoverse CPUs
Quoted 4 lines · Robin Murphy
The CPU group has been busy since we last updated these bindings... Add definitions for all the new Cortex-A and Neoverse cores now available.
Quoted 8 lines
Signed-off-by Robin Murphy <[email protected]>---
v2: no change, just resending for completeness
Documentation/devicetree/bindings/arm/cpus.yaml | 9 +++++++++ 1 file changed, 9 insertions(+)
Applied, thanks.
Rob
PATCH v2 2/5 dt-bindings: ARM: Add recent Cortex/Neoverse PMUs
In reply to Robin MurphyAdd new PMU definitions to correspond with the CPU bindings.
---
v2: no change, just resending for completeness
Documentation/devicetree/bindings/arm/pmu.yaml | 9 +++++++++ 1 file changed, 9 insertions(+)
Documentation/devicetree/bindings/arm/pmu.yaml +9 -0
@@ -21,11 +21,20 @@ properties: - enum: - apm,potenza-pmu - arm,armv8-pmuv3 + - arm,neoverse-n1-pmu + - arm,neoverse-e1-pmu + - arm,cortex-a77-pmu + - arm,cortex-a76-pmu + - arm,cortex-a75-pmu - arm,cortex-a73-pmu - arm,cortex-a72-pmu + - arm,cortex-a65-pmu - arm,cortex-a57-pmu + - arm,cortex-a55-pmu - arm,cortex-a53-pmu - arm,cortex-a35-pmu + - arm,cortex-a34-pmu + - arm,cortex-a32-pmu - arm,cortex-a17-pmu - arm,cortex-a15-pmu - arm,cortex-a12-pmu
Signature · 1 line
2.23.0.dirty
Re: [PATCH v2 2/5] dt-bindings: ARM: Add recent Cortex/Neoverse PMUs
Quoted 10 lines · Robin Murphy
Add new PMU definitions to correspond with the CPU bindings.
Signed-off-by Robin Murphy <[email protected]>---
v2: no change, just resending for completeness
Documentation/devicetree/bindings/arm/pmu.yaml | 9 +++++++++ 1 file changed, 9 insertions(+)
Applied, thanks.
Rob
PATCH v2 3/5 dt-bindings: ARM: Clean up PMU compatible list
In reply to Robin MurphyThe "alpha by vendor, reverse-alpha by model" sorting of compatibles that we seem to have ended up with is decidedly odd. Make it less so.
Also copy the comment from the generic "arm,armv8" CPU binding to help clarify that the "arm,armv8-pmuv3" binding is rather intended to be a counterpart to that, for describing implementations without a specific microarchitecture like the AEMv8 software model.
---
v3: new - can be squashed or reordered with #2/5 if desired
.../devicetree/bindings/arm/pmu.yaml | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-)
Documentation/devicetree/bindings/arm/pmu.yaml +25 -25
@@ -20,36 +20,36 @@ properties: items: - enum: - apm,potenza-pmu - - arm,armv8-pmuv3 - - arm,neoverse-n1-pmu - - arm,neoverse-e1-pmu - - arm,cortex-a77-pmu - - arm,cortex-a76-pmu - - arm,cortex-a75-pmu - - arm,cortex-a73-pmu - - arm,cortex-a72-pmu - - arm,cortex-a65-pmu - - arm,cortex-a57-pmu - - arm,cortex-a55-pmu - - arm,cortex-a53-pmu - - arm,cortex-a35-pmu - - arm,cortex-a34-pmu - - arm,cortex-a32-pmu - - arm,cortex-a17-pmu - - arm,cortex-a15-pmu - - arm,cortex-a12-pmu - - arm,cortex-a9-pmu - - arm,cortex-a8-pmu - - arm,cortex-a7-pmu - - arm,cortex-a5-pmu - - arm,arm11mpcore-pmu - - arm,arm1176-pmu + - arm,armv8-pmuv3 # Only for s/w models - arm,arm1136-pmu + - arm,arm1176-pmu + - arm,arm11mpcore-pmu + - arm,cortex-a5-pmu + - arm,cortex-a7-pmu + - arm,cortex-a8-pmu + - arm,cortex-a9-pmu + - arm,cortex-a12-pmu + - arm,cortex-a15-pmu + - arm,cortex-a17-pmu + - arm,cortex-a32-pmu + - arm,cortex-a34-pmu + - arm,cortex-a35-pmu + - arm,cortex-a53-pmu + - arm,cortex-a55-pmu + - arm,cortex-a57-pmu + - arm,cortex-a65-pmu + - arm,cortex-a72-pmu + - arm,cortex-a73-pmu + - arm,cortex-a75-pmu + - arm,cortex-a76-pmu + - arm,cortex-a77-pmu + - arm,neoverse-e1-pmu + - arm,neoverse-n1-pmu - brcm,vulcan-pmu - cavium,thunder-pmu + - qcom,krait-pmu - qcom,scorpion-pmu - qcom,scorpion-mp-pmu - - qcom,krait-pmu interrupts: # Don't know how many CPUs, so no constraints to specify
Signature · 1 line
2.23.0.dirty
Re: [PATCH v2 3/5] dt-bindings: ARM: Clean up PMU compatible list
Quoted 8 lines · Robin Murphy
The "alpha by vendor, reverse-alpha by model" sorting of compatibles that we seem to have ended up with is decidedly odd. Make it less so.
Also copy the comment from the generic "arm,armv8" CPU binding to help clarify that the "arm,armv8-pmuv3" binding is rather intended to be a counterpart to that, for describing implementations without a specific microarchitecture like the AEMv8 software model.
Quoted 8 lines
Signed-off-by Robin Murphy <[email protected]>---
v3: new - can be squashed or reordered with #2/5 if desired
.../devicetree/bindings/arm/pmu.yaml | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-)
Applied, thanks.
Rob
PATCH v2 4/5 arm64: perf: Refactor PMU init callbacks
In reply to Robin MurphyThe PMU init callbacks are already drowning in boilerplate, so before doubling the number of supported PMU models, give it a sensible refactor to significantly reduce the bloat, both in source and object code. Although nobody uses non-default sysfs attributes today, there's minimal impact to preserving the notion that maybe, some day, somebody might, so we may as well keep up appearances.
---
v2: new
arch/arm64/kernel/perf_event.c | 124 +++++++-------------------------- 1 file changed, 27 insertions(+), 97 deletions(-)
arch/arm64/kernel/perf_event.c +27 -97
@@ -953,7 +953,10 @@ static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu)return probe.present ?0 : -ENODEV ; } -static int armv8_pmu_init (struct arm_pmu *cpu_pmu) +static int armv8_pmu_init (struct arm_pmu *cpu_pmu,char *name, +int (*map_event)(struct perf_event *event), +const struct attribute_group *events, +const struct attribute_group *format) {int ret =armv8pmu_probe_pmu (cpu_pmu);if (ret)
@@ -972,135 +975,62 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu) cpu_pmu->set_event_filter = armv8pmu_set_event_filter; cpu_pmu->filter_match = armv8pmu_filter_match; + cpu_pmu->name = name; + cpu_pmu->map_event = map_event; + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = events ? + events : &armv8_pmuv3_events_attr_group; + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = format ? + format : &armv8_pmuv3_format_attr_group; +return 0 ; }static int armv8_pmuv3_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_pmuv3" ; - cpu_pmu->map_event = armv8_pmuv3_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_pmuv3" , + armv8_pmuv3_map_event,NULL ,NULL ); }static int armv8_a35_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a35" ; - cpu_pmu->map_event = armv8_a53_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a35" , + armv8_a53_map_event,NULL ,NULL ); }static int armv8_a53_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a53" ; - cpu_pmu->map_event = armv8_a53_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a53" , + armv8_a53_map_event,NULL ,NULL ); }static int armv8_a57_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a57" ; - cpu_pmu->map_event = armv8_a57_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a57" , + armv8_a57_map_event,NULL ,NULL ); }static int armv8_a72_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a72" ; - cpu_pmu->map_event = armv8_a57_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a72" , + armv8_a57_map_event,NULL ,NULL ); }static int armv8_a73_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a73" ; - cpu_pmu->map_event = armv8_a73_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a73" , + armv8_a73_map_event,NULL ,NULL ); }static int armv8_thunder_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cavium_thunder" ; - cpu_pmu->map_event = armv8_thunder_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cavium_thunder" , + armv8_thunder_map_event,NULL ,NULL ); }static int armv8_vulcan_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_brcm_vulcan" ; - cpu_pmu->map_event = armv8_vulcan_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_brcm_vulcan" , + armv8_vulcan_map_event,NULL ,NULL ); }static const struct of_device_id armv8_pmu_of_device_ids[] = {
Signature · 1 line
2.23.0.dirty
Re: [PATCH v2 4/5] arm64: perf: Refactor PMU init callbacks
Quoted 8 lines · Robin Murphy
The PMU init callbacks are already drowning in boilerplate, so before doubling the number of supported PMU models, give it a sensible refactor to significantly reduce the bloat, both in source and object code. Although nobody uses non-default sysfs attributes today, there's minimal impact to preserving the notion that maybe, some day, somebody might, so we may as well keep up appearances.
Signed-off-by Robin Murphy <[email protected]>
Mark.
Quoted 185 lines
---
v2: new
arch/arm64/kernel/perf_event.c | 124 +++++++-------------------------- 1 file changed, 27 insertions(+), 97 deletions(-)arch/arm64/kernel/perf_event.c +27
-97@@ -953,7 +953,10 @@ static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu)return probe.present ?0 : -ENODEV ; } -static int armv8_pmu_init (struct arm_pmu *cpu_pmu) +static int armv8_pmu_init (struct arm_pmu *cpu_pmu,char *name, +int (*map_event)(struct perf_event *event), +const struct attribute_group *events, +const struct attribute_group *format) {int ret =armv8pmu_probe_pmu (cpu_pmu);if (ret)@@ -972,135 +975,62 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu) cpu_pmu->set_event_filter = armv8pmu_set_event_filter; cpu_pmu->filter_match = armv8pmu_filter_match; + cpu_pmu->name = name; + cpu_pmu->map_event = map_event; + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = events ? + events : &armv8_pmuv3_events_attr_group; + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = format ? + format : &armv8_pmuv3_format_attr_group; +return 0 ; }static int armv8_pmuv3_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_pmuv3" ; - cpu_pmu->map_event = armv8_pmuv3_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_pmuv3" , + armv8_pmuv3_map_event,NULL ,NULL ); }static int armv8_a35_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a35" ; - cpu_pmu->map_event = armv8_a53_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a35" , + armv8_a53_map_event,NULL ,NULL ); }static int armv8_a53_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a53" ; - cpu_pmu->map_event = armv8_a53_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a53" , + armv8_a53_map_event,NULL ,NULL ); }static int armv8_a57_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a57" ; - cpu_pmu->map_event = armv8_a57_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a57" , + armv8_a57_map_event,NULL ,NULL ); }static int armv8_a72_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a72" ; - cpu_pmu->map_event = armv8_a57_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a72" , + armv8_a57_map_event,NULL ,NULL ); }static int armv8_a73_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cortex_a73" ; - cpu_pmu->map_event = armv8_a73_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a73" , + armv8_a73_map_event,NULL ,NULL ); }static int armv8_thunder_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_cavium_thunder" ; - cpu_pmu->map_event = armv8_thunder_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_cavium_thunder" , + armv8_thunder_map_event,NULL ,NULL ); }static int armv8_vulcan_pmu_init (struct arm_pmu *cpu_pmu) { -int ret =armv8_pmu_init (cpu_pmu); -if (ret) -return ret; - - cpu_pmu->name ="armv8_brcm_vulcan" ; - cpu_pmu->map_event = armv8_vulcan_map_event; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS ] = - &armv8_pmuv3_events_attr_group; - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS ] = - &armv8_pmuv3_format_attr_group; - -return 0 ; +return armv8_pmu_init (cpu_pmu,"armv8_brcm_vulcan" , + armv8_vulcan_map_event,NULL ,NULL ); }static const struct of_device_id armv8_pmu_of_device_ids[] = {Signature · 1 line
2.23.0.dirty
PATCH v2 5/5 arm64: perf: Support new DT compatibles
In reply to Robin MurphyAdd support for matching the new PMUs. For now, this just wires them up as generic PMUv3 such that people writing DTs for new SoCs can do the right thing, and at least have architectural and raw events be usable. We can come back and fill in event maps for sysfs and/or perf tools at a later date.
---
v2: define separate init functions to preserve the user ABI for naming
(and perhaps more crucially, to simply avoid sysfs collisions on
the inevitable A7[567] + A55 big.LITTLE systems)
arch/arm64/kernel/perf_event.c | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
arch/arm64/kernel/perf_event.c +56 -0
@@ -991,6 +991,12 @@ static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu) armv8_pmuv3_map_event, NULL, NULL); } +static int armv8_a34_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a34" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a35_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35",
@@ -1003,12 +1009,24 @@ static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu) armv8_a53_map_event, NULL, NULL); } +static int armv8_a55_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a55" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a57_pmu_init (struct arm_pmu *cpu_pmu) {return armv8_pmu_init (cpu_pmu,"armv8_cortex_a57" , armv8_a57_map_event,NULL ,NULL ); } +static int armv8_a65_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a65" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a72_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72",
@@ -1021,6 +1039,36 @@ static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu) armv8_a73_map_event, NULL, NULL); } +static int armv8_a75_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a75" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_a76_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a76" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_a77_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a77" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_e1_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_neoverse_e1" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_n1_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_neoverse_n1" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_thunder_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder",
@@ -1035,11 +1083,19 @@ static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)static const struct of_device_id armv8_pmu_of_device_ids[] = { {.compatible ="arm,armv8-pmuv3" , .data = armv8_pmuv3_init}, + {.compatible ="arm,cortex-a34-pmu" , .data = armv8_a34_pmu_init}, {.compatible ="arm,cortex-a35-pmu" , .data = armv8_a35_pmu_init}, {.compatible ="arm,cortex-a53-pmu" , .data = armv8_a53_pmu_init}, + {.compatible ="arm,cortex-a55-pmu" , .data = armv8_a55_pmu_init}, {.compatible ="arm,cortex-a57-pmu" , .data = armv8_a57_pmu_init}, + {.compatible ="arm,cortex-a65-pmu" , .data = armv8_a65_pmu_init}, {.compatible ="arm,cortex-a72-pmu" , .data = armv8_a72_pmu_init}, {.compatible ="arm,cortex-a73-pmu" , .data = armv8_a73_pmu_init}, + {.compatible ="arm,cortex-a75-pmu" , .data = armv8_a75_pmu_init}, + {.compatible ="arm,cortex-a76-pmu" , .data = armv8_a76_pmu_init}, + {.compatible ="arm,cortex-a77-pmu" , .data = armv8_a77_pmu_init}, + {.compatible ="arm,neoverse-e1-pmu" , .data = armv8_e1_pmu_init}, + {.compatible ="arm,neoverse-n1-pmu" , .data = armv8_n1_pmu_init}, {.compatible ="cavium,thunder-pmu" , .data = armv8_thunder_pmu_init}, {.compatible ="brcm,vulcan-pmu" , .data = armv8_vulcan_pmu_init}, {},
Signature · 1 line
2.23.0.dirty
Re: [PATCH v2 5/5] arm64: perf: Support new DT compatibles
Quoted 7 lines · Robin Murphy
Add support for matching the new PMUs. For now, this just wires them up as generic PMUv3 such that people writing DTs for new SoCs can do the right thing, and at least have architectural and raw events be usable. We can come back and fill in event maps for sysfs and/or perf tools at a later date.
Signed-off-by Robin Murphy <[email protected]>
Thanks for putting this together!
Will, are you happy to queue this and the previous patch?
Thanks,
Mark.
Quoted 111 lines
---
v2: define separate init functions to preserve the user ABI for naming
(and perhaps more crucially, to simply avoid sysfs collisions on
the inevitable A7[567] + A55 big.LITTLE systems)arch/arm64/kernel/perf_event.c | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)arch/arm64/kernel/perf_event.c +56
-0@@ -991,6 +991,12 @@ static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu) armv8_pmuv3_map_event, NULL, NULL); } +static int armv8_a34_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a34" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a35_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35",@@ -1003,12 +1009,24 @@ static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu) armv8_a53_map_event, NULL, NULL); } +static int armv8_a55_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a55" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a57_pmu_init (struct arm_pmu *cpu_pmu) {return armv8_pmu_init (cpu_pmu,"armv8_cortex_a57" , armv8_a57_map_event,NULL ,NULL ); } +static int armv8_a65_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a65" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_a72_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72",@@ -1021,6 +1039,36 @@ static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu) armv8_a73_map_event, NULL, NULL); } +static int armv8_a75_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a75" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_a76_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a76" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_a77_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_cortex_a77" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_e1_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_neoverse_e1" , + armv8_pmuv3_map_event,NULL ,NULL ); +} + +static int armv8_n1_pmu_init (struct arm_pmu *cpu_pmu) +{ +return armv8_pmu_init (cpu_pmu,"armv8_neoverse_n1" , + armv8_pmuv3_map_event,NULL ,NULL ); +} +static int armv8_thunder_pmu_init (struct arm_pmu *cpu_pmu) { return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder",@@ -1035,11 +1083,19 @@ static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)static const struct of_device_id armv8_pmu_of_device_ids[] = { {.compatible ="arm,armv8-pmuv3" , .data = armv8_pmuv3_init}, + {.compatible ="arm,cortex-a34-pmu" , .data = armv8_a34_pmu_init}, {.compatible ="arm,cortex-a35-pmu" , .data = armv8_a35_pmu_init}, {.compatible ="arm,cortex-a53-pmu" , .data = armv8_a53_pmu_init}, + {.compatible ="arm,cortex-a55-pmu" , .data = armv8_a55_pmu_init}, {.compatible ="arm,cortex-a57-pmu" , .data = armv8_a57_pmu_init}, + {.compatible ="arm,cortex-a65-pmu" , .data = armv8_a65_pmu_init}, {.compatible ="arm,cortex-a72-pmu" , .data = armv8_a72_pmu_init}, {.compatible ="arm,cortex-a73-pmu" , .data = armv8_a73_pmu_init}, + {.compatible ="arm,cortex-a75-pmu" , .data = armv8_a75_pmu_init}, + {.compatible ="arm,cortex-a76-pmu" , .data = armv8_a76_pmu_init}, + {.compatible ="arm,cortex-a77-pmu" , .data = armv8_a77_pmu_init}, + {.compatible ="arm,neoverse-e1-pmu" , .data = armv8_e1_pmu_init}, + {.compatible ="arm,neoverse-n1-pmu" , .data = armv8_n1_pmu_init}, {.compatible ="cavium,thunder-pmu" , .data = armv8_thunder_pmu_init}, {.compatible ="brcm,vulcan-pmu" , .data = armv8_vulcan_pmu_init}, {},Signature · 1 line
2.23.0.dirty
Will Deacon
maintainerRe: [PATCH v2 5/5] arm64: perf: Support new DT compatibles
Quoted 7 lines · Mark Rutland
Quoted 6 lines · Robin Murphy
Add support for matching the new PMUs. For now, this just wires them up as generic PMUv3 such that people writing DTs for new SoCs can do the right thing, and at least have architectural and raw events be usable. We can come back and fill in event maps for sysfs and/or perf tools at a later date.
Quoted 7 lines
Quoted 1 line
Signed-off-by Robin Murphy <[email protected]>Thanks for putting this together!
Acked-by Mark Rutland <[email protected]>Will, are you happy to queue this and the previous patch?
Sure thing. I haven't queued anything for 5.7 yet, but I'll flag these two so I don't forget.
Will
Will Deacon
maintainerRe: [PATCH v2 5/5] arm64: perf: Support new DT compatibles
In reply to Mark RutlandQuoted 7 lines · Mark Rutland
Quoted 6 lines · Robin Murphy
Add support for matching the new PMUs. For now, this just wires them up as generic PMUv3 such that people writing DTs for new SoCs can do the right thing, and at least have architectural and raw events be usable. We can come back and fill in event maps for sysfs and/or perf tools at a later date.
Quoted 7 lines
Quoted 1 line
Signed-off-by Robin Murphy <[email protected]>Thanks for putting this together!
Acked-by Mark Rutland <[email protected]>Will, are you happy to queue this and the previous patch?
Yup, I'll pick these two up shortly.
Will