meta-st-stm32mp/recipes-extended/m4projects/files/st-m4firmware-load-default.sh

80 lines
1.9 KiB
Bash

#!/bin/sh -
autodetect_board() {
if [ ! -d /proc/device-tree/ ];
then
echo "Proc Device tree are not available, Could not detect on which board we are" > /dev/kmsg
exit 1
fi
#search on device tree compatible entry the board type
if $(grep -q "stm32mp157[acdf]-ev" /proc/device-tree/compatible) ;
then
board="STM32MP15_M4_EVAL"
else if $(grep -q "stm32mp157[acdf]-dk" /proc/device-tree/compatible) ;
then
board="STM32MP15_M4_DISCO"
else
echo "Board is not an EVAL or a DISCO BOARD" > /dev/kmsg
exit 1
fi
fi
}
copy_default_M4_fw() {
#Test if ${board}_@default_fw@.elf is existing
if [ -z "$(find @userfs_mount_point@/examples/* -name ${board}_@default_fw@.elf)" ]; then
echo "The default copro example ${board}_@default_fw@ doesn't exist" > /dev/kmsg
exit 1
else
#copy ${board}_@default_fw@.elf into /lib/firmware/
cp $(find @userfs_mount_point@/examples/* -name ${board}_@default_fw@.elf) /lib/firmware/.
fi
}
firmware_load_start() {
# Change the name of the firmware
echo -n ${board}_@default_fw@.elf > /sys/class/remoteproc/remoteproc0/firmware
# Change path to found firmware
#echo -n /home/root >/sys/module/firmware_class/parameters/path
# Restart firmware
echo start >/sys/class/remoteproc/remoteproc0/state
echo "Booting fw image ${board}_@default_fw@.elf" > /dev/kmsg
}
firmware_load_stop() {
# Stop the firmware
if [ $(cat /sys/class/remoteproc/remoteproc0/state) == "running" ]; then
echo stop >/sys/class/remoteproc/remoteproc0/state
echo "Stopping fw image ${board}_@default_fw@.elf" > /dev/kmsg
else
echo "Default copro already stopped" > /dev/kmsg
fi
}
board=""
autodetect_board
case "$1" in
start)
copy_default_M4_fw
firmware_load_stop
firmware_load_start
;;
stop)
firmware_load_stop
;;
restart)
firmware_load_stop
firmware_load_start
;;
*)
echo "HELP: $0 [start|stop|restart]"
;;
esac
exit 0