mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
Documentation: coresight: Update the generic device names
Update the documentation to reflect the new naming scheme with latest changes. Reported-by: Leo Yan <leo.yan@linaro.org> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
83e8b971f8
commit
cd84d63a29
1 changed files with 67 additions and 15 deletions
|
@ -188,6 +188,49 @@ specific to that component only. "Implementation defined" customisations are
|
||||||
expected to be accessed and controlled using those entries.
|
expected to be accessed and controlled using those entries.
|
||||||
|
|
||||||
|
|
||||||
|
Device Naming scheme
|
||||||
|
------------------------
|
||||||
|
The devices that appear on the "coresight" bus were named the same as their
|
||||||
|
parent devices, i.e, the real devices that appears on AMBA bus or the platform bus.
|
||||||
|
Thus the names were based on the Linux Open Firmware layer naming convention,
|
||||||
|
which follows the base physical address of the device followed by the device
|
||||||
|
type. e.g:
|
||||||
|
|
||||||
|
root:~# ls /sys/bus/coresight/devices/
|
||||||
|
20010000.etf 20040000.funnel 20100000.stm 22040000.etm
|
||||||
|
22140000.etm 230c0000.funnel 23240000.etm 20030000.tpiu
|
||||||
|
20070000.etr 20120000.replicator 220c0000.funnel
|
||||||
|
23040000.etm 23140000.etm 23340000.etm
|
||||||
|
|
||||||
|
However, with the introduction of ACPI support, the names of the real
|
||||||
|
devices are a bit cryptic and non-obvious. Thus, a new naming scheme was
|
||||||
|
introduced to use more generic names based on the type of the device. The
|
||||||
|
following rules apply:
|
||||||
|
|
||||||
|
1) Devices that are bound to CPUs, are named based on the CPU logical
|
||||||
|
number.
|
||||||
|
|
||||||
|
e.g, ETM bound to CPU0 is named "etm0"
|
||||||
|
|
||||||
|
2) All other devices follow a pattern, "<device_type_prefix>N", where :
|
||||||
|
|
||||||
|
<device_type_prefix> - A prefix specific to the type of the device
|
||||||
|
N - a sequential number assigned based on the order
|
||||||
|
of probing.
|
||||||
|
|
||||||
|
e.g, tmc_etf0, tmc_etr0, funnel0, funnel1
|
||||||
|
|
||||||
|
Thus, with the new scheme the devices could appear as :
|
||||||
|
|
||||||
|
root:~# ls /sys/bus/coresight/devices/
|
||||||
|
etm0 etm1 etm2 etm3 etm4 etm5 funnel0
|
||||||
|
funnel1 funnel2 replicator0 stm0 tmc_etf0 tmc_etr0 tpiu0
|
||||||
|
|
||||||
|
Some of the examples below might refer to old naming scheme and some
|
||||||
|
to the newer scheme, to give a confirmation that what you see on your
|
||||||
|
system is not unexpected. One must use the "names" as they appear on
|
||||||
|
the system under specified locations.
|
||||||
|
|
||||||
How to use the tracer modules
|
How to use the tracer modules
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
@ -326,16 +369,25 @@ amount of processor cores), the "cs_etm" PMU will be listed only once.
|
||||||
A Coresight PMU works the same way as any other PMU, i.e the name of the PMU is
|
A Coresight PMU works the same way as any other PMU, i.e the name of the PMU is
|
||||||
listed along with configuration options within forward slashes '/'. Since a
|
listed along with configuration options within forward slashes '/'. Since a
|
||||||
Coresight system will typically have more than one sink, the name of the sink to
|
Coresight system will typically have more than one sink, the name of the sink to
|
||||||
work with needs to be specified as an event option. Names for sink to choose
|
work with needs to be specified as an event option.
|
||||||
from are listed in sysFS under ($SYSFS)/bus/coresight/devices:
|
On newer kernels the available sinks are listed in sysFS under:
|
||||||
|
($SYSFS)/bus/event_source/devices/cs_etm/sinks/
|
||||||
|
|
||||||
root@linaro-nano:~# ls /sys/bus/coresight/devices/
|
root@localhost:/sys/bus/event_source/devices/cs_etm/sinks# ls
|
||||||
20010000.etf 20040000.funnel 20100000.stm 22040000.etm
|
tmc_etf0 tmc_etr0 tpiu0
|
||||||
22140000.etm 230c0000.funnel 23240000.etm 20030000.tpiu
|
|
||||||
20070000.etr 20120000.replicator 220c0000.funnel
|
|
||||||
23040000.etm 23140000.etm 23340000.etm
|
|
||||||
|
|
||||||
root@linaro-nano:~# perf record -e cs_etm/@20070000.etr/u --per-thread program
|
On older kernels, this may need to be found from the list of coresight devices,
|
||||||
|
available under ($SYSFS)/bus/coresight/devices/:
|
||||||
|
|
||||||
|
root:~# ls /sys/bus/coresight/devices/
|
||||||
|
etm0 etm1 etm2 etm3 etm4 etm5 funnel0
|
||||||
|
funnel1 funnel2 replicator0 stm0 tmc_etf0 tmc_etr0 tpiu0
|
||||||
|
|
||||||
|
root@linaro-nano:~# perf record -e cs_etm/@tmc_etr0/u --per-thread program
|
||||||
|
|
||||||
|
As mentioned above in section "Device Naming scheme", the names of the devices could
|
||||||
|
look different from what is used in the example above. One must use the device names
|
||||||
|
as it appears under the sysFS.
|
||||||
|
|
||||||
The syntax within the forward slashes '/' is important. The '@' character
|
The syntax within the forward slashes '/' is important. The '@' character
|
||||||
tells the parser that a sink is about to be specified and that this is the sink
|
tells the parser that a sink is about to be specified and that this is the sink
|
||||||
|
@ -352,7 +404,7 @@ perf can be used to record and analyze trace of programs.
|
||||||
Execution can be recorded using 'perf record' with the cs_etm event,
|
Execution can be recorded using 'perf record' with the cs_etm event,
|
||||||
specifying the name of the sink to record to, e.g:
|
specifying the name of the sink to record to, e.g:
|
||||||
|
|
||||||
perf record -e cs_etm/@20070000.etr/u --per-thread
|
perf record -e cs_etm/@tmc_etr0/u --per-thread
|
||||||
|
|
||||||
The 'perf report' and 'perf script' commands can be used to analyze execution,
|
The 'perf report' and 'perf script' commands can be used to analyze execution,
|
||||||
synthesizing instruction and branch events from the instruction trace.
|
synthesizing instruction and branch events from the instruction trace.
|
||||||
|
@ -381,7 +433,7 @@ sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tuto
|
||||||
Bubble sorting array of 30000 elements
|
Bubble sorting array of 30000 elements
|
||||||
5910 ms
|
5910 ms
|
||||||
|
|
||||||
$ perf record -e cs_etm/@20070000.etr/u --per-thread taskset -c 2 ./sort
|
$ perf record -e cs_etm/@tmc_etr0/u --per-thread taskset -c 2 ./sort
|
||||||
Bubble sorting array of 30000 elements
|
Bubble sorting array of 30000 elements
|
||||||
12543 ms
|
12543 ms
|
||||||
[ perf record: Woken up 35 times to write data ]
|
[ perf record: Woken up 35 times to write data ]
|
||||||
|
@ -405,7 +457,7 @@ than the program flow through the code.
|
||||||
As with any other CoreSight component, specifics about the STM tracer can be
|
As with any other CoreSight component, specifics about the STM tracer can be
|
||||||
found in sysfs with more information on each entry being found in [1]:
|
found in sysfs with more information on each entry being found in [1]:
|
||||||
|
|
||||||
root@genericarmv8:~# ls /sys/bus/coresight/devices/20100000.stm
|
root@genericarmv8:~# ls /sys/bus/coresight/devices/stm0
|
||||||
enable_source hwevent_select port_enable subsystem uevent
|
enable_source hwevent_select port_enable subsystem uevent
|
||||||
hwevent_enable mgmt port_select traceid
|
hwevent_enable mgmt port_select traceid
|
||||||
root@genericarmv8:~#
|
root@genericarmv8:~#
|
||||||
|
@ -413,14 +465,14 @@ root@genericarmv8:~#
|
||||||
Like any other source a sink needs to be identified and the STM enabled before
|
Like any other source a sink needs to be identified and the STM enabled before
|
||||||
being used:
|
being used:
|
||||||
|
|
||||||
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/20010000.etf/enable_sink
|
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
|
||||||
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/20100000.stm/enable_source
|
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/stm0/enable_source
|
||||||
|
|
||||||
From there user space applications can request and use channels using the devfs
|
From there user space applications can request and use channels using the devfs
|
||||||
interface provided for that purpose by the generic STM API:
|
interface provided for that purpose by the generic STM API:
|
||||||
|
|
||||||
root@genericarmv8:~# ls -l /dev/20100000.stm
|
root@genericarmv8:~# ls -l /dev/stm0
|
||||||
crw------- 1 root root 10, 61 Jan 3 18:11 /dev/20100000.stm
|
crw------- 1 root root 10, 61 Jan 3 18:11 /dev/stm0
|
||||||
root@genericarmv8:~#
|
root@genericarmv8:~#
|
||||||
|
|
||||||
Details on how to use the generic STM API can be found here [2].
|
Details on how to use the generic STM API can be found here [2].
|
||||||
|
|
Loading…
Add table
Reference in a new issue