Skip to content

Commit

Permalink
selftests: firmware: Add ZSTD compressed file tests
Browse files Browse the repository at this point in the history
It's similar like XZ compressed files.  For the simplicity, both XZ
and ZSTD tests are done in a single function.  The format is specified
via $COMPRESS_FORMAT and the compression function is pre-defined.

Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
tiwai authored and gregkh committed Apr 22, 2022
1 parent f18b45f commit bc67cac
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 23 deletions.
76 changes: 56 additions & 20 deletions tools/testing/selftests/firmware/fw_filesystem.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ TEST_DIR=$(dirname $0)
source $TEST_DIR/fw_lib.sh

RUN_XZ="xz -C crc32 --lzma2=dict=2MiB"
RUN_ZSTD="zstd -q"

check_mods
check_setup
Expand Down Expand Up @@ -213,7 +214,7 @@ read_firmwares()
else
fwfile="$FW"
fi
if [ "$1" = "xzonly" ]; then
if [ "$1" = "componly" ]; then
fwfile="${fwfile}-orig"
fi
for i in $(seq 0 3); do
Expand All @@ -237,7 +238,7 @@ read_partial_firmwares()
fwfile="${FW}"
fi

if [ "$1" = "xzonly" ]; then
if [ "$1" = "componly" ]; then
fwfile="${fwfile}-orig"
fi

Expand Down Expand Up @@ -411,10 +412,8 @@ test_request_firmware_nowait_custom()
config_unset_uevent
RANDOM_FILE_PATH=$(setup_random_file)
RANDOM_FILE="$(basename $RANDOM_FILE_PATH)"
if [ "$2" = "both" ]; then
$RUN_XZ -k $RANDOM_FILE_PATH
elif [ "$2" = "xzonly" ]; then
$RUN_XZ $RANDOM_FILE_PATH
if [ -n "$2" -a "$2" != "normal" ]; then
compress_"$2"_"$COMPRESS_FORMAT" $RANDOM_FILE_PATH
fi
config_set_name $RANDOM_FILE
config_trigger_async
Expand Down Expand Up @@ -490,21 +489,58 @@ test_request_partial_firmware_into_buf_nofile 0 5
test_request_partial_firmware_into_buf_nofile 1 6
test_request_partial_firmware_into_buf_nofile 2 10

test "$HAS_FW_LOADER_COMPRESS" != "yes" && exit 0
test_request_firmware_compressed ()
{
export COMPRESS_FORMAT="$1"

# test with both files present
$RUN_XZ -k $FW
$RUN_XZ -k $FW_INTO_BUF
config_set_name $NAME
echo
echo "Testing with both plain and xz files present..."
do_tests both
# test with both files present
compress_both_"$COMPRESS_FORMAT" $FW
compress_both_"$COMPRESS_FORMAT" $FW_INTO_BUF

# test with only xz file present
mv "$FW" "${FW}-orig"
mv "$FW_INTO_BUF" "${FW_INTO_BUF}-orig"
echo
echo "Testing with only xz file present..."
do_tests xzonly
config_set_name $NAME
echo
echo "Testing with both plain and $COMPRESS_FORMAT files present..."
do_tests both

# test with only compressed file present
mv "$FW" "${FW}-orig"
mv "$FW_INTO_BUF" "${FW_INTO_BUF}-orig"

config_set_name $NAME
echo
echo "Testing with only $COMPRESS_FORMAT file present..."
do_tests componly

mv "${FW}-orig" "$FW"
mv "${FW_INTO_BUF}-orig" "$FW_INTO_BUF"
}

compress_both_XZ ()
{
$RUN_XZ -k "$@"
}

compress_componly_XZ ()
{
$RUN_XZ "$@"
}

compress_both_ZSTD ()
{
$RUN_ZSTD -k "$@"
}

compress_componly_ZSTD ()
{
$RUN_ZSTD --rm "$@"
}

if test "$HAS_FW_LOADER_COMPRESS_XZ" = "yes"; then
test_request_firmware_compressed XZ
fi

if test "$HAS_FW_LOADER_COMPRESS_ZSTD" = "yes"; then
test_request_firmware_compressed ZSTD
fi

exit 0
12 changes: 9 additions & 3 deletions tools/testing/selftests/firmware/fw_lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ check_setup()
{
HAS_FW_LOADER_USER_HELPER="$(kconfig_has CONFIG_FW_LOADER_USER_HELPER=y)"
HAS_FW_LOADER_USER_HELPER_FALLBACK="$(kconfig_has CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y)"
HAS_FW_LOADER_COMPRESS="$(kconfig_has CONFIG_FW_LOADER_COMPRESS=y)"
HAS_FW_LOADER_COMPRESS_XZ="$(kconfig_has CONFIG_FW_LOADER_COMPRESS_XZ=y)"
HAS_FW_LOADER_COMPRESS_ZSTD="$(kconfig_has CONFIG_FW_LOADER_COMPRESS_ZSTD=y)"
PROC_FW_IGNORE_SYSFS_FALLBACK="0"
PROC_FW_FORCE_SYSFS_FALLBACK="0"

Expand Down Expand Up @@ -98,9 +99,14 @@ check_setup()

OLD_FWPATH="$(cat /sys/module/firmware_class/parameters/path)"

if [ "$HAS_FW_LOADER_COMPRESS" = "yes" ]; then
if [ "$HAS_FW_LOADER_COMPRESS_XZ" = "yes" ]; then
if ! which xz 2> /dev/null > /dev/null; then
HAS_FW_LOADER_COMPRESS=""
HAS_FW_LOADER_COMPRESS_XZ=""
fi
fi
if [ "$HAS_FW_LOADER_COMPRESS_ZSTD" = "yes" ]; then
if ! which zstd 2> /dev/null > /dev/null; then
HAS_FW_LOADER_COMPRESS_ZSTD=""
fi
fi
}
Expand Down

0 comments on commit bc67cac

Please sign in to comment.