[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <91bb1592-4311-4afe-a728-fc9000b04aca@linaro.org>
Date: Wed, 4 Dec 2024 11:18:07 +0000
From: James Clark <james.clark@...aro.org>
To: Shuah Khan <skhan@...uxfoundation.org>,
Linu Cherian <lcherian@...vell.com>
Cc: linux-arm-kernel@...ts.infradead.org, coresight@...ts.linaro.org,
linux-kernel@...r.kernel.org, shuah@...nel.org,
linux-kselftest@...r.kernel.org, sgoutham@...vell.com, gcherian@...vell.com,
Suzuki K Poulose <Suzuki.Poulose@....com>, Mike Leach
<mike.leach@...aro.org>, Leo Yan <leo.yan@....com>
Subject: Re: [PATCH] selftests: arm coresight: sysfsmode testing
On 04/12/2024 12:23 am, Shuah Khan wrote:
> On 11/29/24 01:38, Linu Cherian wrote:
>> Add sysfs mode selftest for ARM Coresight hardware tracer.
>
> Please add details on what this test does in here. Include
> the output from the test?
>
> Does this test have dependencies on config? If it does, does
> this test detect and skip if config isn't enabled?
>
Without the config the test won't find any devices and it will still
pass. But yes it would still be good to explicitly mark the dependency.
>>
>> Signed-off-by: Linu Cherian <lcherian@...vell.com>
>> ---
>> .../drivers/hwtracing/coresight/Makefile | 5 +
>> .../hwtracing/coresight/sysfs_test_trace.sh | 144 ++++++++++++++++++
>> 2 files changed, 149 insertions(+)
>> create mode 100644 tools/testing/selftests/drivers/hwtracing/
>> coresight/Makefile
>> create mode 100755 tools/testing/selftests/drivers/hwtracing/
>> coresight/sysfs_test_trace.sh
>>
>> diff --git a/tools/testing/selftests/drivers/hwtracing/coresight/
>> Makefile b/tools/testing/selftests/drivers/hwtracing/coresight/Makefile
>> new file mode 100644
>> index 000000000000..7dc68ae1c0a9
>> --- /dev/null
>> +++ b/tools/testing/selftests/drivers/hwtracing/coresight/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +TEST_PROGS = sysfs_test_trace.sh
>> +
>> +include ../../../lib.mk
>> diff --git a/tools/testing/selftests/drivers/hwtracing/coresight/
>> sysfs_test_trace.sh b/tools/testing/selftests/drivers/hwtracing/
>> coresight/sysfs_test_trace.sh
>> new file mode 100755
>> index 000000000000..0d6307fff1d2
>> --- /dev/null
>> +++ b/tools/testing/selftests/drivers/hwtracing/coresight/
>> sysfs_test_trace.sh
>> @@ -0,0 +1,144 @@
>> +#!/bin/sh
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (C) 2024 Marvell.
>> +
>> +# Test Arm CoreSight trace capture in sysfs mode
>> +# Based on tools/perf/tests/shell/test_arm_coresight.sh
>> +
>> +glb_err=0
>> +
>> +arm_cs_report() {
>> + if [ $2 != 0 ]; then
>> + echo "$1: FAIL"
>> + glb_err=$2
>> + else
>> + echo "$1: PASS"
>> + fi
>> +}
>> +
>> +is_device_sink() {
>> + # If the node of "enable_sink" is existed under the device path,
>> this
>> + # means the device is a sink device.
>> +
>> + if [ -e "$1/enable_sink" ]; then
>> +
>> + return 0
>> + else
>> + return 1
>> + fi
>> +}
>> +
>> +# Configure sink for buffer mode
>> +cfg_sink_buf_mode() {
>> + sink_dev=$1
>> + mode=$2
>> + # Set buffer mode if supported
>> + if [ -e "$sink_dev/buf_modes_available" ]; then
>> + cat $sink_dev/buf_modes_available | grep -E -q $mode
>> + if [ $? -eq 0 ]; then
>> + echo $mode > $sink_dev/buf_mode_preferred
>> + return 0
>> + fi
>> + fi
>> +
>> + return 1
>> +}
>> +
>> +run_app() {
>> +
>> + taskset -c $1 dd if=/dev/urandom of=/dev/null bs=1M count=64
>> +}
>> +
>> +sysfs_trace() {
>> + src_dev=$1
>> + sink_dev=$2
>> + cpu=$3
>> +
>> + # Enable sink device
>> + echo 1 > $sink_dev/enable_sink
>> + # Enable source device
>> + echo 1 > $src_dev/enable_source
>> +
>> + # Run app to be traced
>> + run_app $cpu
>> +
>> + # Read back trace data
>> + dd if=/dev/$sink_dev_name of=/tmp/tracedata
>> +
>> + # Verify if read is successful
>> + err=$?
>> +
>> + # Disable source device
>> + echo 0 > $src_dev/enable_source
>> +
>> + # Diskable sink device
>> + echo 0 > $sink_dev/enable_sink
>> +
>> + arm_cs_report "CoreSight path testing (CPU$cpu ->
>> $sink_dev_name)" $err
>> +}
>> +
>> +try_sysfs_trace_resrv_buf() {
>> + src_dev=$1
>> + sink_dev=$2
>> + cpu=$3
>> +
>> + # Configure the resrved buffer mode if available
>> + cfg_sink_buf_mode $sink_dev "resrv"
>> + if [ $? -eq 0 ]; then
>> + echo "Running sysfs trace with resrv buf mode"
>> + sysfs_trace $src_dev $sink_dev $cpu
>> + # Restore buffer mode
>> + cfg_sink_buf_mode $sink_dev "auto"
>> + if [ $? -eq 1 ]; then
>> + echo "Failed to restore default buf mode"
>> + fi
>> + fi
>> +}
>> +
>> +arm_cs_iterate_devices() {
>> + src_dev=$1
>> + cpu=$3
>> + for cdev in $2/connections/out\:*; do
>> +
>> + # Skip testing if it's not a directory
>> + ! [ -d $cdev ] && continue;
>> +
>> + # Read out its symbol link file name
>> + sink_dev=`readlink -f $cdev`
>> +
>> + # Extract device name from path, e.g.
>> + # sink_dev = '/sys/devices/platform/20010000.etf/tmc_etf0'
>> + # `> sink_dev_name = 'tmc_etf0'
>> + sink_dev_name=$(basename $sink_dev)
>> +
>> + if is_device_sink $sink_dev; then
>> + # Run trace with resrv buf mode (if available)
>> + try_sysfs_trace_resrv_buf $src_dev $sink_dev $cpu
>> +
>> + # Run the default mode
>> + echo "Running sysfs trace with default settings"
>> + sysfs_trace $src_dev $sink_dev $cpu
>> + fi
>> +
>> + arm_cs_iterate_devices $src_dev $cdev $cpu
>> +
>> + done
>> +}
>> +
>> +arm_cs_etm_traverse_path_test() {
>> + # Iterate for every ETM device
>> + for dev in /sys/bus/event_source/devices/cs_etm/cpu*; do
>> + # Canonicalize the path
>> + dev=`readlink -f $dev`
>> +
>> + # Find the ETM device belonging to which CPU
>> + cpu=`cat $dev/cpu`
>> +
>> + # Use depth-first search (DFS) to iterate outputs
>> + arm_cs_iterate_devices $dev $dev $cpu
>> + done
>> +}
>> +
>> +arm_cs_etm_traverse_path_test
>> +
>> +exit $glb_err
>
> thanks,
> -- Shuah
>
Powered by blists - more mailing lists