linux/drivers/hwtracing/coresight
Suzuki K Poulose 4474f4c40a coresight: STM: Balance enable/disable
The stm is automatically enabled when an application sets the policy
via ->link() call back by using coresight_enable(), which keeps the
refcount of the current users of the STM. However, the unlink() callback
issues stm_disable() directly, which leaves the STM turned off, without
the coresight layer knowing about it. This prevents any further uses
of the STM hardware as the coresight layer still thinks the STM is
turned on and doesn't enable the hardware when required. Even manually
enabling the STM via sysfs can't really enable the hw.

e.g,

 $ echo 1 > $CS_DEVS/$ETR/enable_sink
 $ mkdir -p $CONFIG_FS/stp-policy/$source.0/stm_test/
 $ echo 32768 65535 > $CONFIG_FS/stp-policy/$source.0/stm_test/channels
 $ echo 64 > $CS_DEVS/$source/traceid
 $ ./stm_app
 Sending 64000 byte blocks of pattern 0 at 0us intervals
 Success to map channel(32768~32783) to 0xffffa95fa000
 Sending on channel 32768
 $ dd if=/dev/$ETR of=~/trace.bin.1
 597+1 records in
 597+1 records out
 305920 bytes (306 kB) copied, 0.399952 s, 765 kB/s
 $ ./stm_app
 Sending 64000 byte blocks of pattern 0 at 0us intervals
 Success to map channel(32768~32783) to 0xffff7e9e2000
 Sending on channel 32768
 $ dd if=/dev/$ETR of=~/trace.bin.2
 0+0 records in
 0+0 records out
 0 bytes (0 B) copied, 0.0232083 s, 0.0 kB/s

 Note that we don't get any data from the ETR for the second session.

 Also dmesg shows :

 [   77.520458] coresight-tmc 20800000.etr: TMC-ETR enabled
 [   77.537097] coresight-replicator etr_replicator@20890000: REPLICATOR enabled
 [   77.558828] coresight-replicator main_replicator@208a0000: REPLICATOR enabled
 [   77.581068] coresight-funnel 208c0000.main_funnel: FUNNEL inport 0 enabled
 [   77.602217] coresight-tmc 20840000.etf: TMC-ETF enabled
 [   77.618422] coresight-stm 20860000.stm: STM tracing enabled
 [  139.554252] coresight-stm 20860000.stm: STM tracing disabled
  # End of first tracing session
 [  146.351135] coresight-tmc 20800000.etr: TMC read start
 [  146.514486] coresight-tmc 20800000.etr: TMC read end
  # Note that the STM is not turned on via stm_generic_link()->coresight_enable()
  # and hence none of the components are turned on.
 [  152.479080] coresight-tmc 20800000.etr: TMC read start
 [  152.542632] coresight-tmc 20800000.etr: TMC read end

This patch fixes the problem by balancing the unlink operation by using
the coresight_disable(), keeping the coresight layer in sync with the
hardware state and thus allowing normal usage of the STM component.

Fixes: commit 237483aa5c ("coresight: stm: adding driver for CoreSight STM component")
Cc: Pratik Patel <pratikp@codeaurora.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: stable@vger.kernel.org # 4.7+
Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: Chunyan Zhang <zhang.chunyan@linaro.org>
Reported-by: Robert Walker <robert.walker@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-01-19 12:42:25 +01:00
..
coresight-etb10.c coresight: fix handling of ETM trace register access via sysfs 2016-08-31 13:05:43 +02:00
coresight-etm3x-sysfs.c coresight: etm3x: Adding missing features of Coresight PTM components 2016-11-29 20:05:32 +01:00
coresight-etm3x.c cpu/hotplug: Cleanup state names 2016-12-25 10:47:44 +01:00
coresight-etm4x-sysfs.c coresight: remove duplicated enumeration 2016-08-31 13:05:43 +02:00
coresight-etm4x.c coresight/etm3/4x: Consolidate hotplug state space 2016-12-25 10:47:44 +01:00
coresight-etm4x.h coresight: remove duplicated enumeration 2016-08-31 13:05:43 +02:00
coresight-etm-cp14.c
coresight-etm-perf.c coresight: perf: Add a missing call to etm_free_aux 2016-11-29 20:05:32 +01:00
coresight-etm-perf.h coresight: etm-perf: configuring filters from perf core 2016-08-31 13:05:43 +02:00
coresight-etm.h coresight: etm3x: Adding missing features of Coresight PTM components 2016-11-29 20:05:32 +01:00
coresight-funnel.c coresight: Use local coresight_desc instances 2016-08-31 13:05:43 +02:00
coresight-priv.h coresight: reset "enable_sink" flag when need be 2016-11-29 20:05:32 +01:00
coresight-replicator-qcom.c coresight: Use local coresight_desc instances 2016-08-31 13:05:43 +02:00
coresight-replicator.c coresight: Use local coresight_desc instances 2016-08-31 13:05:43 +02:00
coresight-stm.c coresight: STM: Balance enable/disable 2017-01-19 12:42:25 +01:00
coresight-tmc-etf.c coresight: tmc: Get rid of mode parameter for helper routines 2016-11-29 20:05:32 +01:00
coresight-tmc-etr.c coresight: tmc: Remove duplicate memset 2016-11-29 20:05:32 +01:00
coresight-tmc.c coresight: tmc: mark symbols static where possible 2016-09-09 13:53:00 +02:00
coresight-tmc.h coresight: tmc: Cleanup operation mode handling 2016-11-29 20:05:32 +01:00
coresight-tpiu.c coresight: Use local coresight_desc instances 2016-08-31 13:05:43 +02:00
coresight.c coresight: reset "enable_sink" flag when need be 2016-11-29 20:05:32 +01:00
Kconfig coresight: stm: adding driver for CoreSight STM component 2016-05-03 14:59:30 -07:00
Makefile coresight: tmc: splitting driver in ETB/ETF and ETR components 2016-05-03 14:59:30 -07:00
of_coresight.c hwtracing: coresight: of_coresight: add missing of_node_put after calling of_parse_phandle 2016-08-31 13:05:43 +02:00