From b1cf073266dd979cde2114c1e632b2ca460678e5 Mon Sep 17 00:00:00 2001 From: Sai-teja573 <122cs0573@nitrkl.ac.in> Date: Mon, 23 Jun 2025 16:11:36 +0530 Subject: [PATCH] Modularized adsp, cdsp, and wpss remoteproc tests using common helper functions. Refactored adsp, cdsp, and wpss remoteproc tests. Introduced modular helper usage and standardized logging. Signed-off-by: Sai-teja573 <122cs0573@nitrkl.ac.in> --- .../baseport/adsp_remoteproc/run.sh | 68 ++++++-------- .../baseport/cdsp_remoteproc/run.sh | 60 +++++-------- .../baseport/wpss_remoteproc/run.sh | 89 +++++++------------ Runner/utils/functestlib.sh | 48 ++++++++++ 4 files changed, 128 insertions(+), 137 deletions(-) diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh index d1775135..55a7a65e 100755 --- a/Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh +++ b/Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh @@ -14,12 +14,12 @@ while [ "$SEARCH" != "/" ]; do fi SEARCH=$(dirname "$SEARCH") done - + if [ -z "$INIT_ENV" ]; then echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2 exit 1 fi - + # Only source if not already loaded (idempotent) if [ -z "$__INIT_ENV_LOADED" ]; then # shellcheck disable=SC1090 @@ -30,61 +30,43 @@ fi . "$TOOLS/functestlib.sh" TESTNAME="adsp_remoteproc" +res_file="./$TESTNAME.res" test_path=$(find_test_case_by_name "$TESTNAME") cd "$test_path" || exit 1 -# shellcheck disable=SC2034 -res_file="./$TESTNAME.res" log_info "-----------------------------------------------------------------------------------------" log_info "-------------------Starting $TESTNAME Testcase----------------------------" log_info "=== Test Initialization ===" +log_info "Get the firmware output and find the position of adsp" -# Get the firmware output and find the position of adsp -log_info "Checking for firmware" -firmware_output=$(cat /sys/class/remoteproc/remoteproc*/firmware) -adsp_position=$(echo "$firmware_output" | grep -n "adsp" | cut -d: -f1) - -# Adjust the position to match the remoteproc numbering (starting from 0) -remoteproc_number=$((adsp_position - 1)) - -# Construct the remoteproc path based on the adsp position -remoteproc_path="/sys/class/remoteproc/remoteproc${remoteproc_number}" -log_info "Remoteproc node is $remoteproc_path" -# Execute command 1 and check if the output is "running" -state1=$(cat ${remoteproc_path}/state) - -if [ "$state1" != "running" ]; then - log_fail "$TESTNAME : Test Failed" - echo "$TESTNAME FAIL" > "$test_path/$TESTNAME.res" +rproc_path=$(get_remoteproc_path_by_firmware "adsp") || { + log_fail "$TESTNAME" "adsp remoteproc path not found" + echo "$TESTNAME FAIL" > "$res_file" exit 1 -fi +} +log_info "Found adsp remoteproc: $rproc_path" -# Execute command 2 (no output expected) -log_info "Stopping remoteproc" -echo stop > ${remoteproc_path}/state +state=$(get_remoteproc_state "$rproc_path") +[ "$state" = "running" ] || { + log_fail "$TESTNAME" "adsp remoteproc not running" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +} -# Execute command 3 and check if the output is "offline" -state3=$(cat ${remoteproc_path}/state) -if [ "$state3" != "offline" ]; then - log_fail "adsp stop failed" - echo "$TESTNAME FAIL" > "$test_path/$TESTNAME.res" +stop_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "adsp remoteproc stop failed" + echo "$TESTNAME FAIL" > "$res_file" exit 1 -else - log_pass "adsp stop successful" -fi -log_info "Restarting remoteproc" -# Execute command 4 (no output expected) -echo start > ${remoteproc_path}/state +} +log_pass "adsp stop successful" -# Execute command 5 and check if the output is "running" -state5=$(cat ${remoteproc_path}/state) -if [ "$state5" != "running" ]; then - log_fail "adsp start failed" - echo "$TESTNAME FAIL" > "$res_file" +log_info "Restarting remoteproc" +start_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "adsp remoteproc start failed" + echo "$TESTNAME FAIL" > "$res_file" exit 1 -fi +} -# If all checks pass, print "PASS" echo "adsp PASS" log_pass "adsp PASS" echo "$TESTNAME PASS" > "$res_file" diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh index 26e69677..f7f19abb 100755 --- a/Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh +++ b/Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh @@ -30,61 +30,45 @@ fi . "$TOOLS/functestlib.sh" TESTNAME="cdsp_remoteproc" +res_file="./$TESTNAME.res" test_path=$(find_test_case_by_name "$TESTNAME") cd "$test_path" || exit 1 -# shellcheck disable=SC2034 -res_file="./$TESTNAME.res" log_info "-----------------------------------------------------------------------------------------" log_info "-------------------Starting $TESTNAME Testcase----------------------------" log_info "=== Test Initialization ===" - -# Get the firmware output and find the position of cdsp log_info "Get the firmware output and find the position of cdsp" -firmware_output=$(cat /sys/class/remoteproc/remoteproc*/firmware) -cdsp_position=$(echo "$firmware_output" | grep -n "cdsp" | cut -d: -f1) - -# Adjust the position to match the remoteproc numbering (starting from 0) -remoteproc_number=$((cdsp_position - 1)) -# Construct the remoteproc path based on the cdsp position -remoteproc_path="/sys/class/remoteproc/remoteproc${remoteproc_number}" - -# Execute command 1 and check if the output is "running" -state1=$(cat ${remoteproc_path}/state) -if [ "$state1" != "running" ]; then - log_fail "$TESTNAME : Test Failed" - echo "$TESTNAME FAIL" > $test_path/$TESTNAME.res +rproc_path=$(get_remoteproc_path_by_firmware "cdsp") || { + log_fail "$TESTNAME" "cdsp remoteproc path not found" + echo "$TESTNAME FAIL" > "$res_file" exit 1 -fi +} +log_info "Found cdsp remoteproc: $rproc_path" -# Execute command 2 (no output expected) -echo stop > ${remoteproc_path}/state +state=$(get_remoteproc_state "$rproc_path") +[ "$state" = "running" ] || { + log_fail "$TESTNAME" "cdsp remoteproc not running" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +} -# Execute command 3 and check if the output is "offline" -state3=$(cat ${remoteproc_path}/state) -if [ "$state3" != "offline" ]; then - log_fail "cdsp stop failed" - echo "$TESTNAME FAIL" > $test_path/$TESTNAME.res +stop_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "cdsp remoteproc stop failed" + echo "$TESTNAME FAIL" > "$res_file" exit 1 -else - log_pass "cdsp stop successful" -fi -log_info "Restarting remoteproc" -# Execute command 4 (no output expected) -echo start > ${remoteproc_path}/state +} +log_pass "cdsp stop successful" -# Execute command 5 and check if the output is "running" -state5=$(cat ${remoteproc_path}/state) -if [ "$state5" != "running" ]; then - log_fail "cdsp start failed" +log_info "Restarting remoteproc" +start_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "cdsp remoteproc start failed" echo "$TESTNAME FAIL" > "$res_file" exit 1 -fi +} -# If all checks pass, print "PASS" echo "cdsp PASS" log_pass "cdsp PASS" -echo "$TESTNAME PASS" > "$res_file" +echo "$TESTNAME PASS" > "$res_file" log_info "-------------------Completed $TESTNAME Testcase----------------------------" exit 0 diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh index 2a1f7e8a..f1db3b78 100755 --- a/Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh +++ b/Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh @@ -14,12 +14,12 @@ while [ "$SEARCH" != "/" ]; do fi SEARCH=$(dirname "$SEARCH") done - + if [ -z "$INIT_ENV" ]; then echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2 exit 1 fi - + # Only source if not already loaded (idempotent) if [ -z "$__INIT_ENV_LOADED" ]; then # shellcheck disable=SC1090 @@ -29,70 +29,47 @@ fi # shellcheck disable=SC1090,SC1091 . "$TOOLS/functestlib.sh" + TESTNAME="wpss_remoteproc" +res_file="./$TESTNAME.res" test_path=$(find_test_case_by_name "$TESTNAME") cd "$test_path" || exit 1 -# shellcheck disable=SC2034 -res_file="./$TESTNAME.res" log_info "-----------------------------------------------------------------------------------------" log_info "-------------------Starting $TESTNAME Testcase----------------------------" log_info "=== Test Initialization ===" +log_info "Get the firmware output and find the position of wpss" -log_info "=== Detecting and validating WPSS remoteproc instance ===" - -log_info "Looking for remoteproc device exposing WPSS..." -wpss_path="" -for node in /sys/class/remoteproc/remoteproc*; do - [ -f "$node/name" ] || continue - name=$(cat "$node/name" 2>/dev/null | tr '[:upper:]' '[:lower:]') - if echo "$name" | grep -qi "wpss"; then - wpss_path="$node" - break - fi -done - -if [ -z "$wpss_path" ]; then - log_skip "WPSS remoteproc node not found" +rproc_path=$(get_remoteproc_path_by_firmware "wpss") || { + log_skip "wpss remoteproc path not found" echo "$TESTNAME SKIP" > "$res_file" exit 0 -fi - -log_info "Found WPSS remoteproc node at: $wpss_path" -firmware=$(cat "$wpss_path/firmware" 2>/dev/null) -log_info "WPSS firmware: $firmware" - -# Capture state before any change -orig_state=$(cat "$wpss_path/state" 2>/dev/null) -log_info "Original state: $orig_state" - -log_info "Attempting to stop WPSS..." -if echo stop > "$wpss_path/state" 2>/dev/null; then - sleep 1 - new_state=$(cat "$wpss_path/state" 2>/dev/null) - if [ "$new_state" != "offline" ]; then - log_warn "Expected offline state after stop, got: $new_state" - fi -else - log_warn "Could not stop WPSS; may already be offline" -fi - -log_info "Attempting to start WPSS..." -if echo start > "$wpss_path/state" 2>/dev/null; then - sleep 1 - final_state=$(cat "$wpss_path/state" 2>/dev/null) - if [ "$final_state" = "running" ]; then - log_pass "WPSS remoteproc started successfully" - echo "$TESTNAME PASS" > "$res_file" - exit 0 - else - log_fail "WPSS remoteproc failed to start, state: $final_state" - echo "$TESTNAME FAIL" > "$res_file" - exit 1 - fi -else - log_fail "Failed to write 'start' to $wpss_path/state" +} +log_info "Found wpss remoteproc: $rproc_path" + +state=$(get_remoteproc_state "$rproc_path") +[ "$state" = "running" ] || { + log_fail "$TESTNAME" "wpss remoteproc not running" echo "$TESTNAME FAIL" > "$res_file" exit 1 -fi +} + +stop_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "wpss remoteproc stop failed" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +} +log_pass "wpss stop successful" + +log_info "Restarting remoteproc" +start_remoteproc "$rproc_path" || { + log_fail "$TESTNAME" "wpss remoteproc start failed" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +} + +echo "wpss PASS" +log_pass "wpss PASS" +echo "$TESTNAME PASS" > "$res_file" log_info "-------------------Completed $TESTNAME Testcase----------------------------" +exit 0 diff --git a/Runner/utils/functestlib.sh b/Runner/utils/functestlib.sh index 68612bd7..e649c4ff 100755 --- a/Runner/utils/functestlib.sh +++ b/Runner/utils/functestlib.sh @@ -391,3 +391,51 @@ weston_start() { fi } +# Find the remoteproc path for a given firmware substring (e.g., "adsp", "cdsp", "gdsp"). +get_remoteproc_path_by_firmware() { + name="$1" + local idx path + # List all remoteproc firmware nodes, match name, and return the remoteproc path + idx=$(cat /sys/class/remoteproc/remoteproc*/firmware 2>/dev/null | grep -n "$name" | cut -d: -f1 | head -n1) + [ -z "$idx" ] && return 1 + idx=$((idx - 1)) + path="/sys/class/remoteproc/remoteproc${idx}" + [ -d "$path" ] && echo "$path" && return 0 + return 1 +} + +# Get current remoteproc state +get_remoteproc_state() { + rproc_path="$1" + [ -f "$rproc_path/state" ] && cat "$rproc_path/state" +} + +# Wait until remoteproc reaches a given state (with retries) +wait_remoteproc_state() { + rproc_path="$1" + target="$2" + retries="${3:-6}" + i=0 + while [ $i -lt "$retries" ]; do + state=$(get_remoteproc_state "$rproc_path") + [ "$state" = "$target" ] && return 0 + sleep 1 + i=$((i+1)) + done + return 1 +} + +# Stop remoteproc (wait for "offline") +stop_remoteproc() { + rproc_path="$1" + echo stop > "$rproc_path/state" + wait_remoteproc_state "$rproc_path" "offline" 6 +} + +# Start remoteproc (wait for "running") +start_remoteproc() { + rproc_path="$1" + echo start > "$rproc_path/state" + wait_remoteproc_state "$rproc_path" "running" 6 +} +