123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/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
|