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