forked from openSUSE/kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Driver providing perf backend for ARM Cache Coherent Network interconnect. Supports counting all hardware events and crosspoint watchpoints. Currently works with CCN-504 only, although there should be no changes required for CCN-508 (just impossible to test it now). Signed-off-by: Pawel Moll <[email protected]> Signed-off-by: Arnd Bergmann <[email protected]>
- Loading branch information
Showing
5 changed files
with
1,473 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
ARM Cache Coherent Network | ||
========================== | ||
|
||
CCN-504 is a ring-bus interconnect consisting of 11 crosspoints | ||
(XPs), with each crosspoint supporting up to two device ports, | ||
so nodes (devices) 0 and 1 are connected to crosspoint 0, | ||
nodes 2 and 3 to crosspoint 1 etc. | ||
|
||
PMU (perf) driver | ||
----------------- | ||
|
||
The CCN driver registers a perf PMU driver, which provides | ||
description of available events and configuration options | ||
in sysfs, see /sys/bus/event_source/devices/ccn*. | ||
|
||
The "format" directory describes format of the config, config1 | ||
and config2 fields of the perf_event_attr structure. The "events" | ||
directory provides configuration templates for all documented | ||
events, that can be used with perf tool. For example "xp_valid_flit" | ||
is an equivalent of "type=0x8,event=0x4". Other parameters must be | ||
explicitly specified. For events originating from device, "node" | ||
defines its index. All crosspoint events require "xp" (index), | ||
"port" (device port number) and "vc" (virtual channel ID) and | ||
"dir" (direction). Watchpoints (special "event" value 0xfe) also | ||
require comparator values ("cmp_l" and "cmp_h") and "mask", being | ||
index of the comparator mask. | ||
|
||
Masks are defined separately from the event description | ||
(due to limited number of the config values) in the "cmp_mask" | ||
directory, with first 8 configurable by user and additional | ||
4 hardcoded for the most frequent use cases. | ||
|
||
Cycle counter is described by a "type" value 0xff and does | ||
not require any other settings. | ||
|
||
Example of perf tool use: | ||
|
||
/ # perf list | grep ccn | ||
ccn/cycles/ [Kernel PMU event] | ||
<...> | ||
ccn/xp_valid_flit/ [Kernel PMU event] | ||
<...> | ||
|
||
/ # perf stat -C 0 -e ccn/cycles/,ccn/xp_valid_flit,xp=1,port=0,vc=1,dir=1/ \ | ||
sleep 1 | ||
|
||
The driver does not support sampling, therefore "perf record" will | ||
not work. Also notice that only single cpu is being selected | ||
("-C 0") - this is because perf framework does not support | ||
"non-CPU related" counters (yet?) so system-wide session ("-a") | ||
would try (and in most cases fail) to set up the same event | ||
per each CPU. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
* ARM CCN (Cache Coherent Network) | ||
|
||
Required properties: | ||
|
||
- compatible: (standard compatible string) should be one of: | ||
"arm,ccn-504" | ||
"arm,ccn-508" | ||
|
||
- reg: (standard registers property) physical address and size | ||
(16MB) of the configuration registers block | ||
|
||
- interrupts: (standard interrupt property) single interrupt | ||
generated by the control block | ||
|
||
Example: | ||
|
||
ccn@0x2000000000 { | ||
compatible = "arm,ccn-504"; | ||
reg = <0x20 0x00000000 0 0x1000000>; | ||
interrupts = <0 181 4>; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.