Commit 4d5a7680 authored by Robin Murphy's avatar Robin Murphy Committed by Will Deacon
Browse files

perf: Add driver for Arm NI-700 interconnect PMU



The Arm NI-700 Network-on-Chip Interconnect has a relatively
straightforward design with a hierarchy of voltage, power, and clock
domains, where each clock domain then contains a number of interface
units and a PMU which can monitor events thereon. As such, it begets a
relatively straightforward driver to interface those PMUs with perf.

Even more so than with arm-cmn, users will require detailed knowledge of
the wider system topology in order to meaningfully analyse anything,
since the interconnect itself cannot know what lies beyond the boundary
of each inscrutably-numbered interface. Given that, for now they are
also expected to refer to the NI-700 documentation for the relevant
event IDs to provide as well. An identifier is implemented so we can
come back and add jevents if anyone really wants to.

Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/9933058d0ab8138c78a61cd6852ea5d5ff48e393.1725470837.git.robin.murphy@arm.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent abbe74dd
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
====================================
Arm Network-on Chip Interconnect PMU
====================================

NI-700 and friends implement a distinct PMU for each clock domain within the
interconnect. Correspondingly, the driver exposes multiple PMU devices named
arm_ni_<x>_cd_<y>, where <x> is an (arbitrary) instance identifier and <y> is
the clock domain ID within that particular instance. If multiple NI instances
exist within a system, the PMU devices can be correlated with the underlying
hardware instance via sysfs parentage.

Each PMU exposes base event aliases for the interface types present in its clock
domain. These require qualifying with the "eventid" and "nodeid" parameters
to specify the event code to count and the interface at which to count it
(per the configured hardware ID as reflected in the xxNI_NODE_INFO register).
The exception is the "cycles" alias for the PMU cycle counter, which is encoded
with the PMU node type and needs no further qualification.
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ Performance monitor support
   starfive_starlink_pmu
   arm-ccn
   arm-cmn
   arm-ni
   xgene-pmu
   arm_dsu_pmu
   thunderx2-pmu
+7 −0
Original line number Diff line number Diff line
@@ -48,6 +48,13 @@ config ARM_CMN
	  Support for PMU events monitoring on the Arm CMN-600 Coherent Mesh
	  Network interconnect.

config ARM_NI
	tristate "Arm NI-700 PMU support"
	depends on ARM64 || COMPILE_TEST
	help
	  Support for PMU events monitoring on the Arm NI-700 Network-on-Chip
	  interconnect and family.

config ARM_PMU
	depends on ARM || ARM64
	bool "ARM PMU framework"
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ obj-$(CONFIG_ARM_CCI_PMU) += arm-cci.o
obj-$(CONFIG_ARM_CCN) += arm-ccn.o
obj-$(CONFIG_ARM_CMN) += arm-cmn.o
obj-$(CONFIG_ARM_DSU_PMU) += arm_dsu_pmu.o
obj-$(CONFIG_ARM_NI) += arm-ni.o
obj-$(CONFIG_ARM_PMU) += arm_pmu.o arm_pmu_platform.o
obj-$(CONFIG_ARM_PMU_ACPI) += arm_pmu_acpi.o
obj-$(CONFIG_ARM_PMUV3) += arm_pmuv3.o

drivers/perf/arm-ni.c

0 → 100644
+781 −0

File added.

Preview size limit exceeded, changes collapsed.