You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
Bash
67 lines
2.0 KiB
Bash
#!/bin/sh
|
|
|
|
if [ $# -eq 0 ]; then
|
|
echo "No gateware location provided. Checking default location."
|
|
if [ ! -e /lib/firmware/mpfs_bitstream.spi ]; then
|
|
echo "No gateware file found."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Gateware location provided: $1"
|
|
if [ ! -e "$1"/mpfs_bitstream.spi ]; then
|
|
echo "No gateware file found."
|
|
exit 1
|
|
else
|
|
if [ ! -d /lib/firmware ]; then
|
|
mkdir /lib/firmware
|
|
fi
|
|
cp "$1"/mpfs_dtbo.spi /lib/firmware/mpfs_dtbo.spi
|
|
cp "$1"/mpfs_bitstream.spi /lib/firmware/mpfs_bitstream.spi
|
|
fi
|
|
fi
|
|
|
|
# Trash existing device tree overlay in case the rest of the process fails:
|
|
flash_erase /dev/mtd0 0 16
|
|
|
|
# Initiate FPGA update for dtbo
|
|
echo 1 > /sys/class/firmware/mpfs-auto-update/loading
|
|
|
|
# Write device tree overlay
|
|
cat /lib/firmware/mpfs_dtbo.spi > /sys/class/firmware/mpfs-auto-update/data
|
|
|
|
# Signal completion for dtbo load
|
|
echo 0 > /sys/class/firmware/mpfs-auto-update/loading
|
|
|
|
while [ "$(cat /sys/class/firmware/mpfs-auto-update/status)" != "idle" ]; do
|
|
# Do nothing, just keep checking
|
|
sleep 1
|
|
done
|
|
|
|
# Fake the presence of a golden image for now.
|
|
dd if=/dev/zero of=/dev/mtd0 count=1 bs=4
|
|
|
|
# Initiate FPGA update for bitstream
|
|
echo 1 > /sys/class/firmware/mpfs-auto-update/loading
|
|
|
|
# Write the firmware image to the data sysfs file
|
|
cat /lib/firmware/mpfs_bitstream.spi > /sys/class/firmware/mpfs-auto-update/data
|
|
|
|
# Signal completion for bitstream load
|
|
echo 0 > /sys/class/firmware/mpfs-auto-update/loading
|
|
|
|
while [ "$(cat /sys/class/firmware/mpfs-auto-update/status)" != "idle" ]; do
|
|
# Do nothing, just keep checking
|
|
sleep 1
|
|
done
|
|
|
|
# When the status is 'idle' and no error has occured, reboot the system for
|
|
# the gateware update to take effect. FPGA reprogramming takes places between
|
|
# Linux shut-down and HSS restarting the board.
|
|
if [ "$(cat /sys/class/firmware/mpfs-auto-update/error)" = "" ]; then
|
|
echo "FPGA update ready. Rebooting."
|
|
reboot
|
|
else
|
|
echo "FPGA update failed with status: $(cat /sys/class/firmware/mpfs-auto-update/error)"
|
|
exit 1
|
|
fi
|