xref: /OK3568_Linux_fs/debian/overlay-firmware/usr/bin/npu_upgrade_pcie (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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