Program FPGA and load driver on boot
This commit is contained in:
parent
535b7a1a0a
commit
b78f9be35e
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Load FPGA firmware from SD card and program FPGA.
|
||||||
|
#
|
||||||
|
|
||||||
|
FIRMWARE_FILE="puzzlefw_top.bit.bin"
|
||||||
|
|
||||||
|
start() {
|
||||||
|
|
||||||
|
# If firmware is not on rootfs, copy it from the SD card.
|
||||||
|
if [ ! -f /lib/firmware/$FIRMWARE_FILE ]; then
|
||||||
|
|
||||||
|
mkdir -p /lib/firmware
|
||||||
|
|
||||||
|
mkdir -p /mnt/tmp_sdcard
|
||||||
|
mount -t vfat -o fmask=0177 -r /dev/mmcblk0p1 /mnt/tmp_sdcard
|
||||||
|
|
||||||
|
if ! cp /mnt/tmp_sdcard/$FIRMWARE_FILE /lib/firmware ; then
|
||||||
|
echo "ERROR: Failed to copy FPGA firmware from SD card" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
umount /mnt/tmp_sdcard
|
||||||
|
rmdir /mnt/tmp_sdcard
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that firmware is in place.
|
||||||
|
if [ ! -f /lib/firmware/$FIRMWARE_FILE ]; then
|
||||||
|
echo "ERROR: FPGA firmware not found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Program FPGA.
|
||||||
|
echo "Programming FPGA ..."
|
||||||
|
echo 0 > /sys/class/fpga_manager/fpga0/flags
|
||||||
|
echo $FIRMWARE_FILE > /sys/class/fpga_manager/fpga0/firmware
|
||||||
|
|
||||||
|
# Wait until FPGA programmed.
|
||||||
|
sleep 5
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop|restart|reload)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 start"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Load puzzlefw kernel driver.
|
||||||
|
#
|
||||||
|
|
||||||
|
start() {
|
||||||
|
|
||||||
|
# Check that the FPGA is running.
|
||||||
|
# If the PuzzleFW firmware is not running on the FPGA,
|
||||||
|
# attempting to load the driver will crash the system.
|
||||||
|
read fpga_state </sys/class/fpga_manager/fpga0/state
|
||||||
|
if [ "$fpga_state" != "operating" ]; then
|
||||||
|
echo "ERROR: FPGA not operating" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load module.
|
||||||
|
echo "Loading puzzlefw driver ..."
|
||||||
|
insmod /opt/puzzlefw/driver/puzzlefw.ko
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n "Unloading puzzlefw driver ..."
|
||||||
|
rmmod puzzlefw
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
;;
|
||||||
|
restart|reload)
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|restart}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
PATH="$PATH:/opt/puzzlefw/bin"
|
Loading…
Reference in New Issue