180 lines
4.8 KiB
Bash
180 lines
4.8 KiB
Bash
#!/bin/sh
|
|
|
|
action=$1
|
|
nic_type=$2
|
|
slot_id=$3
|
|
|
|
path=`pwd`
|
|
i2c_script="${path}/i2c_m7.sh"
|
|
fmt_print="${path}/format_print.sh"
|
|
|
|
pca9548_slave=""
|
|
pca9641_slave=""
|
|
i2c_bus=""
|
|
pca9548_channel=""
|
|
|
|
is_have_pca9641=0
|
|
|
|
# An func to echo a error code and then exit
|
|
# @Param1 error code
|
|
throw_error(){
|
|
echo $1
|
|
exit 1
|
|
}
|
|
|
|
record_i2c_status(){
|
|
$fmt_print "log" "Info" "[platform_5688m7] Start record i2c configuration"
|
|
$fmt_print "log" "Info" "Nic Type: $nic_type"
|
|
$fmt_print "log" "Info" "Nic slot: $slot_id"
|
|
$fmt_print "log" "Info" "i2c bus: $i2c_bus"
|
|
$fmt_print "log" "Info" "is have pca9641: $is_have_pca9641"
|
|
$fmt_print "log" "Info" "pca9641 slave: $is_have_pca9641"
|
|
$fmt_print "log" "Info" "pca9548 slave: $pca9548_slave"
|
|
$fmt_print "log" "Info" "pca9548 channel: $pca9548_channel"
|
|
}
|
|
|
|
set_i2c_config(){
|
|
# set pca9641 address && I2C BUS
|
|
if [ "${nic_type}" == "ocp" ];then
|
|
$fmt_print "console" "Error" "[platform_5688m7] Unsupport OCP Nic"
|
|
exit 1
|
|
else
|
|
is_have_pca9641=1
|
|
i2c_bus=12
|
|
pca9641_slave="0x31"
|
|
if [ $slot_id -le 3 ];then
|
|
pca9548_slave="0x71"
|
|
else
|
|
pca9548_slave="0x72"
|
|
fi
|
|
fi
|
|
|
|
# set pca9548 switch channel
|
|
if [ "${nic_type}" == "ocp" ];then
|
|
$fmt_print "console" "Error" "[platform_5688m7] Unsupport OCP Nic"
|
|
exit 1
|
|
else
|
|
if [ $slot_id -eq 0 ];then
|
|
pca9548_channel="0x01"
|
|
elif [ $slot_id -eq 1 ];then
|
|
pca9548_channel="0x02"
|
|
elif [ $slot_id -eq 2 ];then
|
|
pca9548_channel="0x04"
|
|
elif [ $slot_id -eq 3 ];then
|
|
pca9548_channel="0x08"
|
|
elif [ $slot_id -eq 4 ];then
|
|
pca9548_channel="0x01"
|
|
elif [ $slot_id -eq 5 ];then
|
|
pca9548_channel="0x02"
|
|
elif [ $slot_id -eq 6 ];then
|
|
pca9548_channel="0x04"
|
|
elif [ $slot_id -eq 7 ];then
|
|
pca9548_channel="0x08"
|
|
else
|
|
$fmt_print "console" "Warning" "Unspecified card slot!"
|
|
fi
|
|
fi
|
|
record_i2c_status
|
|
}
|
|
|
|
get_pca9641_control(){
|
|
$fmt_print "log" "Info" "[platform_5688m7] Start Get pca9641 control"
|
|
|
|
# Request 9641 lock
|
|
res_lock=`i2ctransfer -y $i2c_bus w2@$pca9641_slave 0x01 0x81 r1`
|
|
$fmt_print "log" "Info" "[platform_5688m7] After request 9641 lock, The REG value is $res_lock"
|
|
|
|
# Build 9641 Connection
|
|
res_build=`i2ctransfer -y $i2c_bus w2@$pca9641_slave 0x01 0x85 r1`
|
|
$fmt_print "log" "Info" "[platform_5688m7] After Build 9641 connection, The REG value is $res_build"
|
|
|
|
if [ "$res_build" != "0x87" ];then
|
|
$fmt_print "console" "Error" "Cannot establish connection with pca9641 !!!"
|
|
throw_error "-1"
|
|
fi
|
|
}
|
|
|
|
select_pca9548_channel(){
|
|
$fmt_print "log" "Info" "[platform_5688m7] Start Switch PCA9548"
|
|
$i2c_script "$i2c_bus" 1 "$pca9548_slave" "$pca9548_channel" 0
|
|
}
|
|
|
|
build_i2c_connect(){
|
|
$fmt_print "log" "Info" "[platform_5688m7] Start build i2c connect"
|
|
set_i2c_config
|
|
|
|
if [ $is_have_pca9641 -eq 1 ];then
|
|
get_pca9641_control
|
|
fi
|
|
|
|
select_pca9548_channel
|
|
echo "$i2c_bus"
|
|
}
|
|
|
|
# switch pca9548 channels then do i2cdetect one times
|
|
# @Param1 i2c bus number
|
|
# @Param2 pca9548 slave address
|
|
# @Param3 pca9548 channel hex value
|
|
# @Param4 pca9548 channel
|
|
# @Param5 pcie slot number
|
|
do_i2c_detect(){
|
|
if [ "${nic_type}" == "ocp" ];then
|
|
$fmt_print "console" "Info" "OCP slot $5 : bus$1 9548channel$4"
|
|
else
|
|
$fmt_print "console" "Info" "PCIe slot $5 : bus$1 9548channel$4"
|
|
fi
|
|
i2ctransfer -y $1 w1@$2 $3
|
|
i2cdetect -y $1
|
|
}
|
|
|
|
detect_on_server(){
|
|
$fmt_print "console" "Info" "[platform_5688m7] Start i2c detect"
|
|
|
|
if [ "${nic_type}" == "ocp" ];then
|
|
$fmt_print "console" "Error" "[platform_5688m7] Unsupport OCP Nic I2C Detect"
|
|
else
|
|
i2c_bus=12
|
|
pca9641_slave="0x31"
|
|
get_pca9641_control
|
|
|
|
do_i2c_detect $i2c_bus 0x71 0x01 0 0
|
|
do_i2c_detect $i2c_bus 0x71 0x02 1 1
|
|
do_i2c_detect $i2c_bus 0x71 0x04 2 2
|
|
do_i2c_detect $i2c_bus 0x71 0x08 3 3
|
|
i2ctransfer -y $i2c_bus w1@0x71 0x00
|
|
|
|
do_i2c_detect $i2c_bus 0x72 0x01 0 4
|
|
do_i2c_detect $i2c_bus 0x72 0x02 1 5
|
|
do_i2c_detect $i2c_bus 0x72 0x04 2 6
|
|
do_i2c_detect $i2c_bus 0x72 0x08 3 7
|
|
i2ctransfer -y $i2c_bus w1@0x72 0x00
|
|
fi
|
|
}
|
|
|
|
reset_all_pca9548(){
|
|
i2ctransfer -y 12 w1@0x71 0x00
|
|
i2ctransfer -y 12 w1@0x72 0x00
|
|
}
|
|
|
|
# ---------------------------------------------------
|
|
# Start Execute Script
|
|
# ---------------------------------------------------
|
|
case "${action}" in
|
|
"connect")
|
|
build_i2c_connect
|
|
;;
|
|
"detect")
|
|
detect_on_server
|
|
;;
|
|
"reset")
|
|
reset_all_pca9548
|
|
;;
|
|
*)
|
|
$fmt_print "console" "Error" "[platform_5688m7] Unspecified Operation : $action"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|
|
|