am65xx-evm: Add prebuilt binaries
[glsdk/host-tools.git] / k3-bootswitch / dfu-boot.sh
index b82ed315c0ba380b9968cb5b9393e6418be8e6b8..72f31c19679d4e1a7fe6b2f5a28fe7dbd23c7260 100755 (executable)
@@ -2,31 +2,56 @@
 # Utility script to select the bootmode from command line
 # Author: Nikhil Devshatwar
 
+# No need to change anything below this line
+UMS_part1=/dev/disk/by-id/usb-Linux_UMS_disk*part1
+UMS_part2=/dev/disk/by-id/usb-Linux_UMS_disk*part2
 SCRIPT=$(readlink -f $0)
 SCRIPTPATH=`dirname $SCRIPT`
-prefix=$SCRIPTPATH/bin
-boot_select=$SCRIPTPATH/boot_select
 user=`logname`
 
-UMS_part1=/dev/disk/by-id/usb-Linux_UMS_disk*part1
-UMS_part2=/dev/disk/by-id/usb-Linux_UMS_disk*part2
-
-# Customize this as required
-uart_dev=/dev/ttyUSB0
-dev=1
-
 usage()
 {
+       echo
+       echo "dfu-boot.sh => Utility script to select bootmode and mount MMC to PC"
        echo "Usage:"
-       echo "  dfu-boot.sh - Utility script to select bootmode and mount MMC to PC"
-       echo "  sudo ./dfu-boot.sh --mount DEV"
-       echo "      DEV: 1 for MMC, 0 for eMMC"
-       echo "  sudo ./dfu-boot.sh --bootmode MODE"
-       echo "      MODE: " `ls $boot_select/ | awk -F"." 'BEGIN{ORS=" "} { print $2 }'`
+       echo "  sudo ./dfu-boot.sh PLATFORM --mount DEV | --bootmode MODE"
+       echo "    PLATFORM: Either of --j721e-evm or --am65xx-evm"
+       echo "    DEV: specify the device to mount => 1 for MMC, 0 for eMMC"
+       echo "    MODE: specify the bootmode to use"
+}
+
+init() {
+board=$1
+       # Customize this as required
+       if [ "$board" = "j721e-evm" ]; then
+               uart_dev=/dev/ttyUSB0
+               switch=0
+       elif [ "$board" = "am65xx-evm" ]; then
+               uart_dev=/dev/ttyUSB4
+               switch=3
+       else
+               echo "Invalid board"
+               usage
+               exit 1
+       fi
+
+       prebuilt=$SCRIPTPATH/bin/$board
+       boot_select=$SCRIPTPATH/boot_select/$board
+}
+
+toggle_power()
+{
+switch=$1
+       echo "    >>>> Toggling phidget..."
+       (phidget-switch $switch 0 && sleep 0.5 && phidget-switch $switch 1 && sleep 0.1) >/dev/null 2>&1
+       if [ $? -ne 0 ]; then
+               echo -n "ERROR: phidget not found, Reboot manually and press enter.. "
+               read DUMMY
+       fi
 }
 
 # Bootloader takes time to initialize
-# wait till then
+# wait till PC detects a dfu device
 wait_till_ready() {
 msg=$1
        for i in `seq 30`; do
@@ -44,23 +69,25 @@ msg=$1
        exit 1
 }
 
