1*4882a593Smuzhiyun#!/bin/bash 2*4882a593SmuzhiyunPROGRAM=${0##*/} 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun#reset npu 5*4882a593Smuzhiyun/usr/bin/npu_powerctrl -i 6*4882a593Smuzhiyun/usr/bin/npu_powerctrl -o 7*4882a593Smuzhiyunsleep 1 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunif [ $# -ne 4 ]; then 10*4882a593Smuzhiyun echo 'Usage: '$PROGRAM' loader uboot trust boot' 11*4882a593Smuzhiyun exit 12*4882a593Smuzhiyunfi 13*4882a593SmuzhiyunDIR="/usr/share/npu_fw_pcie" 14*4882a593SmuzhiyunUPGRADE_TOOL=/usr/bin/upgrade_tool 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunLOADER=$DIR/$1 17*4882a593SmuzhiyunUBOOT=$DIR/$2 18*4882a593SmuzhiyunTRUST=$DIR/$3 19*4882a593SmuzhiyunBOOT=$DIR/$4 20*4882a593SmuzhiyunUBOOT_ADDR=0x20000 21*4882a593SmuzhiyunTRUST_ADDR=0x20800 22*4882a593SmuzhiyunBOOT_ADDR=0x21000 23*4882a593Smuzhiyun 24*4882a593Smuzhiyunfunction download_func() 25*4882a593Smuzhiyun{ 26*4882a593Smuzhiyun local RET1=1 27*4882a593Smuzhiyun echo 'start to download loader...' >> /tmp/npu.log 28*4882a593Smuzhiyun $UPGRADE_TOOL db $LOADER > /dev/null 29*4882a593Smuzhiyun if [ $? -ne 0 ]; then 30*4882a593Smuzhiyun echo 'failed to download loader!' >> /tmp/npu.log 31*4882a593Smuzhiyun return $RET1; 32*4882a593Smuzhiyun fi 33*4882a593Smuzhiyun echo 'download loader ok' >> /tmp/npu.log 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun sleep 1 36*4882a593Smuzhiyun echo 'start to wait loader...' >> /tmp/npu.log 37*4882a593Smuzhiyun $UPGRADE_TOOL td > /dev/null 38*4882a593Smuzhiyun if [ $? -ne 0 ]; then 39*4882a593Smuzhiyun echo 'failed to wait loader!' >> /tmp/npu.log 40*4882a593Smuzhiyun return $RET1 41*4882a593Smuzhiyun fi 42*4882a593Smuzhiyun echo 'loader is ready' >> /tmp/npu.log 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun echo 'start to write uboot...' >> /tmp/npu.log 45*4882a593Smuzhiyun $UPGRADE_TOOL wl $UBOOT_ADDR $UBOOT > /dev/null 46*4882a593Smuzhiyun if [ $? -ne 0 ]; then 47*4882a593Smuzhiyun echo 'failed to write uboot!' >> /tmp/npu.log 48*4882a593Smuzhiyun return $RET1 49*4882a593Smuzhiyun fi 50*4882a593Smuzhiyun echo 'write uboot ok' >> /tmp/npu.log 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun echo 'start to write trust...' 53*4882a593Smuzhiyun $UPGRADE_TOOL wl $TRUST_ADDR $TRUST > /dev/null 54*4882a593Smuzhiyun if [ $? -ne 0 ]; then 55*4882a593Smuzhiyun echo 'failed to write trust!' >> /tmp/npu.log 56*4882a593Smuzhiyun return $RET1 57*4882a593Smuzhiyun fi 58*4882a593Smuzhiyun echo 'write trust ok' >> /tmp/npu.log 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun echo 'start to write boot...' >> /tmp/npu.log 61*4882a593Smuzhiyun $UPGRADE_TOOL wl $BOOT_ADDR $BOOT > /dev/null 62*4882a593Smuzhiyun if [ $? -ne 0 ]; then 63*4882a593Smuzhiyun echo 'failed to write boot!' >> /tmp/npu.log 64*4882a593Smuzhiyun return $RET1 65*4882a593Smuzhiyun fi 66*4882a593Smuzhiyun echo 'write boot ok' >> /tmp/npu.log 67*4882a593Smuzhiyun RET1=0 68*4882a593Smuzhiyun return $RET1 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyun 71*4882a593Smuzhiyunfunction check_device_ready_func() 72*4882a593Smuzhiyun{ 73*4882a593Smuzhiyun echo 'start to wait device...' > /tmp/npu.log 74*4882a593Smuzhiyun local i=0 75*4882a593Smuzhiyun local RET=1 76*4882a593Smuzhiyun while [ $i -lt 10 ]; do 77*4882a593Smuzhiyun $UPGRADE_TOOL ld > /dev/null 78*4882a593Smuzhiyun if [ $? -ne 0 ]; then 79*4882a593Smuzhiyun i=$((i+1)) 80*4882a593Smuzhiyun echo $i 81*4882a593Smuzhiyun sleep 0.1 82*4882a593Smuzhiyun else 83*4882a593Smuzhiyun sleep 0.1 84*4882a593Smuzhiyun break 85*4882a593Smuzhiyun fi 86*4882a593Smuzhiyun if [ $i -eq 5 ]; then 87*4882a593Smuzhiyun /usr/bin/npu_powerctrl -o 88*4882a593Smuzhiyun sleep 3 89*4882a593Smuzhiyun echo 'reset npu to retry!!!' >> /tmp/npu.log 90*4882a593Smuzhiyun fi 91*4882a593Smuzhiyun done 92*4882a593Smuzhiyun if [ $i -ge 10 ]; then 93*4882a593Smuzhiyun echo 'failed to wait device!' >> /tmp/npu.log 94*4882a593Smuzhiyun return $RET 95*4882a593Smuzhiyun fi 96*4882a593Smuzhiyun echo 'device is ready' >> /tmp/npu.log 97*4882a593Smuzhiyun RET=0 98*4882a593Smuzhiyun return $RET 99*4882a593Smuzhiyun} 100*4882a593Smuzhiyun 101*4882a593Smuzhiyunfunction poweron_Npu_func() 102*4882a593Smuzhiyun{ 103*4882a593Smuzhiyun /usr/bin/npu_powerctrl -i 104*4882a593Smuzhiyun sleep 0.1 105*4882a593Smuzhiyun /usr/bin/npu_powerctrl -o 106*4882a593Smuzhiyun sleep 1 107*4882a593Smuzhiyun} 108*4882a593Smuzhiyun 109*4882a593Smuzhiyunif [ ! -f $UPGRADE_TOOL ]; then 110*4882a593Smuzhiyun echo $UPGRADE_TOOL 'is not existed!' 111*4882a593Smuzhiyun exit 112*4882a593Smuzhiyunfi 113*4882a593Smuzhiyun 114*4882a593Smuzhiyunif [ ! -f $LOADER ]; then 115*4882a593Smuzhiyun echo $LOADER 'is not existed!' 116*4882a593Smuzhiyun exit 117*4882a593Smuzhiyunfi 118*4882a593Smuzhiyun 119*4882a593Smuzhiyunif [ ! -f $UBOOT ]; then 120*4882a593Smuzhiyun echo $UBOOT 'is not existed!' 121*4882a593Smuzhiyun exit 122*4882a593Smuzhiyunfi 123*4882a593Smuzhiyun 124*4882a593Smuzhiyunif [ ! -f $TRUST ]; then 125*4882a593Smuzhiyun echo $TRUST 'is not existed!' 126*4882a593Smuzhiyun exit 127*4882a593Smuzhiyunfi 128*4882a593Smuzhiyun 129*4882a593Smuzhiyunif [ ! -f $BOOT ]; then 130*4882a593Smuzhiyun echo $BOOT 'is not existed!' 131*4882a593Smuzhiyun exit 132*4882a593Smuzhiyunfi 133*4882a593Smuzhiyun 134*4882a593Smuzhiyuncheck_device_ready_func 135*4882a593Smuzhiyunif [ $? = 1 ];then 136*4882a593Smuzhiyun echo "check_device_ready error!!!" >> /tmp/npu.log 137*4882a593Smuzhiyun poweron_Npu_func 138*4882a593Smuzhiyun check_device_ready_func 139*4882a593Smuzhiyunfi 140*4882a593Smuzhiyun 141*4882a593Smuzhiyundownload_func 142*4882a593Smuzhiyunif [ $? = 1 ];then 143*4882a593Smuzhiyun echo "reset download_func" 144*4882a593Smuzhiyun poweron_Npu_func 145*4882a593Smuzhiyun check_device_ready_func 146*4882a593Smuzhiyun download_func 147*4882a593Smuzhiyunfi 148*4882a593Smuzhiyun 149*4882a593Smuzhiyunecho 'start to run system...' >> /tmp/npu.log 150*4882a593Smuzhiyun$UPGRADE_TOOL rs $UBOOT_ADDR $TRUST_ADDR $BOOT_ADDR $UBOOT $TRUST $BOOT > /dev/null 151*4882a593Smuzhiyunif [ $? -ne 0 ]; then 152*4882a593Smuzhiyun echo 'failed to run system!' >> /tmp/npu.log 153*4882a593Smuzhiyun exit 154*4882a593Smuzhiyunfi 155*4882a593Smuzhiyunecho 'run system ok' >> /tmp/npu.log 156*4882a593Smuzhiyunecho 1 > /sys/devices/platform/f8000000.pcie/pcie_deferred 157