190d8781dSJon Lin#!/bin/bash 290d8781dSJon Lin 390d8781dSJon Linsoc=$1 490d8781dSJon Lingen=$2 590d8781dSJon Linlanes=$3 690d8781dSJon Linbaundary=$4 790d8781dSJon Lininput=$9 890d8781dSJon Lin 990d8781dSJon Linmagic0=70 1090d8781dSJon Linmagic1=63 1190d8781dSJon Linmagic2=69 1290d8781dSJon Linmagic3=65 1390d8781dSJon Lincode0=00 1490d8781dSJon Lincode1=43 1590d8781dSJon Lincode2=00 1690d8781dSJon Lincode3=00 1790d8781dSJon Lin# case: vid=0x1d87 did=0x356a 1890d8781dSJon Linvid_l=$5 1990d8781dSJon Linvid_h=$6 2090d8781dSJon Lindid_l=$7 2190d8781dSJon Lindid_h=$8 2290d8781dSJon Lin 2390d8781dSJon Linfunction usage() 2490d8781dSJon Lin{ 2590d8781dSJon Lin echo "./pcie_idb_config.sh <soc> <gen> <lanes> <uart_baundary> <vid_l> <vid_h> <did_l> <did_h> <input>" 2690d8781dSJon Lin echo "like following:" 2790d8781dSJon Lin echo "./pcie_idb_config.sh RK3588 3 4 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin" 2890d8781dSJon Lin echo "./pcie_idb_config.sh RK3588 3 2 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin" 2990d8781dSJon Lin echo "./pcie_idb_config.sh RK3588 3 4 115200 87 1d 6a 35 bin/rk35/rk3568_pcie_v*.bin" 3090d8781dSJon Lin echo "./pcie_idb_config.sh RK3568 3 2 1500000 87 1d 6a 35 bin/rk35/rk3588_pcie_v*.bin" 3190d8781dSJon Lin} 3290d8781dSJon Lin 3390d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_SHIFT 0 3490d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_MASK 3 3590d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_AGGREGATION PHY_MODE_PCIE_AGGREGATION /**< 4 PCIE3x4 */ 3690d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_NANBNB PHY_MODE_PCIE_NANBNB /**< 0 P1:PCIE3x2 + P0:PCIE3x2 */ 3790d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_NANBBI PHY_MODE_PCIE_NANBBI /**< 1 P1:PCIE3x2 + P0:PCIE3x1*2 */ 3890d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_NABINB PHY_MODE_PCIE_NABINB /**< 2 P1:PCIE3x1*2 + P0:PCIE3x2 */ 3990d8781dSJon Lin#define PCIE_IDB_CFG_PHY_MODE_NABIBI PHY_MODE_PCIE_NABIBI /**< 3 P1:PCIE3x1*2 + P0:PCIE3x1*2 */ 4090d8781dSJon Lin#define PCIE_IDB_CFG_GEN_SHIFT 8 4190d8781dSJon Lin#define PCIE_IDB_CFG_GEN_MASK 3 4290d8781dSJon Lin#define PCIE_IDB_CFG_LANE_SHIFT 12 4390d8781dSJon Lin#define PCIE_IDB_CFG_LANE_MASK 3 4490d8781dSJon Lin#define PCIE_IDB_CFG_UART_ID_SHIFT 16 4590d8781dSJon Lin#define PCIE_IDB_CFG_UART_ID_MASK 3 4690d8781dSJon Lin#define PCIE_IDB_CFG_UART_MUX_SHIFT 20 4790d8781dSJon Lin#define PCIE_IDB_CFG_UART_MUX_MASK 3 4890d8781dSJon Lin#define PCIE_IDB_CFG_UART_RATE_SHIFT 24 4990d8781dSJon Lin#define PCIE_IDB_CFG_UART_RATE_MASK 2 5090d8781dSJon Lin#define PCIE_IDB_CFG_UART_RATE_DEFAULT 0 5190d8781dSJon Lin#define PCIE_IDB_CFG_UART_RATE_15000000 1 5290d8781dSJon Lin#define PCIE_IDB_CFG_UART_RATE_1152000 2 5390d8781dSJon Lin 5490d8781dSJon Linif [[ $soc != RK3588 && $soc != RK3568 ]]; then 5590d8781dSJon Lin echo "input param soc=$soc invalid, support RK3588/RK3568" 5690d8781dSJon Lin usage 5790d8781dSJon Lin exit 5890d8781dSJon Linfi 5990d8781dSJon Lin 6090d8781dSJon Linif [[ $soc == RK3588 ]]; then 6190d8781dSJon Lin if [[ $gen != 3 ]]; then 6290d8781dSJon Lin echo "input param gen=$gen invalid, support 3" 6390d8781dSJon Lin usage 6490d8781dSJon Lin exit 6590d8781dSJon Lin fi 6690d8781dSJon Lin 67*80d21b10SJon Lin if [[ $lanes != 4 && $lanes != 2 && $lanes != 1 ]]; then 68*80d21b10SJon Lin echo "input param lanes=$lanes invalid, support 4/2/1" 6990d8781dSJon Lin usage 7090d8781dSJon Lin exit 7190d8781dSJon Lin fi 7290d8781dSJon Lin 7390d8781dSJon Lin if [[ $baundary != 1500000 && $baundary != 115200 ]]; then 7490d8781dSJon Lin echo "input param baundary=$baundary invalid, support 1500000/115200" 7590d8781dSJon Lin usage 7690d8781dSJon Lin exit 7790d8781dSJon Lin fi 7890d8781dSJon Linfi 7990d8781dSJon Lin 8090d8781dSJon Linif [[ $soc == RK3568 ]]; then 8190d8781dSJon Lin if [[ $gen != 3 ]]; then 8290d8781dSJon Lin echo "input param gen=$gen invalid, support 3" 8390d8781dSJon Lin usage 8490d8781dSJon Lin exit 8590d8781dSJon Lin fi 8690d8781dSJon Lin 8790d8781dSJon Lin if [[ $lanes != 2 ]]; then 8890d8781dSJon Lin echo "input param lanes=$lanes invalid, support 2" 8990d8781dSJon Lin usage 9090d8781dSJon Lin exit 9190d8781dSJon Lin fi 9290d8781dSJon Lin 9390d8781dSJon Lin if [[ $baundary != 1500000 ]]; then 9490d8781dSJon Lin echo "input param baundary=$baundary invalid, support 1500000" 9590d8781dSJon Lin usage 9690d8781dSJon Lin exit 9790d8781dSJon Lin fi 9890d8781dSJon Linfi 9990d8781dSJon Lin 10090d8781dSJon Linif [ -f "$input" ]; then 10190d8781dSJon Lin echo "input param file=$input" 10290d8781dSJon Linelse 10390d8781dSJon Lin echo "input param file=$input invalid" 10490d8781dSJon Lin exit 10590d8781dSJon Linfi 10690d8781dSJon Lin 10790d8781dSJon Linif [[ $lanes == 4 ]]; then 108*80d21b10SJon Lin code1=43 10990d8781dSJon Lin if [[ $soc == RK3588 ]]; then 11090d8781dSJon Lin code0=04 11190d8781dSJon Lin fi 11290d8781dSJon Linelif [[ $lanes == 2 ]]; then 11390d8781dSJon Lin code1=23 114*80d21b10SJon Lin if [[ $soc == RK3588 ]]; then 115*80d21b10SJon Lin code0=01 116*80d21b10SJon Lin fi 117*80d21b10SJon Linelif [[ $lanes == 1 ]]; then 118*80d21b10SJon Lin code1=13 119*80d21b10SJon Lin if [[ $soc == RK3588 ]]; then 120*80d21b10SJon Lin code0=03 121*80d21b10SJon Lin fi 12290d8781dSJon Linfi 12390d8781dSJon Lin 12490d8781dSJon Linif [[ $baundary == 1500000 ]]; then 12590d8781dSJon Lin code3=01 12690d8781dSJon Linfi 12790d8781dSJon Lin 12890d8781dSJon Linif [[ $baundary == 115200 ]]; then 12990d8781dSJon Lin code3=02 13090d8781dSJon Lin 13190d8781dSJon Linfi 13290d8781dSJon Lin 13390d8781dSJon Linif [[ $baundary == 115200 ]]; then 13490d8781dSJon Lin code3=02 13590d8781dSJon Lin 13690d8781dSJon Linfi 13790d8781dSJon Lin 13890d8781dSJon Linecho "code0=$code0" 13990d8781dSJon Linecho "code1=$code1" 14090d8781dSJon Linecho "code2=$code2" 14190d8781dSJon Linecho "code3=$code3" 14290d8781dSJon Linecho "vid=0x${vid_h}${vid_l} did=0x${did_h}${did_l}" 14390d8781dSJon Lin 14490d8781dSJon Linecho -e -n "\x${magic0}\x${magic1}\x${magic2}\x${magic3}" > .pcie_idb_cfg.bak 14590d8781dSJon Linecho -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 14690d8781dSJon Lindd if=$input of=.temp bs=1 count=4 > /dev/null 14790d8781dSJon Lindd if=.pcie_idb_cfg.bak of=$input bs=1 seek=4 conv=notrunc > /dev/null 14890d8781dSJon Lin 149