[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241216053503.GB1224111@hyd1403.caveonetworks.com>
Date: Mon, 16 Dec 2024 11:05:03 +0530
From: Linu Cherian <lcherian@...vell.com>
To: Shuah Khan <skhan@...uxfoundation.org>
CC: <suzuki.poulose@....com>, <mike.leach@...aro.org>, <james.clark@....com>,
<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>
Subject: Re: [PATCH] selftests: arm coresight: sysfsmode testing
Hi,
On 2024-12-04 at 05:53:56, Shuah Khan (skhan@...uxfoundation.org) 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?
Ack. Will add test descripion here.
>
> Does this test have dependencies on config? If it does, does
> this test detect and skip if config isn't enabled?
Will add dependency.
Thanks.
>
> >
> > 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