mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-08-01 21:23:51 -09:00
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: 8ce97fd550 ("configs/beaglev_fire: bump Linux and U-Boot")
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
This commit is contained in:
committed by
Romain Naour
parent
452cb98323
commit
3fb075afad
@@ -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;
|
||||
|
||||
49
board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh
Normal file → Executable file
49
board/beagleboard/beaglev_fire/rootfs-overlay/usr/share/microchip/update-gateware.sh
Normal file → Executable file
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user