Skip to content
Merged
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
Expand Up @@ -10,8 +10,15 @@ Uses `qrtr-lookup` to validate the service published by public
- version: `1`
- instance: `0`

The lookup uses the shared bounded QRTR topology helper. The same retained
inventory and service-matching contract can be reused by FastRPC diagnostics
and focused PD Mapper, TQFTP, and time-service validation without duplicating
QRTR parsing or introducing unbounded waits.

The values can be overridden with `RMTFS_QMI_SERVICE`, `RMTFS_QMI_VERSION`, and
`RMTFS_QMI_INSTANCE` for a documented downstream implementation.
`RMTFS_QMI_INSTANCE` for a documented downstream implementation. The bounded
lookup defaults to ten seconds and can be adjusted with
`QRTR_LOOKUP_TIMEOUT`.

On an applicable mainline platform, the suite temporarily loads `rmtfs_mem`
and starts the image-provided service when necessary. Failure to start the
Expand All @@ -23,3 +30,31 @@ diagnostic. Module and service state are restored after the lookup.
cd Runner
./run-test.sh RMTFS_QMI_Service_Validation
```

Run the suite directly on the target when investigating the service:

```sh
cd Runner/suites/Kernel/Baseport/Storage/RMTFS_QMI_Service_Validation
./run.sh
```

Without overrides, this validates service `14`, version `1`, instance `0`,
using a ten-second bounded QRTR lookup. The effective values are printed at
startup.

Optionally override the default bounded lookup timeout:

```sh
QRTR_LOOKUP_TIMEOUT=20 ./run.sh
```

Check the result and retained QRTR topology:

```sh
cat RMTFS_QMI_Service_Validation.res
test -r qrtr_lookup_rmtfs.log && cat qrtr_lookup_rmtfs.log
```

An applicable RMTFS platform fails when the bounded query is broken or the
expected `14 1 0` service row is absent. A platform without runtime RMTFS
evidence, or an image without optional `qrtr-lookup`, is reported as SKIP.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ RES_FILE="$SCRIPT_DIR/$TESTNAME.res"
SERVICE_ID="${RMTFS_QMI_SERVICE:-14}"
SERVICE_VERSION="${RMTFS_QMI_VERSION:-1}"
SERVICE_INSTANCE="${RMTFS_QMI_INSTANCE:-0}"
QRTR_LOOKUP_TIMEOUT="${QRTR_LOOKUP_TIMEOUT:-10}"
rm -f "$RES_FILE"

# shellcheck disable=SC2317
Expand Down Expand Up @@ -70,6 +71,13 @@ finish_result() {
trap cleanup_on_exit 0
trap 'exit 1' 1 2 15

OS_ID=$(pkg_detect_os_id 2>/dev/null || echo unknown)
RUN_LOG="$SCRIPT_DIR/qrtr_lookup_rmtfs.log"
rm -f "$RUN_LOG"
log_info "Starting $TESTNAME on OS=$OS_ID"
log_info "Configuration: RMTFS_QMI_SERVICE=$SERVICE_ID RMTFS_QMI_VERSION=$SERVICE_VERSION RMTFS_QMI_INSTANCE=$SERVICE_INSTANCE QRTR_LOOKUP_TIMEOUT=${QRTR_LOOKUP_TIMEOUT}s"
log_info "Validation target: public linux-msm/rmtfs service=$SERVICE_ID version=$SERVICE_VERSION instance=$SERVICE_INSTANCE"

RMTFS_RUNTIME_DIR="$SCRIPT_DIR/rmtfs_runtime"
rmtfs_runtime_prepare "$RMTFS_RUNTIME_DIR"
PREPARE_RC=$?
Expand Down Expand Up @@ -102,32 +110,31 @@ if ! rmtfs_start_service_if_available || \
finish_result FAIL
fi

if ! command -v qrtr-lookup >/dev/null 2>&1; then
log_skip "$TESTNAME SKIP: qrtr-lookup is not installed"
finish_result SKIP
fi

OS_ID=$(pkg_detect_os_id 2>/dev/null || echo unknown)
RUN_LOG="$SCRIPT_DIR/qrtr_lookup_rmtfs.log"
rm -f "$RUN_LOG" "$RES_FILE"
log_info "Starting $TESTNAME on OS=$OS_ID"
log_info "Expecting public linux-msm/rmtfs registration: service=$SERVICE_ID version=$SERVICE_VERSION instance=$SERVICE_INSTANCE"
log_info "Validating public linux-msm/rmtfs registration: service=$SERVICE_ID version=$SERVICE_VERSION instance=$SERVICE_INSTANCE"

qrtr-lookup "$SERVICE_ID" > "$RUN_LOG" 2>&1
qrtr_capture_topology "$RUN_LOG" "$QRTR_LOOKUP_TIMEOUT"
LOOKUP_RC=$?
while IFS= read -r line; do
if [ -n "$line" ]; then
log_info "[qrtr-lookup] $line"
fi
done < "$RUN_LOG"

if [ "$LOOKUP_RC" -ne 0 ]; then
log_fail "$TESTNAME FAIL: qrtr-lookup returned $LOOKUP_RC"
finish_result FAIL
fi

if awk -v service="$SERVICE_ID" -v version="$SERVICE_VERSION" -v instance="$SERVICE_INSTANCE" \
'NR > 1 && $1 == service && $2 == version && $3 == instance { found=1 } END { exit !found }' "$RUN_LOG"; then
case "$LOOKUP_RC" in
0)
log_file_with_label "qrtr-lookup" "$RUN_LOG"
;;
2)
log_skip "$TESTNAME SKIP: QRTR runtime or qrtr-lookup is unavailable"
finish_result SKIP
;;
*)
log_file_with_label "qrtr-lookup" "$RUN_LOG"
log_fail "$TESTNAME FAIL: bounded QRTR topology query failed"
finish_result FAIL
;;
esac

if qrtr_topology_has_service \
"$RUN_LOG" \
"$SERVICE_ID" \
"$SERVICE_VERSION" \
"$SERVICE_INSTANCE"; then
log_pass "$TESTNAME PASS: RMTFS QMI service registration found"
finish_result PASS
fi
Expand Down
14 changes: 14 additions & 0 deletions Runner/suites/Multimedia/CDSP/fastrpc_test/fastrpc_test_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ offloading work to all supported DSP domains (ADSP, MDSP, SDSP, CDSP, CDSP1, GDS
It wraps the public [fastrpc test application](https://github.com/quic/fastrpc) with **robust
logging, parameter control, and CI-friendly output**.

When QRTR and `qrtr-lookup` are available, the suite captures one bounded QRTR
service-topology snapshot with its normal artifacts. This remains diagnostic
evidence and does not make QRTR a prerequisite for FastRPC transports on other
platforms. `QRTR_LOOKUP_TIMEOUT` optionally overrides the ten-second default.

Supported capabilities:
- Uses `fastrpc-healthcheck` when available to discover online DSPs, FastRPC support, signed and
unsigned PD support, firmware information, and DSP library paths. The reported DMA-BUF system
Expand Down Expand Up @@ -97,6 +102,7 @@ Env:
FASTRPC_EXTRA_FLAGS Extra flags appended (space-separated).
FASTRPC_HEALTHCHECK_BIN Optional path to fastrpc-healthcheck.
ALLOW_BIN_FASTRPC=1 Permit using /bin/fastrpc_test when --bin-dir=/bin.
QRTR_LOOKUP_TIMEOUT=<sec> Bound optional QRTR diagnostics (default: 10).
```

