hc
2024-11-15 a46a1ad097419aeea7350987dd95230f50d90392
commit | author | age
a07526 1 #!/bin/bash
H 2
3 soc=$1
4 gen=$2
5 lanes=$3
6 baundary=$4
7 input=$9
8
9 magic0=70
10 magic1=63
11 magic2=69
12 magic3=65
13 code0=00
14 code1=43
15 code2=00
16 code3=00
17 # case: vid=0x1d87 did=0x356a
18 vid_l=$5
19 vid_h=$6
20 did_l=$7
21 did_h=$8
22
23 function usage()
24 {
25    echo "./pcie_idb_config.sh <soc> <gen> <lanes> <uart_baundary> <vid_l> <vid_h> <did_l> <did_h> <input>"
26    echo "like following:"
27    echo "./pcie_idb_config.sh RK3588 3 4 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin"
28    echo "./pcie_idb_config.sh RK3588 3 2 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin"
29    echo "./pcie_idb_config.sh RK3588 3 4 115200  87 1d 6a 35 bin/rk35/rk3568_pcie_v*.bin"
30    echo "./pcie_idb_config.sh RK3568 3 2 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin"
31 }
32
33 #define PCIE_IDB_CFG_PHY_MODE_SHIFT       0
34 #define PCIE_IDB_CFG_PHY_MODE_MASK        3
35 #define PCIE_IDB_CFG_PHY_MODE_AGGREGATION PHY_MODE_PCIE_AGGREGATION /**< 4 PCIE3x4 */
36 #define PCIE_IDB_CFG_PHY_MODE_NANBNB      PHY_MODE_PCIE_NANBNB      /**< 0 P1:PCIE3x2  +  P0:PCIE3x2 */
37 #define PCIE_IDB_CFG_PHY_MODE_NANBBI      PHY_MODE_PCIE_NANBBI      /**< 1 P1:PCIE3x2  +  P0:PCIE3x1*2 */
38 #define PCIE_IDB_CFG_PHY_MODE_NABINB      PHY_MODE_PCIE_NABINB      /**< 2 P1:PCIE3x1*2 + P0:PCIE3x2 */
39 #define PCIE_IDB_CFG_PHY_MODE_NABIBI      PHY_MODE_PCIE_NABIBI      /**< 3 P1:PCIE3x1*2 + P0:PCIE3x1*2 */
40 #define PCIE_IDB_CFG_GEN_SHIFT            8
41 #define PCIE_IDB_CFG_GEN_MASK             3
42 #define PCIE_IDB_CFG_LANE_SHIFT           12
43 #define PCIE_IDB_CFG_LANE_MASK            3
44 #define PCIE_IDB_CFG_UART_ID_SHIFT        16
45 #define PCIE_IDB_CFG_UART_ID_MASK         3
46 #define PCIE_IDB_CFG_UART_MUX_SHIFT       20
47 #define PCIE_IDB_CFG_UART_MUX_MASK        3
48 #define PCIE_IDB_CFG_UART_RATE_SHIFT      24
49 #define PCIE_IDB_CFG_UART_RATE_MASK       2
50 #define PCIE_IDB_CFG_UART_RATE_DEFAULT    0
51 #define PCIE_IDB_CFG_UART_RATE_15000000   1
52 #define PCIE_IDB_CFG_UART_RATE_1152000    2
53
54 if [[ $soc != RK3588 && $soc != RK3568 ]]; then
55    echo "input param soc=$soc invalid, support RK3588/RK3568"
56    usage
57    exit
58 fi
59
60 if [[ $soc == RK3588 ]]; then
61    if [[ $gen != 3 ]]; then
62        echo "input param gen=$gen invalid, support 3"
63        usage
64        exit
65    fi
66
67    if [[ $lanes != 4 && $lanes != 2 ]]; then
68        echo "input param lanes=$lanes invalid, support 4/2"
69        usage
70        exit
71    fi
72
73    if [[ $baundary != 1500000 && $baundary != 115200 ]]; then
74        echo "input param baundary=$baundary invalid, support 1500000/115200"
75        usage
76        exit
77    fi
78 fi
79
80 if [[ $soc == RK3568 ]]; then
81    if [[ $gen != 3 ]]; then
82        echo "input param gen=$gen invalid, support 3"
83        usage
84        exit
85    fi
86
87    if [[ $lanes != 2 ]]; then
88        echo "input param lanes=$lanes invalid, support 2"
89        usage
90        exit
91    fi
92
93    if [[ $baundary != 1500000 ]]; then
94        echo "input param baundary=$baundary invalid, support 1500000"
95        usage
96        exit
97    fi
98 fi
99
100 if [ -f "$input" ]; then
101    echo "input param file=$input"
102 else
103    echo "input param file=$input invalid"
104    exit
105 fi 
106
107 if [[ $lanes == 4 ]]; then
108    if [[ $soc == RK3588 ]]; then
109        code0=04
110    fi
111 elif [[ $lanes == 2 ]]; then
112    code1=23
113 fi
114
115 if [[ $baundary == 1500000 ]]; then
116    code3=01
117 fi
118
119 if [[ $baundary == 115200 ]]; then
120    code3=02
121
122 fi
123
124 if [[ $baundary == 115200 ]]; then
125    code3=02
126
127 fi
128
129 echo "code0=$code0"
130 echo "code1=$code1"
131 echo "code2=$code2"
132 echo "code3=$code3"
133 echo "vid=0x${vid_h}${vid_l} did=0x${did_h}${did_l}"
134
135 echo -e -n "\x${magic0}\x${magic1}\x${magic2}\x${magic3}" > .pcie_idb_cfg.bak
136 echo -e -n "\x${code0}\x${code1}\x${code2}\x${code3}\x${vid_l}\x${vid_h}\x${did_l}\x${did_h}" >> .pcie_idb_cfg.bak
137 dd if=$input of=.temp bs=1 count=4 > /dev/null
138 dd if=.pcie_idb_cfg.bak of=$input bs=1 seek=4 conv=notrunc > /dev/null
139