#!/bin/sh SSH_ID=$HOME/.ssh/id_rsa.db [ -e $HOME/.fwupd.defaults ] && source $HOME/.fwupd.defaults usage() { echo "usage: $(basename $0) uri" echo " uri is something like: file:///path/to/fw" echo " tftp://tftp.server.ip.addr/path/to/fw" echo " scp://[user@]scp.server.ip.addr:/path/to/fw" echo " http[s]://web.server.ip.addr/path/to/fw" echo " ftp://[user@]ftp.server.ip.addr/path/to/fw" exit 1 } logevent_update_started() { echo cat < "$TGT" dd bs=4k seek=$img_page_offset if=$LOCAL_PATH of=$TGT sync echo "Written $(stat -c "%s" "$LOCAL_PATH") bytes" # remove the updated image from /tmp rm -f $LOCAL_PATH echo "Setting update intent in PFR CPLD" sleep 5 # delay for sync and to get the above echo messages # write to PFRCPLD about BMC update intent. i2cset -y 4 0x38 0x13 $upd_intent_val else # Non-PFR image update section version="unknown" component="BMC" manifest_file=$(dirname "${REMOTE_PATH}")"/MANIFEST" if [ -e $manifest_file ]; then version=`awk -F= -v key="version" '$1==key {print $2}' $manifest_file` fi logevent_update_started $component $version # do a quick sanity check on the image if [ $(stat -c "%s" "$LOCAL_PATH") -lt 10000000 ]; then echo "Update file "$LOCAL_PATH" seems to be too small" logevent_update_failed $component $version exit 1 fi dtc -I dtb -O dtb "$LOCAL_PATH" > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Update file $LOCAL_PATH doesn't seem to be in the proper format" logevent_update_failed $component $version exit 1 fi # guess based on fw_env which partition we booted from BOOTADDR=$(fw_printenv bootcmd | awk '{print $2}') TGT="/dev/mtd/image-a" case "$BOOTADDR" in 20080000) TGT="/dev/mtd/image-b"; BOOTADDR="22480000" ;; 22480000) TGT="/dev/mtd/image-a"; BOOTADDR="20080000" ;; *) TGT="/dev/mtd/image-a"; BOOTADDR="20080000" ;; esac echo "Updating $(basename $TGT) (use bootm $BOOTADDR)" flash_erase $TGT 0 0 if [ $? -ne 0 ]; then echo "Erasing the flash failed" logevent_update_failed $component $version exit 1 fi echo "Writing $(stat -c "%s" "$LOCAL_PATH") bytes" cat "$LOCAL_PATH" > "$TGT" if [ $? -ne 0 ]; then echo "Writing to flash failed" logevent_update_failed $component $version exit 1 fi fw_setenv "bootcmd" "bootm ${BOOTADDR}" logevent_update_completed $component $version # reboot reboot fi