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