From 2eb378416211e0e72af8ed6975abb085362fbb9a Mon Sep 17 00:00:00 2001 From: vauban353 Date: Tue, 1 Jul 2025 15:07:00 +0100 Subject: [PATCH] rootfs: Update gateware scripts to support kernel 6.6 and later. --- .../beagleboard/gateware/change-gateware.sh | 35 +++---- rootfs/etc/microchip/update-gateware-6.1.sh | 49 ++++++++++ rootfs/etc/microchip/update-gateware.sh | 93 +++++++++++-------- 3 files changed, 123 insertions(+), 54 deletions(-) create mode 100755 rootfs/etc/microchip/update-gateware-6.1.sh mode change 100755 => 100644 rootfs/etc/microchip/update-gateware.sh diff --git a/rootfs/etc/beagleboard/gateware/change-gateware.sh b/rootfs/etc/beagleboard/gateware/change-gateware.sh index 83da5bc..8ec81a4 100755 --- a/rootfs/etc/beagleboard/gateware/change-gateware.sh +++ b/rootfs/etc/beagleboard/gateware/change-gateware.sh @@ -1,5 +1,9 @@ #!/bin/bash +kernel_version=$(uname -r) + +kernel_major_minor=$(echo "$kernel_version" | cut -d '.' -f 1,2) + if ! id | grep -q root; then echo "must be run as root" exit @@ -7,21 +11,20 @@ fi if [ -d $1 ] then - echo "Changing gateware." - if [ -e $1/mpfs_bitstream.spi ] - then - if [ -e $1/mpfs_dtbo.spi ] - then - cp -v $1/mpfs_dtbo.spi /lib/firmware/mpfs_dtbo.spi - cp -v $1/mpfs_bitstream.spi /lib/firmware/mpfs_bitstream.spi - sync - . /etc/microchip/update-gateware.sh - else - echo "No device tree overlay file found." - fi - else - echo "No gateware file found." - fi + echo "Changing gateware." + if [ -e $1/LinuxProgramming/mpfs_bitstream.spi ] + then + if [ "$kernel_major_minor" == "6.1" ]; then + cp -v $1/LinuxProgramming/mpfs_dtbo.spi /lib/firmware/mpfs_dtbo.spi + cp -v $1/LinuxProgramming/mpfs_bitstream.spi /lib/firmware/mpfs_bitstream.spi + sync + source /usr/share/microchip/gateware/update-gateware-6-1.sh $1/LinuxProgramming + else + source /usr/share/microchip/gateware/update-gateware.sh $1/LinuxProgramming + fi + else + echo "No xxx gateware file found." + fi else - echo "No directory found for this requested gateware." + echo "No directory found for this requested gateware." fi diff --git a/rootfs/etc/microchip/update-gateware-6.1.sh b/rootfs/etc/microchip/update-gateware-6.1.sh new file mode 100755 index 0000000..21eeb27 --- /dev/null +++ b/rootfs/etc/microchip/update-gateware-6.1.sh @@ -0,0 +1,49 @@ +#!/bin/bash +echo "================================================================================" +echo "| FPGA Gateware Update |" +echo "| |" +echo "| Please ensure that the mpfs_bitstream.spi file containing the gateware |" +echo "| update has been copied to directory /lib/firmware. |" +echo "| |" +echo "| !!! This will take a couple of minutes. !!! |" +echo "| |" +echo "| Give the system a few minutes to reboot itself |" +echo "| after Linux has shutdown. |" +echo "| |" +echo "================================================================================" + +if [ ! -f /usr/sbin/mtd_debug ] ; then + echo "Install mtd-utils package" + exit 2 +fi + +if [ ! -f /lib/firmware/mpfs_bitstream.spi ] ; then + exit 2 +fi + +#read -rsp $'Press any key to continue...\n' -n1 key + +if [ ! -f /sys/kernel/debug/fpga/microchip_exec_update ] ; then + /usr/bin/mount -t debugfs none /sys/kernel/debug +fi + +# Trash exisitng device tree overlay in case the rest of the process fails: +/usr/sbin/mtd_debug erase /dev/mtd0 0x0 0x10000 + +# Write device tree overlay +dtbo_ls=$(ls -l /lib/firmware/mpfs_dtbo.spi) +dtbo_size=$(echo $dtbo_ls | cut -d " " -f 5) + +echo "Writing mpfs_dtbo.spi to /dev/mtd0" +/usr/sbin/mtd_debug write /dev/mtd0 0x400 $dtbo_size /lib/firmware/mpfs_dtbo.spi > /dev/zero + +# Fake the presence of a golden image for now. +/usr/sbin/mtd_debug write /dev/mtd0 0 4 /dev/zero > /dev/zero + +# Initiate FPGA update. +echo "Triggering FPGA Gateware Update (/sys/kernel/debug/fpga/microchip_exec_update)" +echo 1 > /sys/kernel/debug/fpga/microchip_exec_update + +# Reboot Linux for the gateware update to take effect. +# FPGA reprogramming takes places between Linux shut-down and HSS restarting the board. +/usr/sbin/reboot diff --git a/rootfs/etc/microchip/update-gateware.sh b/rootfs/etc/microchip/update-gateware.sh old mode 100755 new mode 100644 index 21eeb27..6d92dec --- a/rootfs/etc/microchip/update-gateware.sh +++ b/rootfs/etc/microchip/update-gateware.sh @@ -1,49 +1,66 @@ -#!/bin/bash -echo "================================================================================" -echo "| FPGA Gateware Update |" -echo "| |" -echo "| Please ensure that the mpfs_bitstream.spi file containing the gateware |" -echo "| update has been copied to directory /lib/firmware. |" -echo "| |" -echo "| !!! This will take a couple of minutes. !!! |" -echo "| |" -echo "| Give the system a few minutes to reboot itself |" -echo "| after Linux has shutdown. |" -echo "| |" -echo "================================================================================" - -if [ ! -f /usr/sbin/mtd_debug ] ; then - echo "Install mtd-utils package" - exit 2 -fi +#!/bin/sh -if [ ! -f /lib/firmware/mpfs_bitstream.spi ] ; then - exit 2 +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 -#read -rsp $'Press any key to continue...\n' -n1 key - -if [ ! -f /sys/kernel/debug/fpga/microchip_exec_update ] ; then - /usr/bin/mount -t debugfs none /sys/kernel/debug -fi +# Trash existing device tree overlay in case the rest of the process fails: +flash_erase /dev/mtd0 0 16 -# Trash exisitng device tree overlay in case the rest of the process fails: -/usr/sbin/mtd_debug erase /dev/mtd0 0x0 0x10000 +# Initiate FPGA update for dtbo +echo 1 > /sys/class/firmware/mpfs-auto-update/loading # Write device tree overlay -dtbo_ls=$(ls -l /lib/firmware/mpfs_dtbo.spi) -dtbo_size=$(echo $dtbo_ls | cut -d " " -f 5) +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 -echo "Writing mpfs_dtbo.spi to /dev/mtd0" -/usr/sbin/mtd_debug write /dev/mtd0 0x400 $dtbo_size /lib/firmware/mpfs_dtbo.spi > /dev/zero +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. -/usr/sbin/mtd_debug write /dev/mtd0 0 4 /dev/zero > /dev/zero +dd if=/dev/zero of=/dev/mtd0 count=1 bs=4 -# Initiate FPGA update. -echo "Triggering FPGA Gateware Update (/sys/kernel/debug/fpga/microchip_exec_update)" -echo 1 > /sys/kernel/debug/fpga/microchip_exec_update +# Initiate FPGA update for bitstream +echo 1 > /sys/class/firmware/mpfs-auto-update/loading -# Reboot Linux for the gateware update to take effect. -# FPGA reprogramming takes places between Linux shut-down and HSS restarting the board. -/usr/sbin/reboot +# 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