Use the nfit_test firmware-update+activation emulation to validate the
operation of the kernel sysfs attributes, libndctl, ndctl update-firmware,
and ndctl activate-firmware.

Signed-off-by: Dan Williams <[email protected]>
---
 test/firmware-update.sh |   50 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 45 insertions(+), 5 deletions(-)

diff --git a/test/firmware-update.sh b/test/firmware-update.sh
index ed7d7e53772c..098dd92b4eb3 100755
--- a/test/firmware-update.sh
+++ b/test/firmware-update.sh
@@ -22,23 +22,63 @@ reset()
 
 detect()
 {
-       dev=$($NDCTL list -b $NFIT_TEST_BUS0 -D | jq .[0].dev | tr -d '"')
-       [ -n "$dev" ] || err "$LINENO"
+       $NDCTL wait-scrub $NFIT_TEST_BUS0
+       fwa=$($NDCTL list -b $NFIT_TEST_BUS0 -F | jq -r 
'.[0].firmware.activate_method')
+       [ $fwa = "suspend" ] || err "$LINENO"
+       count=$($NDCTL list -b $NFIT_TEST_BUS0 -D | jq length)
+       [ $((count)) -eq 4 ] || err "$LINENO"
 }
 
 do_tests()
 {
+       # create a dummy image file, try to update all 4 dimms on
+       # nfit_test.0, validate that all get staged, validate that all
+       # but one get armed relative to an overflow error.
        truncate -s 196608 $image
-       $NDCTL update-firmware -f $image $dev
+       json=$($NDCTL update-firmware -b $NFIT_TEST_BUS0 -f $image all)
+       count=$(jq 'map(select(.firmware.activate_state == "armed")) | length' 
<<< $json)
+       [ $((count)) -eq 3 ] || err "$LINENO"
+       count=$(jq 'map(select(.firmware.activate_state == "idle")) | length' 
<<< $json)
+       [ $((count)) -eq 1 ] || err "$LINENO"
+
+       # validate that the overflow dimm can be force armed
+       dev=$(jq -r '.[] | select(.firmware.activate_state == "idle").dev' <<< 
$json)
+       json=$($NDCTL update-firmware -b $NFIT_TEST_BUS0 $dev -A --force)
+       state=$(jq -r '.[0].firmware.activate_state' <<< $json)
+       [ $state = "armed" ] || err "$LINENO"
+
+       # validate that the bus indicates overflow
+       fwa=$($NDCTL list -b $NFIT_TEST_BUS0 -F | jq -r 
'.[0].firmware.activate_state')
+       [ $fwa = "overflow" ] || err "$LINENO"
+
+       # validate that all devices can be disarmed, and the bus goes idle
+       json=$($NDCTL update-firmware -b $NFIT_TEST_BUS0 -D all)
+       count=$(jq 'map(select(.firmware.activate_state == "idle")) | length' 
<<< $json)
+       [ $((count)) -eq 4 ] || err "$LINENO"
+       fwa=$($NDCTL list -b $NFIT_TEST_BUS0 -F | jq -r 
'.[0].firmware.activate_state')
+       [ $fwa = "idle" ] || err "$LINENO"
+
+       # re-arm all DIMMs
+       json=$($NDCTL update-firmware -b $NFIT_TEST_BUS0 -A --force all)
+       count=$(jq 'map(select(.firmware.activate_state == "armed")) | length' 
<<< $json)
+       [ $((count)) -eq 4 ] || err "$LINENO"
+
+       # check that unforced activation fails
+       [ $NDCTL activate-firmware -b $NFIT_TEST_BUS0 ] && err "$LINENO"
+
+       # force activation
+       json=$($NDCTL activate-firmware $NFIT_TEST_BUS0 --force)
+       idle_count=$(jq '.[].dimms | map(select(.firmware.activate_state == 
"idle")) | length' <<< $json)
+       busy_count=$(jq '.[].dimms | map(select(.firmware.activate_state == 
"busy")) | length' <<< $json)
+       [ $((idle_count)) -eq 4 -o $((busy_count)) -eq 4 ] || err "$LINENO"
 }
 
 check_min_kver "4.16" || do_skip "may lack firmware update test handling"
 
 modprobe nfit_test
-rc=1
 reset
-rc=2
 detect
+rc=1
 do_tests
 rm -f $image
 _cleanup
_______________________________________________
Linux-nvdimm mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to