1
0
mirror of git://projects.qi-hardware.com/wernermisc.git synced 2024-11-15 16:21:32 +02:00
wernermisc/m1/tools/m1nor

93 lines
2.3 KiB
Bash
Executable File

#!/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 <<EOF
cable milkymist
detect
instruction CFG_OUT 000100 BYPASS
instruction CFG_IN 000101 BYPASS
pld load "$fjmem"
initbus fjmem opcode=000010
frequency 6000000
detectflash 0
endian big
flashmem "$off" "$1" noverify
pld reconfigure
EOF
echo "Flashed $1 at offset $off using $fjmem" 1>&2