xref: /OK3568_Linux_fs/external/rkscript/list-iodomain.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#!/bin/sh
2
3# $1 is chip
4CHIP_ID=""
5HIGH_LEVEL="3.3V" # get from chip trm
6LOW_LEVEL="1.8V"  # get from chip trm
7
8TOOL_HEXDUMP="NO"
9VERSION="V1.0.1"
10program_name="$0"
11
12function help_msg()
13{
14	echo "Please input chip."
15	echo "$program_name <chip>"
16	echo "chip: rv1126,rv1109,rk3308,rk3308b,rk3308bs"
17	exit 0
18}
19
20function echo_msg()
21{
22	echo -e "\e[1;31m    $1 \e[0m"
23}
24
25function get_reg()
26{
27	if [ -n "$1" ]; then
28		_val=`io -4 -r $1`
29		_val=`echo ${_val##*:}`
30		_val=`echo 0x${_val}`
31		echo "$_val"
32	else
33		echo "get register error."
34		exit -1
35	fi
36}
37
38function print_val()
39{
40	tag="$2"
41	if [ $(( $1 )) -eq 0 ];then
42		echo_msg "$tag $HIGH_LEVEL"
43	else
44		echo_msg "$tag $LOW_LEVEL"
45	fi
46}
47
48function list_iodomain_rv1126_rv1109()
49{
50	iodomain_val=`get_reg 0xFE020140`
51	pmuio1_vsel=$(( 0x1 << 9 ))
52	pmuio0_vsel=$(( 0x1 << 8 ))
53	vccio7_vsel=$(( 0x1 << 7 ))
54	vccio6_vsel=$(( 0x1 << 6 ))
55	vccio5_vsel=$(( 0x1 << 5 ))
56	vccio4_vsel=$(( 0x1 << 4 ))
57	vccio3_vsel=$(( 0x1 << 3 ))
58	vccio2_vsel=$(( 0x1 << 2 ))
59	vccio1_vsel=$(( 0x1 << 1 ))
60	flash_vosel=$(( 0x1 << 0 ))
61
62	print_val $(( $iodomain_val & $pmuio1_vsel )) "pmuio1_vsel:"
63	print_val $(( $iodomain_val & $pmuio0_vsel )) "pmuio0_vsel:"
64	print_val $(( $iodomain_val & $vccio7_vsel )) "vccio7_vsel:"
65	print_val $(( $iodomain_val & $vccio6_vsel )) "vccio6_vsel:"
66	print_val $(( $iodomain_val & $vccio5_vsel )) "vccio5_vsel:"
67	print_val $(( $iodomain_val & $vccio4_vsel )) "vccio4_vsel:"
68	print_val $(( $iodomain_val & $vccio3_vsel )) "vccio3_vsel:"
69	print_val $(( $iodomain_val & $vccio2_vsel )) "vccio2_vsel:"
70
71	if [ $(( $iodomain_val & $flash_vosel )) -eq 0 ];then
72		# read iomux
73		gpio0b3_iomux_val=`get_reg 0xFE020008`
74		gpio0b3_iomux_val_off=$(( 0x1 << 12 ))
75		if [ $(( $gpio0b3_iomux_val & $gpio0b3_iomux_val_off )) -eq 0 ];then
76			# read gpio data direction
77			gpio0b3_data_direction_val=`get_reg 0xFF460008`
78			gpio0b3_data_direction_val_off=$(( 0x1 << 11 ))
79			if [ $(( $gpio0b3_data_direction_val & $gpio0b3_data_direction_val_off )) -eq 0 ];then
80				# read gpio data register
81				gpio0b3_data_reg_val=`get_reg 0xFF460070`
82				gpio0b3_data_reg_val_off=$(( 0x1 << 11 ))
83				print_val $(( $gpio0b3_data_reg_val & $gpio0b3_data_reg_val_off )) "vccio1_vsel:"
84			else
85				echo "Check vccio1_vsel error!!!"
86			fi
87		else
88			echo "Check vccio1_vsel error!!!"
89		fi
90	fi
91	if [ $(( $iodomain_val & $flash_vosel )) -eq 1 ];then
92		print_val $(( $iodomain_val & $vccio1_vsel )) "vccio1_vsel:"
93	fi
94}
95
96function list_iodomain_rk3308_rk3308b_rk3308bs()
97{
98	iodomain_val=`get_reg 0xFF000300`
99	flash_vosel=$(( 0x1 << 8 ))
100	vccio5_vsel=$(( 0x1 << 5 ))
101	vccio4_vsel=$(( 0x1 << 4 ))
102	vccio3_vsel=$(( 0x1 << 3 ))
103	vccio2_vsel=$(( 0x1 << 2 ))
104	vccio1_vsel=$(( 0x1 << 1 ))
105	vccio0_vsel=$(( 0x1 << 0 ))
106
107	if [ $(( $iodomain_val & $flash_vosel )) -eq $(( 0x1 << 8 )) ];then
108		print_val $(( $iodomain_val & $vccio5_vsel )) "vccio5_vsel:"
109		print_val $(( $iodomain_val & $vccio4_vsel )) "vccio4_vsel:"
110		print_val $(( $iodomain_val & $vccio3_vsel )) "vccio3_vsel:"
111		print_val $(( $iodomain_val & $vccio2_vsel )) "vccio2_vsel:"
112		print_val $(( $iodomain_val & $vccio1_vsel )) "vccio1_vsel:"
113		print_val $(( $iodomain_val & $vccio0_vsel )) "vccio0_vsel:"
114        fi
115	if [ $(( $iodomain_val & $flash_vosel )) -eq 0 ];then
116		# read iomux
117		gpio0a4_iomux_val=`get_reg 0xFF000000`
118		gpio0a4_iomux_val_off=$(( 0x1 << 8 ))
119		if [ $(( $gpio0a4_iomux_val & $gpio0a4_iomux_val_off )) -eq 0 ];then
120			# read gpio data direction
121			gpio0a4_data_direction_val=`get_reg 0xFF220004`
122			gpio0a4_data_direction_val_off=$(( 0x1 << 4 ))
123			if [ $(( $gpio0a4_data_direction_val & $gpio0b3_data_direction_val_off )) -eq 0 ];then
124				# read gpio data register
125				gpio0a4_data_reg_val=`get_reg 0xFF220050`
126				gpio0a4_data_reg_val_off=$(( 0x1 << 4 ))
127				print_val $(( $iodomain_val & $vccio5_vsel )) "vccio5_vsel:"
128				print_val $(( $iodomain_val & $vccio4_vsel )) "vccio4_vsel:"
129				print_val $(( $gpio0a4_data_reg_val & $gpio0a4_data_reg_val_off )) "vccio3_vsel:"
130				print_val $(( $iodomain_val & $vccio2_vsel )) "vccio2_vsel:"
131				print_val $(( $iodomain_val & $vccio1_vsel )) "vccio1_vsel:"
132				print_val $(( $iodomain_val & $vccio0_vsel )) "vccio0_vsel:"
133			else
134				echo "Check vccio1_vsel error!!!"
135			fi
136		else
137			echo "Check vccio1_vsel error!!!"
138		fi
139	fi
140}
141
142function list_iodomain_rk3326_rk3326s()
143{
144	iodomain0_val=`get_reg 0xFF140180`
145	iodomain1_val=`get_reg 0xFF010100`
146
147	pmuio2_vsel=$(( 0x1 << 15 ))
148	pmuio1_vsel=$(( 0x1 << 14 ))
149
150	vccio5_vsel=$(( 0x1 << 6 ))
151	vccio4_vsel=$(( 0x1 << 5 ))
152	vccio3_vsel=$(( 0x1 << 4 ))
153	vccio2_vsel=$(( 0x1 << 3 ))
154	vccio1_vsel=$(( 0x1 << 2 ))
155
156	print_val $(( $iodomain1_val & $pmuio2_vsel )) "pmuio2_vsel:"
157	print_val $(( $iodomain1_val & $pmuio1_vsel )) "pmuio1_vsel:"
158	print_val $(( $iodomain0_val & $vccio5_vsel )) "vccio5_vsel:"
159	print_val $(( $iodomain0_val & $vccio4_vsel )) "vccio4_vsel:"
160	print_val $(( $iodomain0_val & $vccio3_vsel )) "vccio3_vsel:"
161	print_val $(( $iodomain0_val & $vccio2_vsel )) "vccio2_vsel:"
162	print_val $(( $iodomain0_val & $vccio1_vsel )) "vccio1_vsel:"
163}
164
165function list_iodomain_rk3566_rk3568()
166{
167	iodomain0_val=`get_reg 0xFDC20140`
168	iodomain1_val=`get_reg 0xFDC20144`
169	iodomain2_val=`get_reg 0xFDC20148`
170
171	pmuio2_vsel=$(( 0x1 << 1 ))
172
173	vccio7_vsel=$(( 0x1 << 7 ))
174	vccio6_vsel=$(( 0x1 << 6 ))
175	vccio5_vsel=$(( 0x1 << 5 ))
176	vccio4_vsel=$(( 0x1 << 4 ))
177	vccio3_vsel=$(( 0x1 << 3 ))
178	vccio2_vsel=$(( 0x1 << 2 ))
179	vccio1_vsel=$(( 0x1 << 1 ))
180
181	print_val $(( $iodomain2_val & $pmuio2_vsel )) "pmuio2_vsel:"
182	print_val $(( $iodomain0_val & $vccio7_vsel )) "vccio7_vsel:"
183	print_val $(( $iodomain0_val & $vccio6_vsel )) "vccio6_vsel:"
184	print_val $(( $iodomain0_val & $vccio5_vsel )) "vccio5_vsel:"
185	print_val $(( $iodomain0_val & $vccio4_vsel )) "vccio4_vsel:"
186	print_val $(( $iodomain0_val & $vccio3_vsel )) "vccio3_vsel:"
187	print_val $(( $iodomain0_val & $vccio2_vsel )) "vccio2_vsel:"
188	print_val $(( $iodomain0_val & $vccio1_vsel )) "vccio1_vsel:"
189}
190
191function chk_rv1126_rv1109()
192{
193	nvem_path="/sys/bus/nvmem/devices/rockchip-otp0/nvmem"
194	iff=`hexdump -C $nvem_path | grep -Ew "00000000  52 56 11 26|00000000  52 56 11 09"`
195	if [ -n "$iff" ]; then
196		CHIP_ID=rv1126_rv1109
197		HIGH_LEVEL="3.3V"
198		LOW_LEVEL="1.8V"
199		return 0
200	fi
201	return 1
202}
203
204function chk_rk3308_rk3308b_rk3308bs()
205{
206	nvem_path="/sys/bus/nvmem/devices/rockchip-otp0/nvmem"
207	iff=`hexdump -C $nvem_path | grep -Ew "00000000  52 4b 33 08"`
208	if [ -n "$iff" ]; then
209		CHIP_ID=rk3308
210		HIGH_LEVEL="3.3V"
211		LOW_LEVEL="1.8V"
212		return 0
213	fi
214	return 1
215}
216
217function chk_rk3326_rk3326s()
218{
219	nvem_path="/sys/bus/nvmem/devices/rockchip-otp0/nvmem"
220	iff=`hexdump -C $nvem_path | grep -Ew "00000000  52 4b 33 26"`
221	if [ -n "$iff" ]; then
222		CHIP_ID=rk3326
223		HIGH_LEVEL="3.3V"
224		LOW_LEVEL="1.8V"
225		return 0
226	fi
227	return 1
228}
229
230function chk_rk3566_rk3568()
231{
232	nvem_path="/sys/bus/nvmem/devices/rockchip-otp0/nvmem"
233	iff=`hexdump -C $nvem_path | grep -Ew "00000000  52 4b 35 68|00000000  52 4b 35 66"`
234	if [ -n "$iff" ]; then
235		CHIP_ID=rk356x
236		HIGH_LEVEL="3.3V"
237		LOW_LEVEL="1.8V"
238		return 0
239	fi
240	return 1
241}
242
243function get_chip_id()
244{
245	# if error, exit -1
246	if [ "$TOOL_HEXDUMP" = "YES" ];then
247		# if check otp success, just return CHIP_ID and ignore $1
248		chk_rv1126_rv1109
249		if [ $? -eq 0 ];then
250			return 0
251		fi
252		chk_rk3308_rk3308b_rk3308bs
253		if [ $? -eq 0 ];then
254			return 0
255		fi
256		chk_rk3326_rk3326s
257		if [ $? -eq 0 ];then
258			return 0
259		fi
260		chk_rk3566_rk3568
261		if [ $? -eq 0 ];then
262			return 0
263		fi
264	fi
265
266	# if check otp failed, check CHIP_ID with $1
267	case "$1" in
268		rv1126|rv1109|RV1126|RV1109)
269			chip_id=`io -4 -r 0XFE000110 | grep -w 00001109`
270			if [ $? -eq 0 -a -n "$chip_id" ]; then
271				CHIP_ID=rv1126_rv1109
272				HIGH_LEVEL="3.3V"
273				LOW_LEVEL="1.8V"
274				return 0
275			fi
276			;;
277		rk3308bs|RK3308BS)
278		chip_id=`io -4 -r 0XFF000800 | grep -w 0003308c`
279			if [ $? -eq 0 -a -n "$chip_id" ]; then
280				CHIP_ID=$1
281				HIGH_LEVEL="3.3V"
282				LOW_LEVEL="1.8V"
283				return 0
284			fi
285			;;
286		rk3308b|RK3308B)
287		chip_id=`io -4 -r 0XFF000800 | grep -w 00003308`
288			if [ $? -eq 0 -a -n "$chip_id" ]; then
289				CHIP_ID=$1
290				HIGH_LEVEL="3.3V"
291				LOW_LEVEL="1.8V"
292				return 0
293			fi
294			;;
295		rk3308|RK3308)
296		chip_id=`io -4 -r 0XFF000800 | grep -w 00000cea`
297			if [ $? -eq 0 -a -n "$chip_id" ]; then
298				CHIP_ID=$1
299				HIGH_LEVEL="3.3V"
300				LOW_LEVEL="1.8V"
301				return 0
302			fi
303			;;
304		rk3326|RK3326)
305		chip_id=`io -4 -r 0XFF140800 | grep -w 00003326`
306			if [ $? -eq 0 -a -n "$chip_id" ]; then
307				CHIP_ID=$1
308				HIGH_LEVEL="3.3V"
309				LOW_LEVEL="1.8V"
310				return 0
311			fi
312			;;
313		rk3326s|RK3326S)
314		chip_id=`io -4 -r 0XFF140800 | grep -w 00003326`
315			if [ $? -eq 0 -a -n "$chip_id" ]; then
316				CHIP_ID=$1
317				HIGH_LEVEL="3.3V"
318				LOW_LEVEL="1.8V"
319				return 0
320			fi
321			;;
322		rk3566|rk3568|RK3566|RK3568)
323			chip_id=`io -4 -r 0XFDC60800 | grep -w 00003566`
324			if [ $? -eq 0 -a -n "$chip_id" ]; then
325				CHIP_ID=$1
326				HIGH_LEVEL="3.3V"
327				LOW_LEVEL="1.8V"
328				return 0
329			fi
330			;;
331		*)
332			help_msg
333			;;
334	esac
335
336	echo "Not found CHIP_ID...exit!!!"
337	exit 0
338}
339
340# input parameter
341#      CHIP_ID    --> rv1126,rk3308,rk3308b,rk3308bs,rk3566,rk3568
342#      HIGH_LEVEL --> "3.3V"
343#      LOW_LEVEL  --> "1.8V"
344function get_iodomain_val()
345{
346	# if error, exit -1
347	echo_msg "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
348	echo_msg "XXXXXXXXXX      PLEASE CHECK IO-DOMAIN !!!!!!!!!!!!!!!"
349	echo_msg "XXXXXXXXXX        请务必检查IO电源域配置  !!!!!!!!!!!!!!!"
350	echo_msg "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
351	echo_msg "Get IO DOMAIN VALUE:"
352	case "$CHIP_ID" in
353		rv1126|rv1109|RV1126|RV1109|rv1126_rv1109|RV1126_RV1109)
354			list_iodomain_rv1126_rv1109
355			;;
356		rk3308bs|rk3308b|rk3308|RK3308BS|RK3308B|RK3308)
357			list_iodomain_rk3308_rk3308b_rk3308bs
358			;;
359		rk3326|rk3326s|RK3326|RK3326)
360			list_iodomain_rk3326_rk3326s
361			;;
362		rk3566|rk3568|rk356x|RK3566|RK3568|RK356X)
363			echo_msg "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
364			echo_msg "注意事项:PMUIO1/PMUIO2 固定不可配"
365			echo_msg "VCCIO2电平由硬件FLASH_VOL_SEL决定:"
366			echo_msg "当VCCIo2供电是1.8V,则FLASH_VOL_SEL管脚必须保持为高电平;"
367			echo_msg "当VCCIO2供电是3.3V,则FLASH_VOL_SEL管脚必须保持为低电平;"
368			echo_msg "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
369
370			list_iodomain_rk3566_rk3568
371			;;
372		*)
373			help_msg
374			;;
375	esac
376	echo_msg "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
377	exit 0
378}
379
380function chk_env()
381{
382	echo_msg "$0 version: $VERSION"
383	# if error, exit -1
384	which io &>/dev/null
385	if [ $? -ne 0 ]; then
386		echo_msg "install io command first!!!"
387		exit -1
388	fi
389
390	which hexdump &>/dev/null
391	if [ $? -eq 0 ]; then
392		TOOL_HEXDUMP="YES"
393	fi
394}
395
396if [ "$1" = "-h" -o "$1" = "--help" ]; then
397	help_msg
398fi
399chk_env
400get_chip_id $1
401echo_msg "Get CHIP ID: $CHIP_ID"
402get_iodomain_val
403