### Quick start
Expand All @@ -109,6 +115,12 @@ Env:
./run.sh --repeat 3 --timeout 60
```

To override the default bounded QRTR diagnostic window:

```sh
QRTR_LOOKUP_TIMEOUT=20 ./run.sh --repeat 1 --timeout 60
```

### Common scenarios

```bash
Expand Down Expand Up @@ -215,6 +227,8 @@ package gap remains visible until a matching payload is provisioned. Other domai
- **Per-iteration logs**: `logs_fastrpc_test_<timestamp>/<domain>_<pd>_iter<N>.out` (+ `.rc`, `.env`, `.cmd`)
- **Kernel evidence on failure**: one shared `logs_fastrpc_test_<timestamp>/kernel/` snapshot is
captured through `scan_dmesg_errors` after the invocation matrix.
- **Optional QRTR evidence**: `logs_fastrpc_test_<timestamp>/qrtr_topology.log` when QRTR and
`qrtr-lookup` are available.
- **Summary result file**: `fastrpc_test.res` (`PASS` / `FAIL` / `SKIP`)
- **Verbose mode**: adds environment, library resolution, and timing details

Expand Down
4 changes: 4 additions & 0 deletions Runner/suites/Multimedia/CDSP/fastrpc_test/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ CLI_DOMAIN=""
CLI_DOMAIN_NAME=""
DOMAIN_MODE="all-supported" # Default: test all supported domains
PD_MODE="both" # Default: test both PDs where supported
QRTR_LOOKUP_TIMEOUT="${QRTR_LOOKUP_TIMEOUT:-10}"

