From 3fb075afad96a8d6f1877c0c2b202f61cb5993aa Mon Sep 17 00:00:00 2001 From: Jamie Gibbons Date: Wed, 12 Feb 2025 09:21:20 +0000 Subject: [PATCH] board/beagleboard/beaglev_fire: fix update gateware feature Following the addition of the firmware upload API in linux v6.6, using debugfs for firmware updating has been removed. Update the update-gateware script to use the firmware upload API with sysfs and enable applying the overlays during boot. The fw_upload interface can detect when there is an overlay file and will write it correctly. Use this functionality to write the overlay file and remove dd command related code. Fixes: 8ce97fd550d6 ("configs/beaglev_fire: bump Linux and U-Boot") Reviewed-by: Conor Dooley Signed-off-by: Jamie Gibbons Signed-off-by: Romain Naour --- board/beagleboard/beaglev_fire/boot.cmd | 1 + .../usr/share/microchip/update-gateware.sh | 49 ++++++++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) mode change 100644 => 100755 board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh diff --git a/board/beagleboard/beaglev_fire/boot.cmd b/board/beagleboard/beaglev_fire/boot.cmd index 05f4858bac..1402458d8b 100644 --- a/board/beagleboard/beaglev_fire/boot.cmd +++ b/board/beagleboard/beaglev_fire/boot.cmd @@ -12,4 +12,5 @@ bootm loados ${scriptaddr}; bootm ramdisk; bootm prep; fdt set /soc/ethernet@20110000 mac-address ${beaglevfire_mac_addr0}; +run design_overlays; bootm go; diff --git a/board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh b/board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh old mode 100644 new mode 100755 index f455037b60..249c5bd260 --- a/board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh +++ b/board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh @@ -13,20 +13,47 @@ fi cp "$1"/mpfs_dtbo.spi /lib/firmware/mpfs_dtbo.spi cp "$1"/mpfs_bitstream.spi /lib/firmware/mpfs_bitstream.spi -mount -t debugfs none /sys/kernel/debug - # Trash existing device tree overlay in case the rest of the process fails: -flash_erase /dev/mtd0 0 1024 +flash_erase /dev/mtd0 0 16 -# # Write device tree overlay -dd if=/lib/firmware/mpfs_dtbo.spi of=/dev/mtd0 seek=1024 +# 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=4 bs=1 +dd if=/dev/zero of=/dev/mtd0 count=1 bs=4 -# Initiate FPGA 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. -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