Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
metadata:
name: Coresight-Sink-Source-Test
format: "Lava-Test Test Definition 1.0"
description: "This test iterates through all CoreSight sources and sinks to validate end‑to‑end trace path accessibility. It ensures trace data capture works correctly and that all sources are cleanly disabled after execution."
os:
- linux
scope:
- coresight
- kernel

run:
steps:
- REPO_PATH=$PWD || true
- cd Runner/suites/Kernel/DEBUG/Coresight-Sink-Source-Test || true
- ./run.sh || true
- $REPO_PATH/Runner/utils/send-to-lava.sh Coresight-Sink-Source-Test.res || true
82 changes: 82 additions & 0 deletions Runner/suites/Kernel/DEBUG/Coresight-Sink-Source-Test/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Coresight-Sink-Source-Test

## Overview
The `Coresight-Sink-Source-Test` test iterates through all CoreSight sources and sinks to validate end‑to‑end trace path accessibility. It ensures trace data capture works correctly and that all sources are cleanly disabled after execution.

## Test Goals

- Verify that the CoreSight sink correctly switches to ETF mode.
- Validate STM trace data routing to ETF via Ftrace integration.
- Ensure sched_switch events are captured and stored in the ETF buffer.
- Confirm valid trace data generation by checking ETF output size.

## Prerequisites

- Coresight framework enabled in the kernel with `sysfs` and `debugfs` accessible
- Multiple Coresight sink and source devices should be present
- Coresight STM, ETM, ETF devices must be included
- Root priviledges

## Script Location

```
Runner/suites/Kernel/DEBUG/Coresight-Sink-Source-Test/run.sh
```

## Files

- `run.sh` - Main test script
- `Coresight-Sink-Source-Test.res` - Summary result file with PASS/FAIL
- `Coresight-Sink-Source-Test.log` - Full execution log.

## How it works
1. Parses input parameters, sources common utilities, gathers all CoreSight devices, and configures the ETR sink to memory output mode.
2. Loops over all valid CoreSight sinks and sources, optionally skipping remote ETMs and unsupported TPDM sources.
3. Resets all sources and sinks, enables one sink at a time, then enables each applicable source to form a complete trace path.
4. Reads trace data from each sink device and verifies successful data capture based on output file size.
5. Resets the system again and checks that all sources are properly disabled before reporting pass or fail status.

## Usage

Run the script directly. No iterations or special arguments are required for this basic test.

```bash
./run.sh
```

## Example Output

```
[INFO] 2026-04-06 05:17:08 - ---------------------------Coresight-Sink-Source-Test Starting---------------------------
[INFO] 2026-04-06 05:17:08 - Starting iteration: 1
[INFO] 2026-04-06 05:17:08 - Sink Active:- tmc_etf0
[INFO] 2026-04-06 05:17:09 - Source: etm0 with trace captured of size 65536 bytes
[INFO] 2026-04-06 05:17:10 - Source: etm1 with trace captured of size 65536 bytes
[INFO] 2026-04-06 05:17:11 - Source: etm2 with trace captured of size 65536 bytes
.........
[INFO] 2026-04-06 05:20:15 - Source: tpdm7 with trace captured of size 96 bytes
[INFO] 2026-04-06 05:20:16 - Source: tpdm8 with trace captured of size 96 bytes
[INFO] 2026-04-06 05:20:17 - Source: tpdm9 with trace captured of size 80 bytes
[INFO] 2026-04-06 05:20:17 - PASS: coresight source/sink path test
[INFO] 2026-04-06 05:20:17 - ---------------------------Coresight-Sink-Source-Test Finished---------------------------
```

## Return Code

- `0` — All test cases passed
- `1` — One or more test cases failed

## Integration in CI

- Can be run standalone or via LAVA
- Result file `Coresight-Sink-Source-Test.res` will be parsed by `result_parse.sh`

## Notes

- Remote ETM sources and unsupported TPDM sources are conditionally skipped during testing.
- Trace validity is confirmed by checking a minimum output file size from each sink.

## License

SPDX-License-Identifier: BSD-3-Clause.
(c) Qualcomm Technologies, Inc. and/or its subsidiaries.
166 changes: 166 additions & 0 deletions Runner/suites/Kernel/DEBUG/Coresight-Sink-Source-Test/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
#!/bin/sh

# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
# SPDX-License-Identifier: BSD-3-Clause

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INIT_ENV=""
SEARCH="$SCRIPT_DIR"
while [ "$SEARCH" != "/" ]; do
if [ -f "$SEARCH/init_env" ]; then
INIT_ENV="$SEARCH/init_env"
break
fi
SEARCH=$(dirname "$SEARCH")
done

