diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/BWMON/run.sh b/Runner/suites/Kernel/Baseport/BWMON/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/BWMON/run.sh rename to Runner/suites/Kernel/Baseport/BWMON/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Buses/run.sh b/Runner/suites/Kernel/Baseport/Buses/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Buses/run.sh rename to Runner/suites/Kernel/Baseport/Buses/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/CPUFreq_Validation/README_CPUFreq_Validation.md b/Runner/suites/Kernel/Baseport/CPUFreq_Validation/README_CPUFreq_Validation.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/CPUFreq_Validation/README_CPUFreq_Validation.md rename to Runner/suites/Kernel/Baseport/CPUFreq_Validation/README_CPUFreq_Validation.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/CPUFreq_Validation/run.sh b/Runner/suites/Kernel/Baseport/CPUFreq_Validation/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/CPUFreq_Validation/run.sh rename to Runner/suites/Kernel/Baseport/CPUFreq_Validation/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/GIC/run.sh b/Runner/suites/Kernel/Baseport/GIC/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/GIC/run.sh rename to Runner/suites/Kernel/Baseport/GIC/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh b/Runner/suites/Kernel/Baseport/IPA/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh rename to Runner/suites/Kernel/Baseport/IPA/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/IPCC/run.sh b/Runner/suites/Kernel/Baseport/IPCC/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/IPCC/run.sh rename to Runner/suites/Kernel/Baseport/IPCC/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Interrupts/run.sh b/Runner/suites/Kernel/Baseport/Interrupts/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Interrupts/run.sh rename to Runner/suites/Kernel/Baseport/Interrupts/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/MEMLAT/run.sh b/Runner/suites/Kernel/Baseport/MEMLAT/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/MEMLAT/run.sh rename to Runner/suites/Kernel/Baseport/MEMLAT/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/Probe_Failure_Check_README.md b/Runner/suites/Kernel/Baseport/Probe_Failure_Check/Probe_Failure_Check_README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/Probe_Failure_Check_README.md rename to Runner/suites/Kernel/Baseport/Probe_Failure_Check/Probe_Failure_Check_README.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/run.sh b/Runner/suites/Kernel/Baseport/Probe_Failure_Check/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/run.sh rename to Runner/suites/Kernel/Baseport/Probe_Failure_Check/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh b/Runner/suites/Kernel/Baseport/RMNET/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh rename to Runner/suites/Kernel/Baseport/RMNET/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/Readme.md b/Runner/suites/Kernel/Baseport/Reboot_health_check/Readme.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/Readme.md rename to Runner/suites/Kernel/Baseport/Reboot_health_check/Readme.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/run.sh b/Runner/suites/Kernel/Baseport/Reboot_health_check/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/run.sh rename to Runner/suites/Kernel/Baseport/Reboot_health_check/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/setup_systemd.sh b/Runner/suites/Kernel/Baseport/Reboot_health_check/setup_systemd.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Reboot_health_check/setup_systemd.sh rename to Runner/suites/Kernel/Baseport/Reboot_health_check/setup_systemd.sh diff --git a/Runner/suites/Kernel/Baseport/Storage/UFS_Validation/run.sh b/Runner/suites/Kernel/Baseport/Storage/UFS_Validation/run.sh new file mode 100755 index 00000000..f42fe0b1 --- /dev/null +++ b/Runner/suites/Kernel/Baseport/Storage/UFS_Validation/run.sh @@ -0,0 +1,163 @@ +#!/bin/sh + +# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +# SPDX-License-Identifier: BSD-3-Clause-Clear + +# Robustly find and source init_env +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 (starting at $SCRIPT_DIR)" >&2 + exit 1 +fi + +# Only source if not already loaded +if [ -z "$__INIT_ENV_LOADED" ]; then + # shellcheck disable=SC1090 + . "$INIT_ENV" +fi + +# Always source functestlib.sh +# shellcheck disable=SC1090,SC1091 +. "$TOOLS/functestlib.sh" + +TESTNAME="UFS_Validation" +test_path=$(find_test_case_by_name "$TESTNAME") +cd "$test_path" || exit 1 +res_file="./$TESTNAME.res" + +log_info "--------------------------------------------------" +log_info "------------- Starting $TESTNAME Test ------------" + +check_dependencies dd grep cut head tail udevadm + +# --- Kernel Config Checks --- +MANDATORY_CONFIGS="CONFIG_SCSI_UFSHCD CONFIG_SCSI_UFS_QCOM" +OPTIONAL_CONFIGS="CONFIG_SCSI_UFSHCD_PLATFORM CONFIG_SCSI_UFSHCD_PCI CONFIG_SCSI_UFS_CDNS_PLATFORM CONFIG_SCSI_UFS_HISI CONFIG_SCSI_UFS_EXYNOS CONFIG_SCSI_UFS_ROCKCHIP CONFIG_SCSI_UFS_BSG" + +log_info "Checking mandatory kernel configs for UFS..." +if ! check_kernel_config "$MANDATORY_CONFIGS" 2>/dev/null; then + log_skip "Missing one or more mandatory UFS kernel configs: $MANDATORY_CONFIGS" + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +fi + +log_info "Checking optional kernel configs for UFS..." +missing_optional="" +for cfg in $OPTIONAL_CONFIGS; do + if ! check_kernel_config "$cfg" 2>/dev/null; then + log_info "[OPTIONAL] $cfg is not enabled" + missing_optional="$missing_optional $cfg" + fi +done +[ -n "$missing_optional" ] && log_info "Optional configs not present but continuing:$missing_optional" + +# --- Device Tree Check --- +check_dt_nodes "/sys/bus/platform/devices/*ufs*" || { + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +} + +# --- UFS Block Detection --- +detect_ufs_partition_block() { + if command -v lsblk >/dev/null 2>&1 && command -v udevadm >/dev/null 2>&1; then + for part in $(lsblk -lnpo NAME,TYPE | awk '$2 == "part" {print $1}'); do + if udevadm info --query=all --name="$part" 2>/dev/null | grep -qi "ufs"; then + echo "$part" + return 0 + fi + done + fi + + for part in /dev/sd[a-z][0-9]*; do + [ -e "$part" ] || continue + if command -v udevadm >/dev/null 2>&1 && + udevadm info --query=all --name="$part" 2>/dev/null | grep -qi "ufs"; then + echo "$part" + return 0 + fi + done + + return 1 +} + +block_dev=$(detect_ufs_partition_block) +if [ -z "$block_dev" ]; then + log_skip "No UFS block device found." + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +fi + +log_info "Detected UFS block: $block_dev" + +# --- RootFS Detection --- +if command -v findmnt >/dev/null 2>&1; then + rootfs_dev=$(findmnt -n -o SOURCE /) +else + log_warn "findmnt not available, using fallback rootfs detection" + rootfs_dev=$(awk '$2 == "/" { print $1 }' /proc/mounts) +fi + +resolved_block=$(readlink -f "$block_dev" 2>/dev/null) +resolved_rootfs=$(readlink -f "$rootfs_dev" 2>/dev/null) + +# --- Read Test (check if 'iflag=direct' supported) --- +log_info "Running basic read test on $block_dev (non-rootfs)..." + +# Test for iflag=direct support +if echo | dd of=/dev/null iflag=direct 2>/dev/null; then + DD_CMD="dd if=$block_dev of=/dev/null bs=1M count=32 iflag=direct" +else + log_warn "'iflag=direct' not supported by dd. Falling back to standard dd." + DD_CMD="dd if=$block_dev of=/dev/null bs=1M count=32" +fi + +if $DD_CMD >/dev/null 2>&1; then + log_pass "UFS read test succeeded" +else + log_fail "UFS read test failed" + log_info "Try manually: $DD_CMD" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +fi + +# --- I/O Stress Test --- +log_info "Running I/O stress test (64MB read+write on tmpfile)..." +tmpfile="$test_path/ufs_test.img" + +# Prepare dd write command +if echo | dd of=/dev/null conv=fsync 2>/dev/null; then + DD_WRITE="dd if=/dev/zero of=$tmpfile bs=1M count=64 conv=fsync" +else + log_warn "'conv=fsync' not supported by dd. Using basic write." + DD_WRITE="dd if=/dev/zero of=$tmpfile bs=1M count=64" +fi + +# Use simplified dd read for BusyBox compatibility +if $DD_WRITE >/dev/null 2>&1 && + dd if="$tmpfile" of=/dev/null bs=1M count=64 >/dev/null 2>&1; then + log_pass "UFS I/O stress test passed" + rm -f "$tmpfile" +else + log_fail "UFS I/O stress test failed" + df -h . | sed 's/^/[INFO] /' + ls -lh "$test_path"/ufs_test.img | sed 's/^/[INFO] /' + rm -f "$tmpfile" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +fi +# --- Dmesg Errors --- +scan_dmesg_errors "ufs" "$test_path" + +log_pass "$TESTNAME completed successfully" +echo "$TESTNAME PASS" > "$res_file" +exit 0 diff --git a/Runner/suites/Kernel/Baseport/Storage/eMMC_Validation/run.sh b/Runner/suites/Kernel/Baseport/Storage/eMMC_Validation/run.sh new file mode 100755 index 00000000..b9115f25 --- /dev/null +++ b/Runner/suites/Kernel/Baseport/Storage/eMMC_Validation/run.sh @@ -0,0 +1,143 @@ +#!/bin/sh + +# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +# SPDX-License-Identifier: BSD-3-Clause-Clear + +# Robustly find and source init_env +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 (starting at $SCRIPT_DIR)" >&2 + exit 1 +fi + +# Only source if not already loaded +if [ -z "$__INIT_ENV_LOADED" ]; then + # shellcheck disable=SC1090 + . "$INIT_ENV" +fi + +# Always source functestlib.sh +# shellcheck disable=SC1090,SC1091 +. "$TOOLS/functestlib.sh" + +TESTNAME="eMMC_Validation" +test_path=$(find_test_case_by_name "$TESTNAME") +cd "$test_path" || exit 1 +res_file="./$TESTNAME.res" + +log_info "--------------------------------------------------" +log_info "------------ Starting $TESTNAME Test -------------" + +check_dependencies dd grep cut head tail udevadm + +# --- Kernel Config Checks --- +MANDATORY_CONFIGS="CONFIG_MMC CONFIG_MMC_BLOCK" +OPTIONAL_CONFIGS="CONFIG_MMC_SDHCI CONFIG_MMC_SDHCI_MSM CONFIG_MMC_BLOCK_MINORS" + +missing_optional="" +log_info "Checking mandatory kernel configs for eMMC..." +if ! check_kernel_config "$MANDATORY_CONFIGS" 2>/dev/null; then + log_skip "Missing one or more mandatory eMMC kernel configs: $MANDATORY_CONFIGS" + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +fi + +log_info "Checking optional kernel configs for eMMC..." +for cfg in $OPTIONAL_CONFIGS; do + if ! check_kernel_config "$cfg" 2>/dev/null; then + log_info "[OPTIONAL] $cfg is not enabled" + missing_optional="$missing_optional $cfg" + fi +done + +if [ -n "$missing_optional" ]; then + log_info "Optional configs not present but continuing:$missing_optional" +fi + +# --- Device Tree and Block Device Check --- +check_dt_nodes "/sys/bus/mmc/devices/*mmc*" || { + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +} + +block_dev=$(detect_emmc_partition_block) +if [ -z "$block_dev" ]; then + log_skip "No eMMC block device found." + echo "$TESTNAME SKIP" > "$res_file" + exit 0 +fi + +log_info "Detected eMMC block: $block_dev" + +# --- RootFS check fallback if findmnt is missing --- +rootfs_dev="unknown" +if command -v findmnt >/dev/null 2>&1; then + rootfs_dev=$(findmnt -n -o SOURCE /) +else + log_warn "findmnt not available, using fallback rootfs detection" + rootfs_dev=$(awk '$2 == "/" { print $1 }' /proc/mounts) +fi + +# --- Prevent direct read from rootfs --- +if [ "$block_dev" = "$rootfs_dev" ]; then + log_warn "eMMC block $block_dev is mounted as rootfs. Skipping direct read test." +else + log_info "Running basic read test on $block_dev (non-rootfs)..." + if dd if="$block_dev" of=/dev/null bs=1M count=32 iflag=direct status=none 2>/dev/null; then + log_pass "eMMC read test succeeded" + else + log_warn "'iflag=direct' not supported by dd. Falling back to standard dd." + if dd if="$block_dev" of=/dev/null bs=1M count=32 status=none 2>/dev/null; then + log_pass "eMMC read test succeeded (fallback)" + else + log_fail "eMMC read test failed" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 + fi + fi +fi + +# --- I/O Stress Test --- +log_info "Running I/O stress test (64MB read+write on tmpfile)..." +tmpfile="$test_path/emmc_test.img" + +if dd if=/dev/zero of="$tmpfile" bs=1M count=64 conv=fsync status=none 2>/dev/null; then + if dd if="$tmpfile" of=/dev/null bs=1M status=none 2>/dev/null; then + log_pass "eMMC I/O stress test passed" + rm -f "$tmpfile" + else + log_fail "eMMC I/O stress test failed (read)" + rm -f "$tmpfile" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 + fi +else + log_warn "'conv=fsync' not supported by dd. Using basic write fallback." + if dd if=/dev/zero of="$tmpfile" bs=1M count=64 status=none 2>/dev/null && + dd if="$tmpfile" of=/dev/null bs=1M status=none 2>/dev/null; then + log_pass "eMMC I/O stress test passed (fallback)" + rm -f "$tmpfile" + else + log_fail "eMMC I/O stress test failed (fallback)" + rm -f "$tmpfile" + echo "$TESTNAME FAIL" > "$res_file" + exit 1 + fi +fi + +# --- Dmesg Scan --- +scan_dmesg_errors "mmc" "$test_path" + +log_pass "$TESTNAME completed successfully" +echo "$TESTNAME PASS" > "$res_file" +exit 0 diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Timer/run.sh b/Runner/suites/Kernel/Baseport/Timer/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/Timer/run.sh rename to Runner/suites/Kernel/Baseport/Timer/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/USBHost/README.md b/Runner/suites/Kernel/Baseport/USBHost/README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/USBHost/README.md rename to Runner/suites/Kernel/Baseport/USBHost/README.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/USBHost/run.sh b/Runner/suites/Kernel/Baseport/USBHost/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/USBHost/run.sh rename to Runner/suites/Kernel/Baseport/USBHost/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh b/Runner/suites/Kernel/Baseport/adsp_remoteproc/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/adsp_remoteproc/run.sh rename to Runner/suites/Kernel/Baseport/adsp_remoteproc/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh b/Runner/suites/Kernel/Baseport/cdsp_remoteproc/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/cdsp_remoteproc/run.sh rename to Runner/suites/Kernel/Baseport/cdsp_remoteproc/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/hotplug/run.sh b/Runner/suites/Kernel/Baseport/hotplug/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/hotplug/run.sh rename to Runner/suites/Kernel/Baseport/hotplug/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/iommu/README.md b/Runner/suites/Kernel/Baseport/iommu/README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/iommu/README.md rename to Runner/suites/Kernel/Baseport/iommu/README.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/iommu/run.sh b/Runner/suites/Kernel/Baseport/iommu/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/iommu/run.sh rename to Runner/suites/Kernel/Baseport/iommu/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/irq/run.sh b/Runner/suites/Kernel/Baseport/irq/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/irq/run.sh rename to Runner/suites/Kernel/Baseport/irq/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/kaslr/run.sh b/Runner/suites/Kernel/Baseport/kaslr/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/kaslr/run.sh rename to Runner/suites/Kernel/Baseport/kaslr/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/pinctrl/run.sh b/Runner/suites/Kernel/Baseport/pinctrl/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/pinctrl/run.sh rename to Runner/suites/Kernel/Baseport/pinctrl/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/qcrypto/run.sh b/Runner/suites/Kernel/Baseport/qcrypto/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/qcrypto/run.sh rename to Runner/suites/Kernel/Baseport/qcrypto/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/remoteproc/run.sh b/Runner/suites/Kernel/Baseport/remoteproc/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/remoteproc/run.sh rename to Runner/suites/Kernel/Baseport/remoteproc/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/rngtest/run.sh b/Runner/suites/Kernel/Baseport/rngtest/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/rngtest/run.sh rename to Runner/suites/Kernel/Baseport/rngtest/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/README.md b/Runner/suites/Kernel/Baseport/shmbridge/README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/README.md rename to Runner/suites/Kernel/Baseport/shmbridge/README.md diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/run.sh b/Runner/suites/Kernel/Baseport/shmbridge/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/run.sh rename to Runner/suites/Kernel/Baseport/shmbridge/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/smmu/run.sh b/Runner/suites/Kernel/Baseport/smmu/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/smmu/run.sh rename to Runner/suites/Kernel/Baseport/smmu/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/watchdog/run.sh b/Runner/suites/Kernel/Baseport/watchdog/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/watchdog/run.sh rename to Runner/suites/Kernel/Baseport/watchdog/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh b/Runner/suites/Kernel/Baseport/wpss_remoteproc/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/baseport/wpss_remoteproc/run.sh rename to Runner/suites/Kernel/Baseport/wpss_remoteproc/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/DCVS/Freq_Scaling/README.md b/Runner/suites/Kernel/DCVS/Freq_Scaling/README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/DCVS/Freq_Scaling/README.md rename to Runner/suites/Kernel/DCVS/Freq_Scaling/README.md diff --git a/Runner/suites/Kernel/FunctionalArea/DCVS/Freq_Scaling/run.sh b/Runner/suites/Kernel/DCVS/Freq_Scaling/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/DCVS/Freq_Scaling/run.sh rename to Runner/suites/Kernel/DCVS/Freq_Scaling/run.sh diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/storage/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/storage/run.sh deleted file mode 100755 index 95dd761e..00000000 --- a/Runner/suites/Kernel/FunctionalArea/baseport/storage/run.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/sh - -# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. -# SPDX-License-Identifier: BSD-3-Clause-Clear - -# Robustly find and source init_env -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 (starting at $SCRIPT_DIR)" >&2 - exit 1 -fi - -# Only source if not already loaded (idempotent) -if [ -z "$__INIT_ENV_LOADED" ]; then - # shellcheck disable=SC1090 - . "$INIT_ENV" -fi -# Always source functestlib.sh, using $TOOLS exported by init_env -# shellcheck disable=SC1090,SC1091 -. "$TOOLS/functestlib.sh" - -TESTNAME="storage" -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 "Run the dd command to create a file with random data" -dd if=/dev/random of=/tmp/a.txt bs=1M count=1024 - -# Check if the file is created -if [ -f /tmp/a.txt ]; then - echo "File /tmp/a.txt is created." - - # Check if the file is not empty - if [ -s /tmp/a.txt ]; then - log_pass "File /tmp/a.txt is not empty. Test Passed" - log_pass "$TESTNAME : Test Passed" - echo "$TESTNAME PASS" > "$res_file" - else - log_fail "File /tmp/a.txt is empty. Test Failed." - log_fail "$TESTNAME : Test Failed" - echo "$TESTNAME FAIL" > "$res_file" - fi -else - log_fail "File /tmp/a.txt is not created. Test Failed" - log_fail "$TESTNAME : Test Failed" - echo "$TESTNAME FAIL" > "$res_file" -fi -if [ -f /tmp/a.txt ]; then - log_pass "$TESTNAME : Test Passed" - echo "$TESTNAME PASS" > "$res_file" - exit 0 -else - log_fail "$TESTNAME : Test Failed" - echo "$TESTNAME FAIL" > "$res_file" - exit 1 -fi -log_info "-------------------Completed $TESTNAME Testcase----------------------------" diff --git a/Runner/suites/Kernel/FunctionalArea/Scheduler/CPU_affinity/README.md b/Runner/suites/Kernel/Scheduler/CPU_affinity/README.md similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/Scheduler/CPU_affinity/README.md rename to Runner/suites/Kernel/Scheduler/CPU_affinity/README.md diff --git a/Runner/suites/Kernel/FunctionalArea/Scheduler/CPU_affinity/run.sh b/Runner/suites/Kernel/Scheduler/CPU_affinity/run.sh similarity index 100% rename from Runner/suites/Kernel/FunctionalArea/Scheduler/CPU_affinity/run.sh rename to Runner/suites/Kernel/Scheduler/CPU_affinity/run.sh diff --git a/Runner/utils/functestlib.sh b/Runner/utils/functestlib.sh index c87968ee..806809da 100755 --- a/Runner/utils/functestlib.sh +++ b/Runner/utils/functestlib.sh @@ -1393,3 +1393,69 @@ get_wifi_interface() { return 1 fi } + +# Auto-detect eMMC block device (non-removable, not UFS) +detect_emmc_partition_block() { + if command -v lsblk >/dev/null 2>&1 && command -v udevadm >/dev/null 2>&1; then + for part in $(lsblk -lnpo NAME,TYPE | awk '$2 == "part" {print $1}'); do + if udevadm info --query=all --name="$part" 2>/dev/null | grep -qi "mmcblk"; then + echo "$part" + return 0 + fi + done + fi + + for part in /dev/mmcblk*p[0-9]*; do + [ -e "$part" ] || continue + if command -v udevadm >/dev/null 2>&1 && udevadm info --query=all --name="$part" | grep -qi "mmcblk"; then + echo "$part" + return 0 + fi + done + return 1 +} + +# Auto-detect UFS block device (via udev vendor info or path hint) +detect_ufs_partition_block() { + if command -v lsblk >/dev/null 2>&1 && command -v udevadm >/dev/null 2>&1; then + for part in $(lsblk -lnpo NAME,TYPE | awk '$2 == "part" {print $1}'); do + if udevadm info --query=all --name="$part" 2>/dev/null | grep -qi "ufs"; then + echo "$part" + return 0 + fi + done + fi + + for part in /dev/sd[a-z][0-9]*; do + [ -e "$part" ] || continue + if command -v udevadm >/dev/null 2>&1 && + udevadm info --query=all --name="$part" 2>/dev/null | grep -qi "ufs"; then + echo "$part" + return 0 + fi + done + return 1 +} + +# Check for dmesg I/O errors and log summary +scan_dmesg_errors() { + label="$1" + output_dir="$2" + + [ -z "$output_dir" ] && output_dir="." + snapshot_file="$output_dir/${label}_dmesg_snapshot.log" + error_file="$output_dir/${label}_dmesg_errors.log" + + log_info "Scanning dmesg for recent I/O errors..." + dmesg | tail -n 300 > "$snapshot_file" + grep -iE "error|fail|timeout|reset|crc" "$snapshot_file" > "$error_file" + + if [ -s "$error_file" ]; then + log_warn "Detected potential $label-related errors in dmesg:" + while read -r line; do + log_warn " dmesg: $line" + done < "$error_file" + else + log_info "No $label-related errors found in recent dmesg logs." + fi +}