# usage
# Print the supported FastRPC test CLI, environment overrides, and selection policy.
Expand Down Expand Up @@ -103,6 +104,7 @@ Env:
FASTRPC_EXTRA_FLAGS Extra flags appended (space-separated).
FASTRPC_HEALTHCHECK_BIN Optional path to fastrpc-healthcheck.
ALLOW_BIN_FASTRPC=1 Permit using /bin/fastrpc_test when --bin-dir=/bin.
QRTR_LOOKUP_TIMEOUT=<sec> Bound optional QRTR diagnostics (default: 10).
Notes:
- Script *cd*s into the binary directory and launches ./fastrpc_test.
Expand Down Expand Up @@ -334,6 +336,8 @@ fi

log_info "Evidence directory: $test_path/$LOG_ROOT"

fastrpc_capture_qrtr_evidence "$LOG_ROOT"

# Prepare the image-provided DSP artifacts before healthcheck records capability.
# This is idempotent and remains a clean no-op when no source is available.
ensure_usr_lib_dsp_symlinks
Expand Down
35 changes: 35 additions & 0 deletions Runner/utils/lib_fastrpc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,41 @@ fastrpc_setup_runtime_layout() {
[ -n "${SDSP_LIBRARY_PATH:-}" ] && log_info "SDSP_LIBRARY_PATH=${SDSP_LIBRARY_PATH}"
}

# fastrpc_capture_qrtr_evidence <result-dir>
# Capture optional QRTR service topology alongside FastRPC artifacts without
# making QRTR a prerequisite for platforms whose FastRPC transport differs.
fastrpc_capture_qrtr_evidence() {
fcqe_result_dir="${1:-}"
fcqe_topology="$fcqe_result_dir/qrtr_topology.log"

[ -n "$fcqe_result_dir" ] || return 3

if ! command -v qrtr_capture_topology >/dev/null 2>&1; then
log_info "QRTR topology helper is unavailable, continuing FastRPC validation"
return 0
fi

log_info "FastRPC QRTR diagnostics: capturing bounded service topology timeout=${QRTR_LOOKUP_TIMEOUT:-10}s artifact=$fcqe_topology"
qrtr_capture_topology "$fcqe_topology" "${QRTR_LOOKUP_TIMEOUT:-10}"
fcqe_status=$?

case "$fcqe_status" in
0)
log_info "Captured QRTR service topology for FastRPC diagnostics"
log_file_with_label "qrtr-lookup" "$fcqe_topology"
;;
2)
log_info "QRTR runtime or qrtr-lookup is unavailable, continuing FastRPC validation"
;;
*)
log_warn "QRTR runtime is present but its bounded topology query failed, continuing the independent FastRPC test"
log_file_with_label "qrtr-lookup" "$fcqe_topology"
;;
esac

return 0
}

# -------------------- FastRPC test orchestration helpers --------------------

# log_debug MESSAGE...
Expand Down
Loading