linuxOS_AP05/debian/overlay-firmware/usr/bin/npu_upgrade
2025-09-26 09:40:02 +08:00

156 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
PROGRAM=${0##*/}
#reset npu
/usr/bin/npu_powerctrl -i
/usr/bin/npu_powerctrl -o
sleep 1
if [ $# -ne 4 ]; then
echo 'Usage: '$PROGRAM' loader uboot trust boot'
exit
fi
DIR="/usr/share/npu_fw"
UPGRADE_TOOL=/usr/bin/upgrade_tool
LOADER=$DIR/$1
UBOOT=$DIR/$2
TRUST=$DIR/$3
BOOT=$DIR/$4
UBOOT_ADDR=0x20000
TRUST_ADDR=0x20800
BOOT_ADDR=0x21000
function download_func()
{
local RET1=1
echo 'start to download loader...' >> /tmp/npu.log
$UPGRADE_TOOL db $LOADER > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to download loader!' >> /tmp/npu.log
return $RET1;
fi
echo 'download loader ok' >> /tmp/npu.log
sleep 1
echo 'start to wait loader...' >> /tmp/npu.log
$UPGRADE_TOOL td > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to wait loader!' >> /tmp/npu.log
return $RET1
fi
echo 'loader is ready' >> /tmp/npu.log
echo 'start to write uboot...' >> /tmp/npu.log
$UPGRADE_TOOL wl $UBOOT_ADDR $UBOOT > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to write uboot!' >> /tmp/npu.log
return $RET1
fi
echo 'write uboot ok' >> /tmp/npu.log
echo 'start to write trust...'
$UPGRADE_TOOL wl $TRUST_ADDR $TRUST > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to write trust!' >> /tmp/npu.log
return $RET1
fi
echo 'write trust ok' >> /tmp/npu.log
echo 'start to write boot...' >> /tmp/npu.log
$UPGRADE_TOOL wl $BOOT_ADDR $BOOT > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to write boot!' >> /tmp/npu.log
return $RET1
fi
echo 'write boot ok' >> /tmp/npu.log
RET1=0
return $RET1
}
function check_device_ready_func()
{
echo 'start to wait device...' > /tmp/npu.log
local i=0
local RET=1
while [ $i -lt 10 ]; do
$UPGRADE_TOOL ld > /dev/null
if [ $? -ne 0 ]; then
i=$((i+1))
echo $i
sleep 0.1
else
sleep 0.1
break
fi
if [ $i -eq 5 ]; then
/usr/bin/npu_powerctrl -o
sleep 3
echo 'reset npu to retry!!!' >> /tmp/npu.log
fi
done
if [ $i -ge 10 ]; then
echo 'failed to wait device!' >> /tmp/npu.log
return $RET
fi
echo 'device is ready' >> /tmp/npu.log
RET=0
return $RET
}
function poweron_Npu_func()
{
/usr/bin/npu_powerctrl -i
sleep 0.1
/usr/bin/npu_powerctrl -o
sleep 1
}
if [ ! -f $UPGRADE_TOOL ]; then
echo $UPGRADE_TOOL 'is not existed!'
exit
fi
if [ ! -f $LOADER ]; then
echo $LOADER 'is not existed!'
exit
fi
if [ ! -f $UBOOT ]; then
echo $UBOOT 'is not existed!'
exit
fi
if [ ! -f $TRUST ]; then
echo $TRUST 'is not existed!'
exit
fi
if [ ! -f $BOOT ]; then
echo $BOOT 'is not existed!'
exit
fi
check_device_ready_func
if [ $? = 1 ];then
echo "check_device_ready error!!!" >> /tmp/npu.log
poweron_Npu_func
check_device_ready_func
fi
download_func
if [ $? = 1 ];then
echo "reset download_func"
poweron_Npu_func
check_device_ready_func
download_func
fi
echo 'start to run system...' >> /tmp/npu.log
$UPGRADE_TOOL rs $UBOOT_ADDR $TRUST_ADDR $BOOT_ADDR $UBOOT $TRUST $BOOT > /dev/null
if [ $? -ne 0 ]; then
echo 'failed to run system!' >> /tmp/npu.log
exit
fi
echo 'run system ok' >> /tmp/npu.log