#!/bin/sh action=$1 nic_type=$2 slot_id=$3 # Param: i2c_command only valid for function 'send' i2c_command=$4 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_5280m7] 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 is_have_pca9641=0 pca9548_slave="0x70" i2c_bus=3 else is_have_pca9641=1 if [ $slot_id -le 2 ];then pca9641_slave="0x41" pca9548_slave="0x72" i2c_bus=12 else pca9641_slave="0x42" pca9548_slave="0x72" i2c_bus=13 fi fi # set pca9548 switch channel if [ "${nic_type}" == "ocp" ];then 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" else $fmt_print "console" "Warning" "Unspecified card slot!" fi else if [ $slot_id -eq 0 ];then pca9548_channel="0x02" elif [ $slot_id -eq 1 ];then pca9548_channel="0x04" elif [ $slot_id -eq 2 ];then pca9548_channel="0x08" elif [ $slot_id -eq 3 ];then pca9548_channel="0x02" elif [ $slot_id -eq 4 ];then pca9548_channel="0x04" elif [ $slot_id -eq 5 ];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_5280m7] Start Get pca9641 control" # Request 9641 lock res_lock=`i2ctransfer -y $i2c_bus w2@$pca9641_slave 0x01 0x81 r1` $fmt_print "log" "Info" "[platform_5280m7] 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_5280m7] 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_5280m7] Start Switch PCA9548" $i2c_script "$i2c_bus" 1 "$pca9548_slave" "$pca9548_channel" 0 } build_i2c_connect(){ $fmt_print "log" "Info" "[platform_5280m7] 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_5280m7] Start i2c detect" if [ "${nic_type}" == "ocp" ];then i2c_bus=3 do_i2c_detect 3 0x70 0x01 0 0 do_i2c_detect 3 0x70 0x02 1 1 do_i2c_detect 3 0x70 0x04 2 2 i2ctransfer -y 3 w1@0x70 0x00 else i2c_bus=12 pca9641_slave="0x41" get_pca9641_control do_i2c_detect 12 0x72 0x02 1 0 do_i2c_detect 12 0x72 0x04 2 1 do_i2c_detect 12 0x72 0x08 3 2 i2ctransfer -y 12 w1@0x72 0x00 i2c_bus=13 pca9641_slave="0x42" get_pca9641_control do_i2c_detect 13 0x72 0x02 1 3 do_i2c_detect 13 0x72 0x04 2 4 do_i2c_detect 13 0x72 0x08 3 5 i2ctransfer -y 13 w1@0x72 0x00 fi } reset_all_pca9548(){ $fmt_print "log" "Info" "[platform_5280m7] Bypass reset pca9548" } send_i2c_command(){ $fmt_print "log" "Info" "[platform_5280m7] Send an i2c command" set_i2c_config if [ $is_have_pca9641 -eq 1 ];then get_pca9641_control fi select_pca9548_channel $i2c_command } # --------------------------------------------------- # Start Execute Script # --------------------------------------------------- case "${action}" in "connect") build_i2c_connect ;; "detect") detect_on_server ;; "reset") reset_all_pca9548 ;; "send") send_i2c_command ;; *) $fmt_print "console" "Error" "[platform_5280m7] Unspecified Operation : $action" exit 1 ;; esac exit 0