-# Use dfu to send all bootloaders till you get to the
-# A72 u-boot prompt
+# Use dfu to send prebuilt binaries till you get to the
+# Cortex-A u-boot prompt
 boot_till_uboot() {
        wait_till_ready "for tiboot3.bin"
-       2>&1 dfu-util -R -a bootloader -D $prefix/tiboot3.bin
+       2>&1 dfu-util -R -a bootloader -D $prebuilt/tiboot3.bin
        wait_till_ready "for sysfw.itb"
-       2>&1 dfu-util -R -a sysfw.itb -D $prefix/sysfw.itb
+       2>&1 dfu-util -R -a sysfw.itb -D $prebuilt/sysfw.itb
        wait_till_ready "for tispl.bin"
-       2>&1 dfu-util -R -a tispl.bin -D $prefix/tispl.bin
+       2>&1 dfu-util -R -a tispl.bin -D $prebuilt/tispl.bin
        wait_till_ready "for u-boot.img"
-       2>&1 dfu-util -R -a u-boot.img -D $prefix/u-boot.img
+       2>&1 dfu-util -R -a u-boot.img -D $prebuilt/u-boot.img
 }
 
 # Detect and mount the partitions
 try_mount() {
+uart_dev=$1
+mdev=$2
        for i in `seq 1 100`; do
-               echo "ums 0 mmc $1" > $uart_dev
+               echo "ums 0 mmc $mdev" > $uart_dev
                sleep 0.1
                if [ -b $UMS_part1 ] && [ -b $UMS_part2 ]; then
                        mkdir -p /media/$user/UMS-boot
@@ -75,13 +102,23 @@ try_mount() {
        exit 1
 }
 
-toggle_power()
-{
-       echo "    >>>> Toggling phidget..."
-       (phidget-switch 0 0 && sleep 0.5 && phidget-switch 0 1 && sleep 0.1) >/dev/null 2>&1
-       if [ $? -ne 0 ]; then
-               echo -n "ERROR: phidget not found, Reboot manually and press enter.. "
-               read DUMMY
+# Send a boot_select binary
+change_bootmode() {
+bootmode=$1
+       if [ ! -f $boot_select/spl.$bootmode ]; then
+               echo "Invalid bootmode $bootmode"
+               options=`ls $boot_select/spl* | awk -F"." 'BEGIN{ORS=" "} { print $2 }'`
+               echo "Supported bootmodes for $board are: $options"
+               exit 1
+       fi
+
+       wait_till_ready
+       echo "    >>>> Selecting bootmode: $bootmode"
+       dfu-util -R -a bootloader -D $boot_select/spl.$bootmode >/dev/null 2>&1
+       if [ $? -eq 0 ]; then
+               echo "    >>>> SUCCESS"
+       else
+               echo "    >>>> FAILED"
        fi
 }
 
@@ -92,33 +129,51 @@ if [ `whoami` != "root" ]; then
        exit 1
 fi
 
-if [ "$1" = "--mount" ]; then
-       if [ ! -z "$2" ]; then
-               dev=$2
-       fi
-       toggle_power
-       boot_till_uboot >/dev/null
-       try_mount $dev
-elif [ "$1" = "--bootmode" ]; then
-       if [ ! -z "$2" ]; then
+while [[ $# -gt 0 ]]
+do
+case $1 in
+       --j7|--j721e|--j721e-evm)
+               init "j721e-evm"
+               shift
+               ;;
+       --am6|--am654|--am65x-evm|--am654-idk|--am65xx-evm)
+               init "am65xx-evm"
+               shift
+               ;;
+       -m|--mount)
+               mdev=$2
+               shift
+               shift
+               ;;
+       -b|--bootmode)
                bootmode=$2
-       fi
-       if [ ! -f $boot_select/spl.$bootmode ]; then
-               echo "Invalid bootmode $bootmode"
+               shift
+               shift
+               ;;
+       -h|--help)
                usage
-               exit 2
-       fi
+               exit 0
+               ;;
+       *)
+               echo "Invalid argument $1"
+               usage
+               exit 1
+               ;;
+esac
+done
 
-       toggle_power
-       wait_till_ready
-       echo "    >>>> Selecting bootmode: $bootmode"
-       dfu-util -R -a bootloader -D $boot_select/spl.$bootmode >/dev/null 2>&1
-       if [ $? -eq 0 ]; then
-               echo "    >>>> SUCCESS"
-       else
-               echo "    >>>> FAILED"
-       fi
+init $board
+if [ ! -z $bootmode ]; then
+       # Reboot the board in specified bootmode
+       toggle_power $switch
+       change_bootmode $bootmode
+
+elif [ ! -z $mdev ]; then
+       # Reboot the board and mount the specified device
+       toggle_power $switch
+       boot_till_uboot >/dev/null
+       try_mount $uart_dev $mdev
 else
-       echo " Invalid usage"
+       echo "Invalid usage!!"
        usage
 fi