#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # ###################################################### # Copyright (C) 2016 Marvell International Ltd. # # https://spdx.org/licenses # # Author: Konstantin Porotchkin kostap@marvell.com # # Version 0.3 # # UART recovery downloader for Armada SoCs # ###################################################### port=$1 file=$2 speed=$3 pattern_repeat=1500 default_baudrate=115200 tmpfile=/tmp/xmodem.pattern tools=( dd stty sx minicom ) case "$3" in 2) fast_baudrate=230400 prefix="\xF2" ;; 4) fast_baudrate=460800 prefix="\xF4" ;; 8) fast_baudrate=921600 prefix="\xF8" ;; *) fast_baudrate=$default_baudrate prefix="\xBB" esac if [[ -z "$port" || -z "$file" ]] then echo -e "\nMarvell recovery image downloader for Armada SoC family." echo -e "Command syntax:" echo -e "\t$(basename $0) [2|4|8]" echo -e "\tport - serial port the target board is connected to" echo -e "\tfile - recovery boot image for target download" echo -e "\t2|4|8 - times to increase the default serial port speed by" echo -e "For example - load the image over ttyUSB0 @ 460800 baud:" echo -e "$(basename $0) /dev/ttyUSB0 /tmp/flash-image.bin 4\n" echo -e "=====WARNING=====" echo -e "- The speed-up option is not available in SoC families prior to A8K+" echo -e "- This utility is not compatible with Armada 37xx SoC family\n" fi # Sanity checks if [ -c "$port" ] then echo -e "Using device connected on serial port \"$port\"" else echo "Wrong serial port name!" exit 1 fi if [ -f "$file" ] then echo -e "Loading flash image file \"$file\"" else echo "File $file does not exist!" exit 1 fi # Verify required tools installation for tool in ${tools[@]} do toolname=`which $tool` if [ -z "$toolname" ] then echo -e "Missing installation of \"$tool\" --> Exiting" exit 1 fi done echo -e "Recovery will run at $fast_baudrate baud" echo -e "========================================" if [ -f "$tmpfile" ] then rm -f $tmpfile fi # Send the escape sequence to target board using default debug port speed stty -F $port raw ignbrk time 5 $default_baudrate counter=0 while [ $counter -lt $pattern_repeat ]; do echo -n -e "$prefix\x11\x22\x33\x44\x55\x66\x77" >> $tmpfile let counter=counter+1 done echo -en "Press the \"Reset\" button on the target board and " echo -en "the \"Enter\" key on the host keyboard simultaneously" read dd if=$tmpfile of=$port &>/dev/null # Speed up the binary image transfer stty -F $port raw ignbrk time 5 $fast_baudrate sx -vv $file > $port < $port #sx-at91 $port $file # Return the port to the default speed stty -F $port raw ignbrk time 5 $default_baudrate # Optional - fire up Minicom minicom -D $port -b $default_baudrate