From 1efd38dbf0a1fd5c0604722df1fa9d9107a98dd8 Mon Sep 17 00:00:00 2001 From: Stewart Smith Date: Tue, 20 Jun 2017 14:59:37 +1000 Subject: [PATCH] boot-tests: add OpenBMC support Signed-off-by: Stewart Smith --- external/boot-tests/boot_test.sh | 4 +- external/boot-tests/openbmc_support.sh | 123 +++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 external/boot-tests/openbmc_support.sh diff --git a/external/boot-tests/boot_test.sh b/external/boot-tests/boot_test.sh index 5b3fc15e42dc..233467c23a0e 100755 --- a/external/boot-tests/boot_test.sh +++ b/external/boot-tests/boot_test.sh @@ -125,9 +125,9 @@ There are three usage modes. 1) boot_test.sh -h Print this help -2) boot_test.sh [-vdp] -t target -B -b (fsp|bmc) +2) boot_test.sh [-vdp] -t target -B -b (fsp|bmc|smc|openbmc) Boot test the target without flashing. Specify the type of machine - (FSP or BMC) with the -b option. + (FSP, BMC, SMC, OpenBMC) with the -b option. 3) boot_test.sh [-vdp] -b bmc -t target -P pnor [-N] boot_test.sh [-vdp] -b bmc -t target [-1 PAYLOAD] [-2 BOOTKERNEL] [-N] diff --git a/external/boot-tests/openbmc_support.sh b/external/boot-tests/openbmc_support.sh new file mode 100644 index 000000000000..54036b9076ee --- /dev/null +++ b/external/boot-tests/openbmc_support.sh @@ -0,0 +1,123 @@ +#Number of times to sleep +BOOT_TIMEOUT="5"; + +#Username/password for ssh to BMC machines +SSHUSER=${SSHUSER:-root}; +export SSHPASS=${SSHPASS:-0penBmc}; + +PFLASH_BINARY=/usr/sbin/pflash + +# How do we SSH/SCP in? +SSHCMD="sshpass -e ssh -l $SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $target"; + +IPMI_AUTH="-P ${IPMI_PASS:-0penBmc}" + +# Strip control characters from IPMI before grepping? +STRIP_CONTROL=0 + +function sshcmd { + $SSHCMD $*; +} + +# remotecp file target target_location +function remotecp { + sshpass -e scp -o User=$SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $1 $2:$3 +} + +function is_off { + return $([ "$($SSHCMD /usr/sbin/obmcutil power|grep 'state')" = "state = 0" ]); +} + +function poweroff { + $SSHCMD /usr/sbin/obmcutil poweroff + # give it some time + sleep 5 +} + +function force_primary_side { + true +} + +function flash { + if [ ! -z "$PNOR" ]; then + remotecp $PNOR $target /tmp/image.pnor; + fi + if [ "${LID[0]}" != "" ]; then + remotecp ${LID[0]} $target /tmp/skiboot.lid; + fi + if [ "${LID[1]}" != "" ]; then + remotecp ${LID[1]} $target /tmp/bootkernel + fi + if [ "${arbitrary_lid[1]}" != "" ]; then + remotecp ${arbitrary_lid[1]} $target /tmp/$(basename ${arbitrary_lid[1]}) + fi + + if [ "$?" -ne "0" ] ; then + error "Couldn't copy firmware image"; + fi + + if [ ! -z "$PNOR" ]; then + msg "Flashing full PNOR" + $SSHCMD "$PFLASH_BINARY -E -f -p /tmp/image.pnor" + if [ "$?" -ne "0" ] ; then + error "An unexpected pflash error has occurred"; + fi + msg "Removing /tmp/image.pnor" + $SSHCMD "rm /tmp/image.pnor" + fi + + if [ ! -z "${LID[0]}" ] ; then + msg "Flashing PAYLOAD PNOR partition" + $SSHCMD "$PFLASH_BINARY -e -f -P PAYLOAD -p /tmp/skiboot.lid" + if [ "$?" -ne "0" ] ; then + error "An unexpected pflash error has occurred"; + fi + msg "Removing /tmp/pskiboot.lid" + $SSHCMD "rm /tmp/skiboot.lid" + fi + + if [ ! -z "${LID[1]}" ] ; then + msg "Flashing BOOTKERNEL PNOR partition" + $SSHCMD "$PFLASH_BINARY -e -f -P BOOTKERNEL -p /tmp/bootkernel" + if [ "$?" -ne "0" ] ; then + error "An unexpected pflash error has occurred"; + fi + msg "Removing /tmp/bootkernel" + $SSHCMD "rm /tmp/bootkernel" + fi + + if [ ! -z "${arbitrary_lid[0]}" -a ! -z "${arbitrary_lid[1]}" ] ; then + msg "Flashing ${arbitrary_lid[0]} PNOR partition" + $SSHCMD "$PFLASH_BINARY -e -f -P ${arbitrary_lid[0]} -p /tmp/$(basename ${arbitrary_lid[1]})" + if [ "$?" -ne "0" ] ; then + error "An unexpected pflash error has occurred"; + fi + msg "Removing /tmp/$(basename ${arbitrary_lid[1]})" + $SSHCMD "rm /tmp/$(basename ${arbitrary_lid[1]})" + fi + +} + +function boot_firmware { + $SSHCMD /usr/sbin/obmcutil poweron + i=0; + while [ "$($SSHCMD /usr/sbin/obmcutil power|grep state)" = "state = 0" -a \( "$i" -lt "$BOOT_TIMEOUT" \) ] ; do + msg -n "."; + sleep $BOOT_SLEEP_PERIOD; + i=$(expr $i + 1); + done + if [ "$i" -eq "$BOOT_TIMEOUT" ] ; then + error "Couldn't power on $target"; + fi +} + +function machine_sanity_test { + sshcmd true; + if [ $? -ne 0 ]; then + echo "$target: Failed to SSH to $target..." + echo "$target: Command was: $SSHCMD true" + error "Try connecting manually to diagnose the issue." + fi + # No further sanity tests for BMC machines. + true +}