if [ -z "$INIT_ENV" ]; then
echo "[ERROR] Could not find init_env" >&2
exit 1
fi

if [ -z "$__INIT_ENV_LOADED" ]; then
# shellcheck disable=SC1090
. "$INIT_ENV"
__INIT_ENV_LOADED=1
fi

# shellcheck disable=SC1090,SC1091
. "$TOOLS/functestlib.sh"
# shellcheck disable=SC1090,SC1091
. "$TOOLS/coresight_helper.sh"

TESTNAME="Coresight-Sink-Source-Test"
test_path=$(find_test_case_by_name "$TESTNAME")
cd "$test_path" || exit 1
res_file="./$TESTNAME.res"
log_info "---------------------------$TESTNAME Starting---------------------------"
no_remote_etm=0
if [ "$#" -eq 1 ]; then
no_remote_etm=1
fi
cs_base="/sys/bus/coresight/devices"
fail=0

if [ ! -d "$cs_base" ]; then
log_warn "Coresight directory $cs_base not found. Skipping test."
echo "$TESTNAME SKIP" > "$res_file"
exit 0
fi

cleanup() {
reset_coresight
}
trap cleanup EXIT HUP INT TERM

reset_coresight
sinks=""
sources=""
for node in "$cs_base"/*; do
[ ! -d "$node" ] && continue
node_name=$(basename "$node")

if [ -f "$node/enable_sink" ]; then
[ "$node_name" = "tmc_etf1" ] && continue
sinks="$sinks $node"

if [ -f "$node/out_mode" ]; then
echo mem > "$node/out_mode" 2>/dev/null || true
fi
fi

if [ -f "$node/enable_source" ]; then
sources="$sources $node"
fi
done

sinks=${sinks# }
sources=${sources# }
if [ -z "$sinks" ]; then
log_warn "No Coresight sinks found. Skipping test."
echo "$TESTNAME SKIP" > "$res_file"
exit 0
fi

if [ -z "$sources" ]; then
log_warn "No Coresight sources found. Skipping test."
echo "$TESTNAME SKIP" > "$res_file"
exit 0
fi

i=0
while [ "$i" -le 2 ]; do
log_info "Starting iteration: $((i+1))"
for sink_node in $sinks; do
sink_dev=$(basename "$sink_node")
log_info "Sink Active:- $sink_dev"

for source_node in $sources; do
dev_name=$(basename "$source_node")

case "$dev_name" in
*etm*)
if [ "$no_remote_etm" -eq 1 ]; then
continue
fi
;;
*tpdm-vsense* | *tpdm-qm*)
continue
;;
esac
reset_coresight

[ -f "$sink_node/enable_sink" ] && echo 1 > "$sink_node/enable_sink" 2>/dev/null
if [ -f "$source_node/enable_source" ]; then
echo 1 > "$source_node/enable_source" 2>/dev/null
ret=$(tr -d ' ' < "$source_node/enable_source")
if [ "$ret" = "0" ]; then
log_fail "FAIL: enable source in $dev_name"
fail=1
continue
fi
fi
sleep 1
reset_coresight

rm -f "/tmp/$sink_dev.bin"
if [ -c "/dev/$sink_dev" ]; then
cat "/dev/$sink_dev" > "/tmp/$sink_dev.bin" 2>/dev/null
outfilesize=$(wc -c < "/tmp/$sink_dev.bin" 2>/dev/null | tr -d ' ')
else
log_warn "Character device /dev/$sink_dev not found! Skipping read."
outfilesize=0
fi

if [ -n "$outfilesize" ] && [ "$outfilesize" -ge 64 ]; then
log_info "Source: $dev_name with trace captured of size $outfilesize bytes"
else
log_fail "Source: $dev_name with no traces captured of size ${outfilesize:-0}"
fail=1
fi
done
done
i=$((i + 1))
done
reset_coresight

for source_node in $sources; do
dev_name=$(basename "$source_node")
if [ -f "$source_node/enable_source" ]; then
ret=$(tr -d ' ' < "$source_node/enable_source")
if [ "$ret" = "1" ]; then
log_fail "fail to disable source in $dev_name during final verification"
fail=1
fi
fi
done

if [ "$fail" -eq 0 ]; then
log_pass "$TESTNAME : Test Passed"
echo "$TESTNAME PASS" > "$res_file"
else
log_fail "$TESTNAME : Test Failed"
echo "$TESTNAME FAIL" > "$res_file"
fi

log_info "---------------------------$TESTNAME Finished---------------------------"
93 changes: 93 additions & 0 deletions Runner/suites/Kernel/DEBUG/Single-Sink-Reset-Base/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Single-Sink-Reset-Base

## Overview

Thie `Single-Sink-Reset-Base` test validates CoreSight sink reset behavior while STM/ETM sources are actively generating trace data. It ensures all sinks properly reset and trace capture remains functional after repeated reset operations.

## Test Goals

- Ensure CoreSight sinks can be safely reset while STM or ETM sources are actively generating trace data.
- Repeatedly perform sink enable, source enable, and reset operations across numerous iterations to expose timing or stability issues.
- Verify through sysfs that no CoreSight sink remains enabled after a reset, even when the reset occurs during active tracing.
- Validate that trace data can still be captured and read from an ETF sink after extensive sink reset operations.

## Prerequisites

- Kernel must be built with Coresight support.
- sysfs access to `/sys/bus/coresight/devices/stm0/`.
- Multiple Coresight sink devices (`tmc_et*`).
- Coresight STM and ETM device nodes for post-test data generation.
- Root privileges.

## Script Location

```
`Runner/suites/Kernel/DEBUG/Single-Sink-Reset-Base/run.sh`
```

## Files

- `run.sh` - Main test script
- `Single-Sink-Reset-Base.res` - Summary result file with PASS/FAIL
- `Single-Sink-Reset-Base.log` - Full execution log (generated if logging is enabled)

## How It Works

1. Initialize the CoreSight hardware by disabling all sources and sinks globally.
2. **Stress Loop (default 250 iterations)**:
- For every available CoreSight sink (excluding `tmc_etf1`):
- Enable the target sink.
- Enable the active source (STM).
- Trigger `reset_source_sink` while data is flowing.
- Assert that the sink registers correctly as disabled (`enable_sink` == 0).
3. **Validation Phase**:
- Re-enable `tmc_etf0` (sink) and `etm0` (source).
- Dump standard character data directly from the ETF devnode.
- Fail if the dump yields less than 64 bytes of output, indicating a damaged trace path.

## Usage

Run the script directly. An optional numeric argument specifies loop iterations (default 250):

```bash
./run.sh

./run.sh [no. of iterations]
```

## Example Output
```
[INFO] 2026-04-06 09:29:06 - ------------------------Single-Sink-Reset-Base Starting------------------------
[INFO] 2026-04-06 09:29:07 - Starting sink reset test for 250 iterations...
[INFO] 2026-04-06 09:29:07 - Stress test running loop: 0
[INFO] 2026-04-06 09:29:10 - Stress test running loop: 1
[INFO] 2026-04-06 09:29:13 - Stress test running loop: 2
[INFO] 2026-04-06 09:29:16 - Stress test running loop: 3
..............
[INFO] 2026-04-06 09:41:47 - Stress test running loop: 247
[INFO] 2026-04-06 09:41:50 - Stress test running loop: 248
[INFO] 2026-04-06 09:41:53 - Stress test running loop: 249
[INFO] 2026-04-06 09:41:57 - Starting reset_sink functionality check by reading from tmc_etf0 using source etm0.
[PASS] 2026-04-06 09:42:02 - PASS: sink reset during active source
[INFO] 2026-04-06 09:42:02 - ------------------------Single-Sink-Reset-Base Finished------------------------
```

## Return Code

- `0` — All the sinks were enabled and reset successfully.
- `1` — One or more sink reset failed.

## Integration in CI

- Can be run standalone or via LAVA
- Result file `Single-Sink-Reset-Base.res` will be parsed by `result_parse.sh`

## Notes

- Each sink is tested individually while the trace source is active to isolate reset behavior per sink.
- A final ETF read check confirms that reset stress testing does not corrupt or disable normal trace data output.

## License

SPDX-License-Identifier: BSD-3-Clause
(c) Qualcomm Technologies, Inc. and/or its subsidiaries.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
metadata:
name: STM-HWEvent-Port-Enable-Disable
format: "Lava-Test Test Definition 1.0"
description: "This test validates CoreSight sink reset behavior while STM/ETM sources are actively generating trace data."
os:
- linux
scope:
- coresight
- kernel

run:
steps:
- REPO_PATH=$PWD || true
- cd Runner/suites/Kernel/DEBUG/Single-Sink-Reset-Base || true
- ./run.sh || true
- $REPO_PATH/Runner/utils/send-to-lava.sh Single-Sink-Reset-Base.res || true
Loading