mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
coresight: stm: adding driver for CoreSight STM component
This driver adds support for the STM CoreSight IP block, allowing any system compoment (HW or SW) to log and aggregate messages via a single entity. The CoreSight STM exposes an application defined number of channels called stimulus port. Configuration is done using entries in sysfs and channels made available to userspace via configfs. Signed-off-by: Pratik Patel <pratikp@codeaurora.org> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-by: Michael Williams <michael.williams@arm.com> Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9eb933130d
commit
237483aa5c
53
Documentation/ABI/testing/sysfs-bus-coresight-devices-stm
Normal file
53
Documentation/ABI/testing/sysfs-bus-coresight-devices-stm
Normal file
@@ -0,0 +1,53 @@
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/enable_source
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Enable/disable tracing on this specific trace macrocell.
|
||||
Enabling the trace macrocell implies it has been configured
|
||||
properly and a sink has been identified for it. The path
|
||||
of coresight components linking the source to the sink is
|
||||
configured and managed automatically by the coresight framework.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/hwevent_enable
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Provides access to the HW event enable register, used in
|
||||
conjunction with HW event bank select register.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/hwevent_select
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Gives access to the HW event block select register
|
||||
(STMHEBSR) in order to configure up to 256 channels. Used in
|
||||
conjunction with "hwevent_enable" register as described above.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/port_enable
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Provides access to the stimulus port enable register
|
||||
(STMSPER). Used in conjunction with "port_select" described
|
||||
below.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/port_select
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Used to determine which bank of stimulus port bit in
|
||||
register STMSPER (see above) apply to.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/status
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (R) List various control and status registers. The specific
|
||||
layout and content is driver specific.
|
||||
|
||||
What: /sys/bus/coresight/devices/<memory_map>.stm/traceid
|
||||
Date: April 2016
|
||||
KernelVersion: 4.7
|
||||
Contact: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||
Description: (RW) Holds the trace ID that will appear in the trace stream
|
||||
coming from this trace entity.
|
||||
@@ -190,8 +190,8 @@ expected to be accessed and controlled using those entries.
|
||||
Last but not least, "struct module *owner" is expected to be set to reflect
|
||||
the information carried in "THIS_MODULE".
|
||||
|
||||
How to use
|
||||
----------
|
||||
How to use the tracer modules
|
||||
-----------------------------
|
||||
|
||||
Before trace collection can start, a coresight sink needs to be identify.
|
||||
There is no limit on the amount of sinks (nor sources) that can be enabled at
|
||||
@@ -297,3 +297,36 @@ Info Tracing enabled
|
||||
Instruction 13570831 0x8026B584 E28DD00C false ADD sp,sp,#0xc
|
||||
Instruction 0 0x8026B588 E8BD8000 true LDM sp!,{pc}
|
||||
Timestamp Timestamp: 17107041535
|
||||
|
||||
How to use the STM module
|
||||
-------------------------
|
||||
|
||||
Using the System Trace Macrocell module is the same as the tracers - the only
|
||||
difference is that clients are driving the trace capture rather
|
||||
than the program flow through the code.
|
||||
|
||||
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]:
|
||||
|
||||
root@genericarmv8:~# ls /sys/bus/coresight/devices/20100000.stm
|
||||
enable_source hwevent_select port_enable subsystem uevent
|
||||
hwevent_enable mgmt port_select traceid
|
||||
root@genericarmv8:~#
|
||||
|
||||
Like any other source a sink needs to be identified and the STM enabled before
|
||||
being used:
|
||||
|
||||
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/20010000.etf/enable_sink
|
||||
root@genericarmv8:~# echo 1 > /sys/bus/coresight/devices/20100000.stm/enable_source
|
||||
|
||||
From there user space applications can request and use channels using the devfs
|
||||
interface provided for that purpose by the generic STM API:
|
||||
|
||||
root@genericarmv8:~# ls -l /dev/20100000.stm
|
||||
crw------- 1 root root 10, 61 Jan 3 18:11 /dev/20100000.stm
|
||||
root@genericarmv8:~#
|
||||
|
||||
Details on how to use the generic STM API can be found here [2].
|
||||
|
||||
[1]. Documentation/ABI/testing/sysfs-bus-coresight-devices-stm
|
||||
[2]. Documentation/trace/stm.txt
|
||||
|
||||
@@ -78,4 +78,15 @@ config CORESIGHT_QCOM_REPLICATOR
|
||||
programmable ATB replicator sends the ATB trace stream from the
|
||||
ETB/ETF to the TPIUi and ETR.
|
||||
|
||||
config CORESIGHT_STM
|
||||
bool "CoreSight System Trace Macrocell driver"
|
||||
depends on (ARM && !(CPU_32v3 || CPU_32v4 || CPU_32v4T)) || ARM64
|
||||
select CORESIGHT_LINKS_AND_SINKS
|
||||
select STM
|
||||
help
|
||||
This driver provides support for hardware assisted software
|
||||
instrumentation based tracing. This is primarily used for
|
||||
logging useful software events or data coming from various entities
|
||||
in the system, possibly running different OSs
|
||||
|
||||
endif
|
||||
|
||||
@@ -13,3 +13,4 @@ obj-$(CONFIG_CORESIGHT_SOURCE_ETM3X) += coresight-etm3x.o coresight-etm-cp14.o \
|
||||
obj-$(CONFIG_CORESIGHT_SOURCE_ETM4X) += coresight-etm4x.o \
|
||||
coresight-etm4x-sysfs.o
|
||||
obj-$(CONFIG_CORESIGHT_QCOM_REPLICATOR) += coresight-replicator-qcom.o
|
||||
obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o
|
||||
|
||||
920
drivers/hwtracing/coresight/coresight-stm.c
Normal file
920
drivers/hwtracing/coresight/coresight-stm.c
Normal file
File diff suppressed because it is too large
Load Diff
6
include/linux/coresight-stm.h
Normal file
6
include/linux/coresight-stm.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef __LINUX_CORESIGHT_STM_H_
|
||||
#define __LINUX_CORESIGHT_STM_H_
|
||||
|
||||
#include <uapi/linux/coresight-stm.h>
|
||||
|
||||
#endif
|
||||
21
include/uapi/linux/coresight-stm.h
Normal file
21
include/uapi/linux/coresight-stm.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef __UAPI_CORESIGHT_STM_H_
|
||||
#define __UAPI_CORESIGHT_STM_H_
|
||||
|
||||
#define STM_FLAG_TIMESTAMPED BIT(3)
|
||||
#define STM_FLAG_GUARANTEED BIT(7)
|
||||
|
||||
/*
|
||||
* The CoreSight STM supports guaranteed and invariant timing
|
||||
* transactions. Guaranteed transactions are guaranteed to be
|
||||
* traced, this might involve stalling the bus or system to
|
||||
* ensure the transaction is accepted by the STM. While invariant
|
||||
* timing transactions are not guaranteed to be traced, they
|
||||
* will take an invariant amount of time regardless of the
|
||||
* state of the STM.
|
||||
*/
|
||||
enum {
|
||||
STM_OPTION_GUARANTEED = 0,
|
||||
STM_OPTION_INVARIANT,
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user