diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/Makefile | 27 | ||||
-rw-r--r-- | firmware/fw_filesystem.sh | 62 | ||||
-rw-r--r-- | firmware/fw_userhelper.sh | 89 |
3 files changed, 0 insertions, 178 deletions
diff --git a/firmware/Makefile b/firmware/Makefile deleted file mode 100644 index e23cce0..0000000 --- a/firmware/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Makefile for firmware loading selftests - -# No binaries, but make sure arg-less "make" doesn't trigger "run_tests" -all: - -fw_filesystem: - @if /bin/sh ./fw_filesystem.sh ; then \ - echo "fw_filesystem: ok"; \ - else \ - echo "fw_filesystem: [FAIL]"; \ - exit 1; \ - fi - -fw_userhelper: - @if /bin/sh ./fw_userhelper.sh ; then \ - echo "fw_userhelper: ok"; \ - else \ - echo "fw_userhelper: [FAIL]"; \ - exit 1; \ - fi - -run_tests: all fw_filesystem fw_userhelper - -# Nothing to clean up. -clean: - -.PHONY: all clean run_tests fw_filesystem fw_userhelper diff --git a/firmware/fw_filesystem.sh b/firmware/fw_filesystem.sh deleted file mode 100644 index 3fc6c10..0000000 --- a/firmware/fw_filesystem.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -# This validates that the kernel will load firmware out of its list of -# firmware locations on disk. Since the user helper does similar work, -# we reset the custom load directory to a location the user helper doesn't -# know so we can be sure we're not accidentally testing the user helper. -set -e - -modprobe test_firmware - -DIR=/sys/devices/virtual/misc/test_firmware - -OLD_TIMEOUT=$(cat /sys/class/firmware/timeout) -OLD_FWPATH=$(cat /sys/module/firmware_class/parameters/path) - -FWPATH=$(mktemp -d) -FW="$FWPATH/test-firmware.bin" - -test_finish() -{ - echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout - echo -n "$OLD_PATH" >/sys/module/firmware_class/parameters/path - rm -f "$FW" - rmdir "$FWPATH" -} - -trap "test_finish" EXIT - -# Turn down the timeout so failures don't take so long. -echo 1 >/sys/class/firmware/timeout -# Set the kernel search path. -echo -n "$FWPATH" >/sys/module/firmware_class/parameters/path - -# This is an unlikely real-world firmware content. :) -echo "ABCD0123" >"$FW" - -NAME=$(basename "$FW") - -# Request a firmware that doesn't exist, it should fail. -echo -n "nope-$NAME" >"$DIR"/trigger_request -if diff -q "$FW" /dev/test_firmware >/dev/null ; then - echo "$0: firmware was not expected to match" >&2 - exit 1 -else - echo "$0: timeout works" -fi - -# This should succeed via kernel load or will fail after 1 second after -# being handed over to the user helper, which won't find the fw either. -if ! echo -n "$NAME" >"$DIR"/trigger_request ; then - echo "$0: could not trigger request" >&2 - exit 1 -fi - -# Verify the contents are what we expect. -if ! diff -q "$FW" /dev/test_firmware >/dev/null ; then - echo "$0: firmware was not loaded" >&2 - exit 1 -else - echo "$0: filesystem loading works" -fi - -exit 0 diff --git a/firmware/fw_userhelper.sh b/firmware/fw_userhelper.sh deleted file mode 100644 index 6efbade..0000000 --- a/firmware/fw_userhelper.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# This validates that the kernel will fall back to using the user helper -# to load firmware it can't find on disk itself. We must request a firmware -# that the kernel won't find, and any installed helper (e.g. udev) also -# won't find so that we can do the load ourself manually. -set -e - -modprobe test_firmware - -DIR=/sys/devices/virtual/misc/test_firmware - -OLD_TIMEOUT=$(cat /sys/class/firmware/timeout) - -FWPATH=$(mktemp -d) -FW="$FWPATH/test-firmware.bin" - -test_finish() -{ - echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout - rm -f "$FW" - rmdir "$FWPATH" -} - -load_fw() -{ - local name="$1" - local file="$2" - - # This will block until our load (below) has finished. - echo -n "$name" >"$DIR"/trigger_request & - - # Give kernel a chance to react. - local timeout=10 - while [ ! -e "$DIR"/"$name"/loading ]; do - sleep 0.1 - timeout=$(( $timeout - 1 )) - if [ "$timeout" -eq 0 ]; then - echo "$0: firmware interface never appeared" >&2 - exit 1 - fi - done - - echo 1 >"$DIR"/"$name"/loading - cat "$file" >"$DIR"/"$name"/data - echo 0 >"$DIR"/"$name"/loading - - # Wait for request to finish. - wait -} - -trap "test_finish" EXIT - -# This is an unlikely real-world firmware content. :) -echo "ABCD0123" >"$FW" -NAME=$(basename "$FW") - -# Test failure when doing nothing (timeout works). -echo 1 >/sys/class/firmware/timeout -echo -n "$NAME" >"$DIR"/trigger_request -if diff -q "$FW" /dev/test_firmware >/dev/null ; then - echo "$0: firmware was not expected to match" >&2 - exit 1 -else - echo "$0: timeout works" -fi - -# Put timeout high enough for us to do work but not so long that failures -# slow down this test too much. -echo 4 >/sys/class/firmware/timeout - -# Load this script instead of the desired firmware. -load_fw "$NAME" "$0" -if diff -q "$FW" /dev/test_firmware >/dev/null ; then - echo "$0: firmware was not expected to match" >&2 - exit 1 -else - echo "$0: firmware comparison works" -fi - -# Do a proper load, which should work correctly. -load_fw "$NAME" "$FW" -if ! diff -q "$FW" /dev/test_firmware >/dev/null ; then - echo "$0: firmware was not loaded" >&2 - exit 1 -else - echo "$0: user helper firmware loading works" -fi - -exit 0 |