diff --git a/m1/tools/m1nor b/m1/tools/m1nor new file mode 100755 index 0000000..42abc1d --- /dev/null +++ b/m1/tools/m1nor @@ -0,0 +1,91 @@ +#!/bin/sh +# +# m1nor - Flash a file to M1 NOR partition selected by the file name +# +# Written 2011 by Werner Almesberger +# Copyright 2011 by Werner Almesberger +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# + +# +# According to +# http://www.milkymist.org/wiki/index.php?title=Flashing_the_Milkymist_One#Flash_Memory_Distribution +# +# standby.fpg 0x0000 0000 640k +# soc-rescue.fpg 0x000A 0000 1536k +# bios-rescue.bin 0x0022 0000 128k +# splash-rescue.raw 0x0024 0000 640k +# flickernoise.fbi(res) 0x002E 0000 4096k +# soc.fpg 0x006E 0000 1536k +# bios.bin 0x0086 0000 128k +# splash.raw 0x0088 0000 640k +# flickernoise.fbi 0x0092 0000 4096k +# (data) 0x00D2 0000 19328k +# + +if [ -z "$1" ]; then + echo "usage: $0 filename" 1>&2 + exit 1 +fi + +if [ ! -r "$1" ]; then + echo "cannot read $1" 1>&2 + exit 1 +fi + +n=${1##*/} +if [ "${n#standby}" != "$n" ]; then off=0x0; ext=.fpg +elif [ "${n#soc-rescue}" != "$n" ]; then off=0xa0000; ext=.fpg +elif [ "${n#bios-rescue}" != "$n" ]; then off=0x220000; ext=.bin +elif [ "${n#splash-rescue}" != "$n" ]; then off=0x240000; ext=.raw +elif [ "${n#flickernoise-rescue}" != "$n" ]; then off=0x2e0000; ext=.fbi +elif [ "${n#soc}" != "$n" ]; then off=0x6e0000; ext=.fpg +elif [ "${n#bios}" != "$n" ]; then off=0x860000; ext=.bin +elif [ "${n#splash}" != "$n" ]; then off=0x880000; ext=.raw +elif [ "${n#flickernoise}" != "$n" ]; then off=0x920000; ext=.fbi +elif [ "${n#data}" != "$n" ]; then off=0xd20000; ext= +else + echo "unrecognized file name" 1>&2 + exit 1 +fi + +if [ "$ext" -a "${1%$ext}" = "$1" ]; then + echo "extension mismatch (expected $ext)" 1>&2 + exit 1 +fi + +if [ "$FJMEM_BIT" ]; then + fjmem=$FJMEM_BIT +else + fjmem= + for n in $HOME/.qi/milkymist/*/fjmem.bit \ + $HOME/.qi/milkymist/*/*/fjmem.bit; do + if [ -r "$n" ]; then + fjmem="$n" + break + fi + done + if [ -z "$fjmem" ]; then + echo "cannot find fjmem.bit (consider setting FJMEM_BIT)" 1>&2 + exit 1 + fi +fi + +jtag <&2