sonic-buildimage/platform/broadcom/sonic-platform-modules-ingrasys/s9200-64x/utils/i2c_utils.sh
2018-08-11 09:09:03 +00:00

1943 lines
57 KiB
Bash

#!/bin/bash
# Copyright (C) 2016 Ingrasys, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
VERSION="1.0.0"
TRUE=200
FALSE=404
EXEC_FUNC=${1}
COLOR_LED=${2}
QSFP_PORT=${2}
QSFP_INIT_ACTION=${2}
MB_EEPROM_ACTION=${2}
TARGET_10G_MUX=${2}
QSFP_ACTION=${3}
QSFP_VALUE=${4}
ONOFF_LED=${3}
FAN_TRAY=${4}
############################################################
# Distributor ID: Debian
# Description: Debian GNU/Linux 8.6 (jessie)
# Release: 8.6
# Codename: jessie
# Linux debian 3.16.0-4-amd64 #1
# SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux
############################################################
# Color Definition
COLOR_TITLE="\e[1;32m" ### Green ###
COLOR_WARNING="\e[1;33m" ### Yellow ###
COLOR_ERROR="\e[1;31m" ### Red ###
COLOR_END="\e[0m" ### END ###
I2C_NUM=0
NUM_I801_DEVICE=$((I2C_NUM++)) #0
#MUX PCA9548#0 CPLD (I2C_NUM 1~8)
NUM_MUX_9548_CPLD_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_CPLD_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548#1 UCD (I2C_NUM 9~16)
NUM_MUX_9548_UCD_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_UCD_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9545 PSU (I2C_NUM 17~20)
NUM_MUX_9545_PSU_CHAN=()
for (( i=0; i<4; ++i ))
do
NUM_MUX_9545_PSU_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP ROOT (I2C_NUM 21~28)
NUM_MUX_9548_QSFP_ROOT_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_ROOT_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 0~7 (I2C_NUM 29~36)
NUM_MUX_9548_QSFP_0_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_0_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 8~15 (I2C_NUM 37~44)
NUM_MUX_9548_QSFP_1_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_1_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 16~23 (I2C_NUM 45~52)
NUM_MUX_9548_QSFP_2_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_2_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 24~31 (I2C_NUM 53~60)
NUM_MUX_9548_QSFP_3_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_3_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 32~39 (I2C_NUM 61~68)
NUM_MUX_9548_QSFP_4_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_4_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 40~47 (I2C_NUM 69~76)
NUM_MUX_9548_QSFP_5_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_5_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 48~55 (I2C_NUM 77~84)
NUM_MUX_9548_QSFP_6_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_6_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 QSFP Port 56~63 (I2C_NUM 85~92)
NUM_MUX_9548_QSFP_7_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_QSFP_7_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9545 SFP (I2C_NUM 93~96)
NUM_MUX_9545_SFP_CHAN=()
for (( i=0; i<4; ++i ))
do
NUM_MUX_9545_SFP_CHAN[i]=$((I2C_NUM++))
done
#MUX PCA9548 CPLD SW Upgrade (I2C_NUM 97~104)
NUM_MUX_9548_CPLD_SW_CHAN=()
for (( i=0; i<8; ++i ))
do
NUM_MUX_9548_CPLD_SW_CHAN[i]=$((I2C_NUM++))
done
#MUX Alias
I2C_BUS_PSU1_EEPROM=${NUM_MUX_9545_PSU_CHAN[1]}
I2C_BUS_PSU2_EEPROM=${NUM_MUX_9545_PSU_CHAN[0]}
I2C_BUS_LED_BOARD=${NUM_MUX_9548_UCD_CHAN[1]}
I2C_BUS_ID_GPIO=${NUM_MUX_9548_UCD_CHAN[2]}
I2C_BUS_10GMUX=${NUM_MUX_9548_UCD_CHAN[4]}
I2C_BUS_HWM=${NUM_MUX_9548_UCD_CHAN[7]}
I2C_BUS_FAN_BOARD=${NUM_I801_DEVICE}
I2C_BUS_MB_EEPROM=${NUM_I801_DEVICE}
I2C_BUS_TH_RESET=${NUM_I801_DEVICE}
I2C_BUS_BOARD_TYPE=${NUM_I801_DEVICE}
I2C_BUS_BMC_BOARD_TYPE=${NUM_I801_DEVICE}
I2C_BUS_LM75_MAC=${NUM_MUX_9548_CPLD_CHAN[5]}
I2C_BUS_LM75_FRONT=${NUM_MUX_9548_CPLD_CHAN[6]}
I2C_BUS_LM75_REAR=${NUM_MUX_9548_CPLD_CHAN[5]}
I2C_BUS_PSU_INT=${NUM_I801_DEVICE}
I2C_BUS_PSU_STATUS=${NUM_I801_DEVICE}
I2C_BUS_MUX_RST=${NUM_I801_DEVICE}
#CPU Board
I2C_BUS_CPU_EEPROM=${NUM_I801_DEVICE}
I2C_BUS_CPU_TMP75=${NUM_I801_DEVICE}
I2C_BUS_MUX_CPU_CPLD=${NUM_I801_DEVICE}
PATH_SYS_I2C_DEVICES="/sys/bus/i2c/devices"
PATH_SYS_CPLD="/sys/devices/platform/ingrasys-s9200-cpld.0"
PATH_HWMON_ROOT_DEVICES="/sys/class/hwmon"
PATH_HWMON_W83795_DEVICE="${PATH_HWMON_ROOT_DEVICES}/hwmon5"
PATH_I801_DEVICE="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_I801_DEVICE}"
PATH_LM75_MAC="${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_LM75_MAC}"
PATH_LM75_FRONT="${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_LM75_FRONT}"
PATH_LM75_REAR="${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_LM75_REAR}"
PATH_CPU_TMP75="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_I801_DEVICE}"
PATH_BMC_TMP75="${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_HWM}"
PATH_PSU1_EERPOM=${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_PSU1_EEPROM}
PATH_PSU2_EEPROM=${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_PSU2_EEPROM}
PATH_10GMUX=${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_10GMUX}
#PATH for MUX PCA9548_QSFP_ROOT
PATH_MUX_9548_QSFP_ROOT="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_MUX_9545_PSU_CHAN[2]}"
PATH_MUX_9548_QSFP_ROOT_CHAN=()
for (( i=0; i<8; ++i ))
do
PATH_MUX_9548_QSFP_ROOT_CHAN[i]="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_MUX_9548_QSFP_ROOT_CHAN[i]}"
done
PATH_MUX_9545_SFP="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_MUX_9545_PSU_CHAN[3]}"
PATH_MUX_9545_SFP_CHAN=()
for (( i=0; i<4; ++i ))
do
PATH_MUX_9545_SFP_CHAN[i]="${PATH_SYS_I2C_DEVICES}/i2c-${NUM_MUX_9545_SFP_CHAN[i]}"
done
#i2cmap and gpiomap path
PATH_I2CMAP=/tmp/i2cmap
#Mother Board
I2C_ADDR_MUX_9539_TH_RST=0x74
I2C_ADDR_LED_BOARD=0x75
I2C_ADDR_FAN_BOARD=0x20
I2C_ADDR_ID_GPIO=0x27
I2C_ADDR_MUX_9548_CPLD=0x70
I2C_ADDR_MUX_9548_UCD=0x76
I2C_ADDR_MUX_9545_PSU=0x72
I2C_ADDR_MUX_9548_QSFP_ROOT=0x71
I2C_ADDR_MUX_9548_QSFP=0x73
I2C_ADDR_MUX_9545_SFP=0x73
I2C_ADDR_CPLD=0x33
I2C_ADDR_MB_EEPROM=0x55
I2C_ADDR_QSFP_EEPROM=0x50
I2C_ADDR_PSU_EEPROM=0x50
I2C_ADDR_LM75_MAC=0x4E
I2C_ADDR_LM75_FRONT=0x4D
I2C_ADDR_LM75_REAR=0x4D
I2C_ADDR_10GMUX=0x67
#Dummy BMC Board
I2C_ADDR_HWM=0x2F
I2C_ADDR_PSU_INT=0x24 #PSU Interrup on Dummy BMC Board
I2C_ADDR_BMC_BOARD_TYPE=0x24 #PSU Status on Dummy BMC Board
I2C_ADDR_PSU_STATUS=0x25 #PSU Status on Dummy BMC Board
I2C_ADDR_MUX_RST=0x26 #MUX RST on Dummy BMC Board
I2C_ADDR_TMP75_BB=0x4A
#CPU Board
I2C_ADDR_CPU_EEPROM=0x51
I2C_ADDR_CPU_TMP75=0x4F
I2C_ADDR_MUX_CPU_CPLD=0x77
#sysfs
PATH_SYSFS_PSU1="${PATH_SYS_I2C_DEVICES}/${I2C_BUS_PSU1_EEPROM}-$(printf "%04x" $I2C_ADDR_PSU_EEPROM)"
PATH_SYSFS_PSU2="${PATH_SYS_I2C_DEVICES}/${I2C_BUS_PSU2_EEPROM}-$(printf "%04x" $I2C_ADDR_PSU_EEPROM)"
#Active High/Low
ACTIVE_LOW=1
ACTIVE_HIGH=0
#GPIO Direction In/Out
DIR_IN=in
DIR_OUT=out
#Power Supply Status
PSU_DC_ON=1
PSU_DC_OFF=0
PSU_EXIST=1
PSU_NOT_EXIST=0
#W83795 Registers
REG_BANK_SEL=0x00
REG_VOLT_CTRL1=0x02
REG_VOLT_CTRL2=0x03
REG_TEMP_CTRL1=0x04
REG_TEMP_CTRL2=0x05
#PCA9535 Registers
REG_IN_0=0
REG_IN_1=1
REG_OUT_0=2
REG_OUT_1=3
REG_POLARITY_0=4
REG_POLARITY_1=5
REG_CFG_0=6
REG_CFG_1=7
#LM75 Registers
LM75_REG_TEMP=0x00
LM75_REG_CONF=0x01
LM75_REG_HYST=0x02
LM75_REG_TOS=0x03
#Bit Mask
BIT_MASK=(1 2 4 8 16 32 64 128)
#MUX Type
PCA9545="pca9545"
PCA9548="pca9548"
#PLATFORM Variables
PORT_NUM=64
#CPLD Variables
CPLD_QSFP_GROUP=(12 25 38 51 64)
CPLD_QSFP_STATUS_REG_BASE=0x20
CPLD_QSFP_MODE_SELECT_REG_BASE=0x30
CPLD_QSFP_ABS="abs"
CPLD_QSFP_INT="int"
CPLD_QSFP_RST="rst"
CPLD_QSFP_LP="lp"
# Help usage function
function _help {
echo "========================================================="
echo "# Description: Help Function"
echo "========================================================="
echo "----------------------------------------------------"
echo "EX : ${0} help"
echo " : ${0} i2c_init"
echo " : ${0} i2c_deinit"
echo " : ${0} i2c_temp_init"
echo " : ${0} i2c_fan_init"
echo " : ${0} i2c_volmon_init"
echo " : ${0} i2c_io_exp_init"
echo " : ${0} i2c_psu_eeprom_get"
echo " : ${0} i2c_mb_eeprom_get"
echo " : ${0} i2c_cpu_eeprom_get"
echo " : ${0} i2c_qsfp_eeprom_get [1-${PORT_NUM}]"
echo " : ${0} i2c_qsfp_eeprom_init new|delete"
echo " : ${0} i2c_mb_eeprom_init new|delete"
echo " : ${0} i2c_cpu_eeprom_init new|delete"
echo " : ${0} i2c_qsfp_status_get [1-${PORT_NUM}]"
echo " : ${0} i2c_qsfp_type_get [1-${PORT_NUM}]"
echo " : ${0} i2c_qsfp_signal_get [1-${PORT_NUM}] [abs|int|rst|lp]"
echo " : ${0} i2c_qsfp_signal_set [1-${PORT_NUM}] [rst|lp] [0|1] (low_active)"
echo " : ${0} i2c_board_type_get"
echo " : ${0} i2c_bmc_board_type_get"
echo " : ${0} i2c_psu_status"
echo " : ${0} i2c_led_psu_status_set"
echo " : ${0} i2c_led_fan_status_set"
echo " : ${0} i2c_led_fan_tray_status_set"
echo " : ${0} i2c_led_fan_tray_test"
echo " : ${0} i2c_cpld_version"
echo " : ${0} i2c_test_all"
echo " : ${0} i2c_led_test"
echo " : ${0} i2c_sys_led green|amber"
echo " : ${0} i2c_fan_led green|amber"
echo " : ${0} i2c_psu1_led green|amber"
echo " : ${0} i2c_psu2_led green|amber"
echo " : ${0} i2c_fan_tray_led green|amber on|off [1-4]"
echo " : ${0} i2c_10g_mux cpu|fp"
echo "----------------------------------------------------"
}
#Pause function
function _pause {
read -p "$*"
}
#Retry command function
function _retry {
local i
for i in {1..5};
do
eval "${*}" && break || echo "retry"; sleep 1;
done
}
#logical(front panel) to physical (falcon core) port mapping
function _port_logic2phy {
local logic_port=$1
local phy_port=0
if (( $logic_port >=1 && $logic_port <= 32 )) ; then
phy_port=$(( (logic_port-1)/2*4 + (logic_port-1)%2 + 1))
elif (( $logic_port >=33 && $logic_port <= 64 )) ; then
phy_port=$(( (((logic_port-1)%32))/2*4 + (logic_port-1)%2 + 3))
fi
echo $phy_port
}
#set i2cmap
function _set_i2cmap {
local i2c_n=$1
local alias=$2
#create i2cmap dir if not exist
mkdir -p $PATH_I2CMAP
#check i2c_n exists in sysfs
if [ ! -L ${PATH_SYS_I2C_DEVICES}/i2c-${i2c_n} ]; then
echo "${PATH_SYS_I2C_DEVICES}/i2c-${i2c_n} does not exist."
return
fi
#create or update link
ln -sf ${PATH_SYS_I2C_DEVICES}/i2c-${i2c_n} ${PATH_I2CMAP}/${alias}
}
#clear i2cmap
function _clear_i2cmap {
#delete i2cmap dir
rm -rf ${PATH_I2CMAP}/
}
#remove kernel module if exists
function _util_rmmod {
local mod=$1
[ "$(lsmod | grep "^$mod ")" != "" ] && rmmod $mod
}
function _create_i2c_mux_device {
local mux_type=$1
local mux_addr=$2
local mux_parent_chan=$3
local mux_chan0=$4
local mux_desc=$5
if [ ! -e "${PATH_SYS_I2C_DEVICES}/i2c-${mux_chan0}" ]; then
_retry "echo '$mux_type ${mux_addr}' > ${mux_parent_chan}/new_device"
_set_i2cmap ${mux_chan0} "${mux_desc}"
else
echo "${mux_desc} ${mux_addr} already init."
fi
}
#I2C Init
function _i2c_init {
echo "========================================================="
echo "# Description: I2C Init"
echo "========================================================="
_util_rmmod i2c_i801
modprobe i2c_i801 #disable_features=0x10
modprobe i2c_dev
modprobe i2c_mux_pca954x force_deselect_on_exit=1
#add MUX_9548_CPLD on I801
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_CPLD ${PATH_I801_DEVICE} ${NUM_MUX_9548_CPLD_CHAN[0]} "PCA9548_CPLD"
#add MUX_9548_UCD on I801
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_UCD ${PATH_I801_DEVICE} ${NUM_MUX_9548_UCD_CHAN[0]} "PCA9548_UCD"
#add MUX_9545_PSU on I801
_create_i2c_mux_device $PCA9545 $I2C_ADDR_MUX_9545_PSU ${PATH_I801_DEVICE} ${NUM_MUX_9545_PSU_CHAN[0]} "PCA9545_PSU"
#add MUX_9548_QSFP_ROOT on MUX_9545_PSU_CHAN[2]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP_ROOT ${PATH_MUX_9548_QSFP_ROOT} ${NUM_MUX_9548_QSFP_ROOT_CHAN[0]} "PCA9548_QSPF_ROOT"
#add MUX_9548_QSFP_0 on MUX_9548_QSFP_ROOT_CHAN[0]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[0]} ${NUM_MUX_9548_QSFP_0_CHAN[0]} "PCA9548_QSPF_0"
#add MUX_9548_QSFP_1 on MUX_9548_QSFP_ROOT_CHAN[1]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[1]} ${NUM_MUX_9548_QSFP_1_CHAN[0]} "PCA9548_QSPF_1"
#add MUX_9548_QSFP_2 on MUX_9548_QSFP_ROOT_CHAN[2]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[2]} ${NUM_MUX_9548_QSFP_2_CHAN[0]} "PCA9548_QSPF_2"
#add MUX_9548_QSFP_3 on MUX_9548_QSFP_ROOT_CHAN[3]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[3]} ${NUM_MUX_9548_QSFP_3_CHAN[0]} "PCA9548_QSPF_3"
#add MUX_9548_QSFP_4 on MUX_9548_QSFP_ROOT_CHAN[4]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[4]} ${NUM_MUX_9548_QSFP_4_CHAN[0]} "PCA9548_QSPF_4"
#add MUX_9548_QSFP_5 on MUX_9548_QSFP_ROOT_CHAN[5]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[5]} ${NUM_MUX_9548_QSFP_5_CHAN[0]} "PCA9548_QSPF_5"
#add MUX_9548_QSFP_6 on MUX_9548_QSFP_ROOT_CHAN[6]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[6]} ${NUM_MUX_9548_QSFP_6_CHAN[0]} "PCA9548_QSPF_6"
#add MUX_9548_QSFP_7 on MUX_9548_QSFP_ROOT_CHAN[7]
_create_i2c_mux_device $PCA9548 $I2C_ADDR_MUX_9548_QSFP ${PATH_MUX_9548_QSFP_ROOT_CHAN[7]} ${NUM_MUX_9548_QSFP_7_CHAN[0]} "PCA9548_QSPF_7"
#add MUX_9545_SFP on QSFP_ROOT
_create_i2c_mux_device $PCA9545 $I2C_ADDR_MUX_9545_SFP ${PATH_MUX_9545_SFP} ${NUM_MUX_9545_SFP_CHAN[0]} "PCA9545_SPF"
#Init CPLD LED_CLR Register (QSFP LED)
i2cset -y -m ${BIT_MASK[2]} ${NUM_I801_DEVICE} ${I2C_ADDR_MUX_9539_TH_RST} ${REG_OUT_0} 0xFF
_util_rmmod coretemp
_util_rmmod jc42
_util_rmmod w83795
_util_rmmod lm75
_i2c_temp_init
_i2c_volmon_init
modprobe coretemp
modprobe lm75
modprobe jc42
modprobe eeprom_mb
_i2c_mb_eeprom_init "new"
_i2c_cpu_eeprom_init "new"
modprobe eeprom
modprobe gpio-pca953x
_i2c_sensors_init
_i2c_fan_init
_i2c_io_exp_init
_i2c_psu_init
_i2c_qsfp_eeprom_init "new"
_i2c_led_psu_status_set
_i2c_led_fan_status_set
COLOR_LED="green"
echo "${COLOR_LED}"
_i2c_sys_led
modprobe cpld
_config_rmem
}
#I2C Deinit
function _i2c_deinit {
for mod in cpld coretemp jc42 w83795 lm75 eeprom eeprom_mb gpio-pca953x i2c_mux_pca954x i2c_i801 ingrasys_s9200_64x_psu;
do
_util_rmmod $mod
done
_clear_i2cmap
}
#Temperature sensor Init
function _i2c_temp_init {
local lm="lm75"
local tmp="tmp75"
local i2c_bus=${I2C_BUS_HWM}
local i2c_addr=${I2C_ADDR_HWM}
echo "========================================================="
echo "# Description: TEMP INIT"
echo "========================================================="
# select bank0
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_BANK_SEL} 0x80
echo "enable VDSEN14, VDSEN15, VDSEN16, and TR4 temperature monitoring"
i2cset -y -r ${i2c_bus=} ${i2c_addr} ${REG_TEMP_CTRL2} 0x6A
echo "export CPU sensor TMP75 to sysfs"
echo "${tmp} ${I2C_ADDR_CPU_TMP75}" > ${PATH_CPU_TMP75}/new_device
echo "Add Dummy Board LM75 to sysfs"
echo "${lm} ${I2C_ADDR_LM75_MAC}" > ${PATH_LM75_MAC}/new_device
echo "${lm} ${I2C_ADDR_LM75_FRONT}" > ${PATH_LM75_FRONT}/new_device
echo "${lm} ${I2C_ADDR_LM75_REAR}" > ${PATH_LM75_REAR}/new_device
echo "CLKIN clock frequency set as 48Mhz"
i2cset -y -r ${i2c_bus} ${i2c_addr} 0x01 0x1C
# select bank 2
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_BANK_SEL} 0x82
echo "set PWM mode in FOMC"
i2cset -y -r ${i2c_bus} ${i2c_addr} 0x0F 0x00
}
#FAN Init
function _i2c_fan_init {
local init_fan_speed=120
echo "========================================================="
echo "# Description: FAN INIT"
echo "========================================================="
if [ -e "${PATH_HWMON_W83795_DEVICE}" ]; then
echo "Init Fan Speed to ${init_fan_speed} (MAX is 255)"
echo $init_fan_speed > ${PATH_HWMON_W83795_DEVICE}/device/pwm1
echo $init_fan_speed > ${PATH_HWMON_W83795_DEVICE}/device/pwm2
else
echo "FAIL, W83795 not found in path ${PATH_HWMON_W83795_DEVICE}"
fi
}
#VOLMON Init
function _i2c_volmon_init {
echo -n "VOLMON INIT"
local i2c_bus=${I2C_BUS_HWM}
local i2c_addr=${I2C_ADDR_HWM}
#select bank0
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_BANK_SEL} 0x80
#enable voltage monitoring VSEN 1~8
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_VOLT_CTRL1} 0xFF
#enable voltage monitoring 3VDD and 3VBAT
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_VOLT_CTRL2} 0x50
#eable voltage monitoring VSEN12 and VSEN13
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_TEMP_CTRL1} 0x0A
echo "Done"
}
#IO Expander Init
function _i2c_io_exp_init {
local i2c_bus=0
local i2c_addr=0
echo "========================================================="
echo "# Description: I2C IO Expander Init"
echo "========================================================="
echo "Init PCA9539 TH RESET IO Expander"
#PCA9539 TH RESET
#0.0 TH_RST_L OUT 1
#0.1 TH_PCIE_RST_L OUT 1
#0.2 LED_CLR OUT 1
#0.3 HOST_TO_BMC_I2C_GPIO OUT 0
#0.4 USB_MUX_SEL OUT 0
#0.5 UART_MUX_SEL OUT 0
#0.6 FIN0 OUT 0
#0.7 FIN7 OUT 0
#1.0 TH_INT_L IN
#1.1 CPLD4_TO_CPU_INT_L IN
#1.2 CPLD3_TO_CPU_INT_L IN
#1.3 CPLD2_TO_CPU_INT_L IN
#1.4 CPLD1_TO_CPU_INT_L IN
#1.5 REF_SEL OUT 0
#1.6 I210_PE_RST_L OUT 1
#1.7 I210_RST_L OUT 1
i2c_bus=${I2C_BUS_TH_RESET}
i2c_addr=${I2C_ADDR_MUX_9539_TH_RST}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_0} $((2#00000111))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_1} $((2#11000000))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} $((2#00011111))
echo "Init PCA9539 LED BOARD IO Expander"
#PCA9539 LED BOARD
#0.0 SYS_LED_G OUT 1
#0.1 FAN_LED_EN OUT 1
#0.2 FAN_LED_Y OUT 0
#0.3 PSU1_LED_Y OUT 0
#0.4 PSU0_LED_Y OUT 0
#0.5~0.7 X
#1.0 PSU1_PWROK OUT 1
#1.1 PSU0_PWROK OUT 1
i2c_bus=${I2C_BUS_LED_BOARD}
i2c_addr=${I2C_ADDR_LED_BOARD}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_0} $((2#00000011))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_1} $((2#00000011))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} 0x00
echo "Init PCA9535 ID_GPIO IO Expander"
#PCA9535 ID_GPIO
#0.0 ~ 0.7 X
#1.0 Build_REV_0 IN
#1.1 Build_REV_1 IN
#1.2 HW_REV_0 IN
#1.3 HW_REV_1 IN
#1.4 Board_ID_0 IN
#1.5 Board_ID_1 IN
#1.6 Board_ID_2 IN
#1.7 Board_ID_3 IN
i2c_bus=${I2C_BUS_ID_GPIO}
i2c_addr=${I2C_ADDR_ID_GPIO}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} 0xFF
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} 0xFF
#I2C_ADDR_FAN_BOARD
echo "Init PCA9535 FAN_BOARD IO Expander"
#PCA9535 FAN_BOARD
#0.0 EN_FAN1_LED_G_H OUT 1
#0.1 EN_FAN1_LED_Y_H OUT 0
#0.2 FAN1_ABS# IN 0
#0.3 FAN1_DIR# IN 0
#0.4 EN_FAN2_LED_G_H OUT 1
#0.5 EN_FAN2_LED_Y_H OUT 0
#0.6 FAN2_ABS# IN 0
#0.7 FAN2_DIR# IN 0
#1.0 EN_FAN3_LED_G_H OUT 1
#1.1 EN_FAN3_LED_Y_H OUT 0
#1.2 FAN3_ABS# IN 0
#1.3 FAN3_DIR# IN 0
#1.4 EN_FAN4_LED_G_H OUT 1
#1.5 EN_FAN4_LED_Y_H OUT 0
#1.6 FAN4_ABS# IN 0
#1.7 FAN4_DIR# IN 0
i2c_bus=${I2C_BUS_FAN_BOARD}
i2c_addr=${I2C_ADDR_FAN_BOARD}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_0} $((2#00010001))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_1} $((2#00010001))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} $((2#11001100))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} $((2#11001100))
#PCA9555 on BMC Dummy Board
echo "Init PCA9555 Interrupt IO Expander"
#PCA9555 Interrupt Expander
#0.0 HWM_INT_L IN
#0.1 UCD9090_INT_L IN
#0.2 ETHX_INT_L IN
#0.3 HOST_TO_BMC_INT_L IN
#0.4 THERMAL_ALT1# IN
#0.5 FAN_STATUS_INT_L IN
#0.6 PSU0_INT_L IN
#0.7 PSU1_INT_L IN
#1.0 Build_REV_0 IN
#1.1 Build_REV_1 IN
#1.2 HW_REV_0 IN
#1.3 HW_REV_1 IN
#1.4 Board_ID_0 IN
#1.5 Board_ID_1 IN
#1.6 Board_ID_2 IN
#1.7 Board_ID_3 IN
i2c_bus=${I2C_BUS_PSU_INT}
i2c_addr=${I2C_ADDR_PSU_INT}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} 0xFF
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} 0xFF
#PCA9555 on BMC Dummy Board
echo "Init PCA9555 PSU0_PWROK IO Expander"
#PCA9555 PSU0_PWROK Expander
#0.0 PSU0_PWROK IN
#0.1 PSU0_PRSNT_L IN
#0.2 PSU0_PWRON_L OUT 0
#0.3 PSU1_PWROK IN
#0.4 PSU1_PRSNT_L IN
#0.5 PSU1_PWRON_L OUT 0
#0.6 TMP75_INT_L IN
#0.7 GPIOF7 IN
#1.0 ALL_PWR_GOOD IN
#1.1 CPU_PRSNT_L IN
#1.2 FP_BTN_UARTSEL_EN_L OUT 0
#1.3 HOST_TO_BMC_I2C_GPIO OUT 0
#1.4 HOST_CPU_PWRBTN_L OUT 1
#1.5 N/A
#1.6 N/A
#1.7 N/A
i2c_bus=${I2C_BUS_PSU_STATUS}
i2c_addr=${I2C_ADDR_PSU_STATUS}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_1} $((2#00010000))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} $((2#11011011))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} $((2#11100011))
#PCA9555 on BMC Dummy Board
echo "Init PCA9555 MUX RST IO Expander"
#PCA9555 MUX RST Expander
#0.0 FRU_I2C_MUX_RST_L OUT 1
#0.1 MAIN_I2C_MUX_RST_L OUT 1
#0.2 SYSTEM_LED_RST_L OUT 1
#0.3 BMC_TO_UCD_RST_L OUT 1
#0.4 BMC_TO_HOST_RST_L OUT 1
#0.5 ETHX_RST_L OUT 1
#0.6 GPIOF4 IN
#0.7 N/A
#1.0 CPU_to_FRU_I2C_EN OUT 1
#1.1 CPU_to_MAIN_I2C_EN OUT 1
#1.2 P3V3_FAN_EN OUT 1
#1.3 P3V3_I2C_EN OUT 1
#1.4 UCD9090_CNTRL OUT 1
#1.5 UART_MUX_SEL OUT 0
#1.6 USB_MUX_SEL OUT 0
#1.7 ETHX_CPU_EEPROM_SEL OUT 0
i2c_bus=${I2C_BUS_MUX_RST}
i2c_addr=${I2C_ADDR_MUX_RST}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_0} $((2#00111111))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_OUT_1} $((2#00011111))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_0} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_POLARITY_1} 0x00
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} $((2#01000000))
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} 0x00
#PCA9539 on CPU Board
echo "Init PCA9539 CPLD IO Expander on CPU"
i2c_bus=${I2C_BUS_MUX_CPU_CPLD}
i2c_addr=${I2C_ADDR_MUX_CPU_CPLD}
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_0} 0xFF
i2cset -y -r ${i2c_bus} ${i2c_addr} ${REG_CFG_1} 0xFF
}
function _i2c_sensors_init {
echo "SENSORS init"
local dev_path
# add w83795 to sysfs
dev_path="${PATH_SYS_I2C_DEVICES}/${I2C_BUS_HWM}-$(printf "%04x" ${I2C_ADDR_HWM})"
if ! [ -L ${dev_path} ]; then
echo "w83795adg ${I2C_ADDR_HWM}" > ${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_HWM}/new_device
while [ ! -e "${PATH_HWMON_W83795_DEVICE}" ]; do
sleep 1
done
else
echo "${dev_path} already exist (w83795)"
fi
# BMC board thermal
dev_path="${PATH_SYS_I2C_DEVICES}/${NUM_I801_DEVICE}-$(printf "%04x" ${I2C_ADDR_TMP75_BB})"
if ! [ -L ${dev_path} ]; then
echo "tmp75 ${I2C_ADDR_TMP75_BB}" > ${PATH_BMC_TMP75}/new_device
else
echo "${dev_path} already exist"
fi
echo "Done"
}
#Set FAN Tray LED
function _i2c_led_fan_tray_status_set {
echo "========================================================="
echo "# Description: FAN Tray Status Setup"
echo "========================================================="
#check W83795 exists
if [ ! -e "${PATH_HWMON_W83795_DEVICE}" ]; then
echo "FAIL, W83795 not found in path ${PATH_HWMON_W83795_DEVICE}"
return
fi
#FAN Status get
FAN1_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan1_alarm`
FAN3_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan3_alarm`
FAN5_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan5_alarm`
FAN7_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan7_alarm`
FAN_TRAY=1
if [ "${FAN1_ALARM}" == "0" ]; then
COLOR_LED="green"
ONOFF_LED="on"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="off"
_i2c_fan_tray_led
echo "set [FAN TRAY 1] [Green]=on [Amber]=off"
else
COLOR_LED="green"
ONOFF_LED="off"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="on"
_i2c_fan_tray_led
echo "set [FAN TRAY 1] [Green]=off [Amber]=on"
fi
FAN_TRAY=2
if [ "${FAN3_ALARM}" == "0" ]; then
COLOR_LED="green"
ONOFF_LED="on"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="off"
_i2c_fan_tray_led
echo "set [FAN TRAY 2] [Green]=on [Amber]=off"
else
COLOR_LED="green"
ONOFF_LED="off"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="on"
_i2c_fan_tray_led
echo "set [FAN TRAY 2] [Green]=off [Amber]=on"
fi
FAN_TRAY=3
if [ "${FAN5_ALARM}" == "0" ]; then
COLOR_LED="green"
ONOFF_LED="on"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="off"
_i2c_fan_tray_led
echo "set [FAN TRAY 3] [Green]=on [Amber]=off"
else
COLOR_LED="green"
ONOFF_LED="off"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="on"
_i2c_fan_tray_led
echo "set [FAN TRAY 3] [Green]=off [Amber]=on"
fi
FAN_TRAY=4
if [ "${FAN7_ALARM}" == "0" ]; then
COLOR_LED="green"
ONOFF_LED="on"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="off"
_i2c_fan_tray_led
echo "set [FAN TRAY 4] [Green]=on [Amber]=off"
else
COLOR_LED="green"
ONOFF_LED="off"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="on"
_i2c_fan_tray_led
echo "set [FAN TRAY 4] [Green]=off [Amber]=on"
fi
}
#Test FAN Tray LED
function _i2c_led_fan_tray_test {
echo "========================================================="
echo "# Description: FAN Tray LED Test"
echo "========================================================="
for i in {1..4}
do
FAN_TRAY=$i
COLOR_LED="green"
ONOFF_LED="on"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="off"
_i2c_fan_tray_led
_pause "Check [Fan Tray ${i} LED] = Green and Press [Enter] key to continue..."
COLOR_LED="green"
ONOFF_LED="off"
_i2c_fan_tray_led
COLOR_LED="amber"
ONOFF_LED="on"
_i2c_fan_tray_led
_pause "Check [Fan Tray ${i} LED] = Amber and Press [Enter] key to continue..."
done
}
#Set FAN LED
function _i2c_led_fan_status_set {
echo "========================================================="
echo "# Description: FAN Status Setup"
echo "========================================================="
#check W83795 exists in hwmon2
if [ ! -e "${PATH_HWMON_W83795_DEVICE}" ]; then
echo "FAIL, W83795 not found in path ${PATH_HWMON_W83795_DEVICE}"
return
fi
#PSU Status set
FAN1_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan1_alarm`
FAN3_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan3_alarm`
FAN5_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan5_alarm`
FAN7_ALARM=`cat ${PATH_HWMON_W83795_DEVICE}/device/fan7_alarm`
if [ "${FAN1_ALARM}" == "0" ] \
&& [ "${FAN3_ALARM}" == "0" ] \
&& [ "${FAN5_ALARM}" == "0" ] \
&& [ "${FAN7_ALARM}" == "0" ] ; then
COLOR_LED="green"
_i2c_fan_led
else
COLOR_LED="amber"
_i2c_fan_led
fi
echo "set [FAN LED] = ${COLOR_LED}"
}
#Set PSU LED on LED Board
function _i2c_led_psu_status_set {
echo "========================================================="
echo "# Description: PSU LED Status Setup"
echo "========================================================="
#Get PSU Status
_i2c_psu_status
#PSU1 Status
echo "------------------------------"
if [ "${psu1Exist}" == ${PSU_EXIST} ]; then
if [ "${psu1PwGood}" == ${PSU_DC_ON} ]; then
COLOR_LED="green"
_i2c_psu1_led
else
COLOR_LED="amber"
_i2c_psu1_led
fi
else
COLOR_LED="amber"
_i2c_psu1_led
fi
echo "set [PSU1 LED] = ${COLOR_LED}"
#PSU2 Status
echo "------------------------------"
if [ "${psu2Exist}" == ${PSU_EXIST} ]; then
if [ "${psu2PwGood}" == ${PSU_DC_ON} ]; then
COLOR_LED="green"
_i2c_psu2_led
else
COLOR_LED="amber"
#ONOFF_LED="on"
_i2c_psu2_led
fi
else
COLOR_LED="amber"
_i2c_psu2_led
fi
echo "set [PSU2 LED] = ${COLOR_LED}"
}
#LED Test
function _i2c_led_test {
echo "========================================================="
echo "# Description: I2C LED TEST"
echo "========================================================="
#sys led (green)
_i2c_reset_led
COLOR_LED="green"
_i2c_sys_led
_pause 'Check [SYS LED] = Green and Press [Enter] key to continue...'
#sys led (amber)
_i2c_reset_led
COLOR_LED="amber"
_i2c_sys_led
_pause 'Check [SYS LED] = Amber and Press [Enter] key to continue...'
#FAN led (green)
_i2c_reset_led
COLOR_LED="green"
_i2c_fan_led
_pause 'Check [FAN LED] Green and Press [Enter] key to continue...'
#FAN led (amber)
_i2c_reset_led
COLOR_LED="amber"
_i2c_fan_led
_pause 'Check [FAN LED] = Amber and Press [Enter] key to continue...'
#PSU2 led (green)
_i2c_reset_led
COLOR_LED="green"
_i2c_psu2_led
_pause 'Check [PSU2 LED] = Green and Press [Enter] key to continue...'
#PSU2 led (amber)
_i2c_reset_led
COLOR_LED="amber"
_i2c_psu2_led
_pause 'Check [PSU2 LED] = Amber and Press [Enter] key to continue...'
#PSU1 led (green)
_i2c_reset_led
COLOR_LED="green"
_i2c_psu1_led
_pause 'Check [PSU1 LED] = Green and Press [Enter] key to continue...'
#PSU2 led (amber)
_i2c_reset_led
COLOR_LED="amber"
_i2c_psu1_led
_pause 'Check [PSU1 LED] = Amber and Press [Enter] key to continue...'
#Turn OFF All LED
_i2c_reset_led
_pause 'Check turn off all LEDs and Press [Enter] key to continue...'
}
#Set QSFP Port variable
function _qsfp_port_i2c_var_set {
#global variables
cpld_group=0
cpld_i2c_bus=0
cpld_i2c_addr=$I2C_ADDR_CPLD
cpld_qsfp_status_reg_offset=0
cpld_qsfp_mode_reg_offset=0
#local variables
local i=0
local port=$1
local port_group=$(( (port - 1)/8 ))
case ${port_group} in
0)
#the i2c expander base bus num to read qsfp eeprom
eeprombusbase=${NUM_MUX_9548_QSFP_0_CHAN[0]}
;;
1)
eeprombusbase=${NUM_MUX_9548_QSFP_1_CHAN[0]}
;;
2)
eeprombusbase=${NUM_MUX_9548_QSFP_2_CHAN[0]}
;;
3)
eeprombusbase=${NUM_MUX_9548_QSFP_3_CHAN[0]}
;;
4)
eeprombusbase=${NUM_MUX_9548_QSFP_4_CHAN[0]}
;;
5)
eeprombusbase=${NUM_MUX_9548_QSFP_5_CHAN[0]}
;;
6)
eeprombusbase=${NUM_MUX_9548_QSFP_6_CHAN[0]}
;;
7)
eeprombusbase=${NUM_MUX_9548_QSFP_7_CHAN[0]}
;;
*)
echo "Please input 1~${PORT_NUM}"
;;
esac
#set cpld_group and cpld_i2c_bus according to port
for ((i=0; i<5; ++i))
do
if (("${port}" <= "${CPLD_QSFP_GROUP[i]}"));
then
local port_offset=0
cpld_group=$i
cpld_i2c_bus=${NUM_MUX_9548_CPLD_CHAN[i]}
if ((i>0))
then
port_offset=$(( port - CPLD_QSFP_GROUP[i-1] ))
else
port_offset=$port
fi
cpld_qsfp_status_reg_offset=$((CPLD_QSFP_STATUS_REG_BASE + port_offset))
cpld_qsfp_mode_reg_offset=$((CPLD_QSFP_MODE_SELECT_REG_BASE + port_offset))
break
fi
done
}
function _i2c_get {
local i2c_bus=$1
local i2c_addr=$2
local reg=$3
echo `i2cget -y ${i2c_bus} ${i2c_addr} ${reg}`
}
function _i2c_set {
local i2c_bus=$1
local i2c_addr=$2
local reg=$3
local mask=$4
local value=$5
echo `i2cset -m $mask -y -r ${i2c_bus} ${i2c_addr} ${reg} ${value}`
}
#Set QSFP Port variable
function _qsfp_eeprom_var_set {
#local variables
local port=$1
#global variables
eeprombusidx=$(( (port - 1)%8 ))
case $eeprombusidx in
0)
eeprombus=$(( $eeprombusbase + 0 ))
;;
1)
eeprombus=$(( $eeprombusbase + 1 ))
;;
2)
eeprombus=$(( $eeprombusbase + 2 ))
;;
3)
eeprombus=$(( $eeprombusbase + 3 ))
;;
4)
eeprombus=$(( $eeprombusbase + 4 ))
;;
5)
eeprombus=$(( $eeprombusbase + 5 ))
;;
6)
eeprombus=$(( $eeprombusbase + 6 ))
;;
7)
eeprombus=$(( $eeprombusbase + 7 ))
;;
esac
eepromAddr=${I2C_ADDR_QSFP_EEPROM}
}
#Get QSFP EEPROM Information
function _i2c_qsfp_eeprom_get {
local value=0
local status=0
echo "========================================================="
echo "# Description: QSFP EEPROM GET"
echo "========================================================="
#status: 0 -> Down, 1 -> Up
_i2c_qsfp_signal_get ${QSFP_PORT} ${CPLD_QSFP_ABS}
value=$qsfp_signal
status=$(( value?0:1 ))
if [ $status = 0 ]; then
echo "[Fail] QSFP ${QSFP_PORT} is not present"
exit
fi
echo "------------------------------"
cat ${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf "%04x" $eepromAddr)/eeprom | hexdump -C
}
#Init QSFP EEPROM
function _i2c_qsfp_eeprom_init {
echo "========================================================="
echo "# Description: QSFP EEPROM INIT"
echo "========================================================="
#Action check
action=$1
if [ -z "${action}" ]; then
echo "No action, skip"
return
elif [ "${action}" != "new" ] && [ "${action}" != "delete" ]; then
echo "Error action, skip"
return
fi
#Init EEPROM
local i
for (( i=1; i<=${PORT_NUM}; i++ ))
do
_qsfp_port_i2c_var_set ${i}
_qsfp_eeprom_var_set ${i}
if [ "${action}" == "new" ] && \
! [ -L ${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf "%04x" $eepromAddr) ]; then
echo "sff8436 $eepromAddr" > ${PATH_SYS_I2C_DEVICES}/i2c-$eeprombus/new_device
elif [ "${action}" == "delete" ] && \
[ -L ${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf "%04x" $eepromAddr) ]; then
echo "$eepromAddr" > ${PATH_SYS_I2C_DEVICES}/i2c-$eeprombus/delete_device
fi
done
}
#get qsfp singals (ABS, INT, RST, LP) from CPLD
function _i2c_qsfp_signal_get {
local port=$1 #port start from 1
local signal=$2
local attr_file=""
local phy_port=0
local active="low_active"
#global
qsfp_signal=0
qsfp_signals=0
#verify port
if [ -z "${port}" ]; then
echo "No port, skip"
return
fi
#verify port
if (( $port < 1 || $port > $PORT_NUM )) ; then
echo "invalid port, skip"
fi
#get physical port
phy_port=$(_port_logic2phy $port)
_qsfp_port_i2c_var_set ${phy_port}
_qsfp_eeprom_var_set ${phy_port}
#verify signal
if [ -z "${signal}" ]; then
echo "No signal, skip"
return
elif [ "${signal}" == "${CPLD_QSFP_ABS}" ]; then
attr_file="qsfp_modprs"
elif [ "${signal}" == "${CPLD_QSFP_INT}" ]; then
attr_file="qsfp_int"
elif [ "${signal}" == "${CPLD_QSFP_RST}" ]; then
attr_file="qsfp_reset"
elif [ "${signal}" == "${CPLD_QSFP_LP}" ]; then
attr_file="qsfp_lpmode"
active="high_active"
else
echo "invalid signal ${signal}, skip"
return
fi
mask=${BIT_MASK[bit_shift]}
#signals of all ports
qsfp_signals=`cat ${PATH_SYS_CPLD}/${attr_file}`
#signal of single port
qsfp_signal=$(( (qsfp_signals >> (phy_port-1)) & 0x1))
#print signals
printf "[port]=%d, [signal]=%s, [value]=%d (${active}), [qsfp_signals]=%016x\n" $port $signal $qsfp_signal $qsfp_signals
}
#set qsfp singals (RST, LP) via CPLD
function _i2c_qsfp_signal_set {
local port=$1 #port start from 1
local signal=$2
local value=$3
local values_ori=0
local value_ori=0
local values=0
local attr_file=""
#verify port
if [ -z "${port}" ]; then
echo "No port, skip"
return
fi
#verify port
if (( $port < 1 || $port > $PORT_NUM )) ; then
echo "invalid port, skip"
fi
#verify signal
if [ -z "${signal}" ]; then
echo "No signal, skip"
return
elif [ "${signal}" == "${CPLD_QSFP_RST}" ]; then
attr_file="qsfp_reset"
elif [ "${signal}" == "${CPLD_QSFP_LP}" ]; then
attr_file="qsfp_lpmode"
else
echo "invalid signal ${signal}, skip"
return
fi
#get current signal values
_i2c_qsfp_signal_get $port $signal
value_ori=$qsfp_signal
values_ori=$qsfp_signals
#if signal value is not changed, return
if [ "${value}" == "${value_ori}" ]; then
echo "value not changed, skip set operation"
return
fi
#toggle the bit for update
values=$(( values_ori ^ (1 << (port-1))))
#set value to register
echo "$(printf "%016x" $values)" > ${PATH_SYS_CPLD}/${attr_file}
#get updated signal values
_i2c_qsfp_signal_get $port $signal
values=$qsfp_signals
#result
printf "Before: %016x\n" $values_ori
printf "After: %016x\n" $values
}
#Init EEPROM
function _i2c_eeprom_init {
local i2c_bus=$1
local i2c_addr=$2
local action=$3
local desc=$4
local sys_i2c_dev=$PATH_SYS_I2C_DEVICES
echo -n "${desc} EEPROM INIT"
#Action check
if [ -z "${action}" ]; then
echo "No action, skip"
return
elif [ "${action}" != "new" ] && [ "${action}" != "delete" ]; then
echo "Error action, skip"
return
fi
#Init EEPROM
if [ "${action}" == "new" ] && \
! [ -L ${sys_i2c_dev}/${i2c_bus}-$(printf "%04x" $i2c_addr) ]; then
echo "mb_eeprom ${i2c_addr}" > ${sys_i2c_dev}/i2c-${i2c_bus}/new_device
elif [ "${action}" == "delete" ] && \
[ -L ${sys_i2c_dev}/${i2c_bus}-$(printf "%04x" $i2c_addr) ]; then
echo "${i2c_addr}" > ${sys_i2c_dev}/i2c-${i2c_bus}/delete_device
fi
echo "DONE"
}
#Init Main Board EEPROM
function _i2c_mb_eeprom_init {
local action=$1
local i2c_bus=$I2C_BUS_MB_EEPROM
local i2c_addr=$I2C_ADDR_MB_EEPROM
local desc="Main Board"
_i2c_eeprom_init $i2c_bus $i2c_addr $action $desc
}
#Init CPU EEPROM
function _i2c_cpu_eeprom_init {
local action=$1
local i2c_bus=$I2C_BUS_CPU_EEPROM
local i2c_addr=$I2C_ADDR_CPU_EEPROM
local desc="CPU Board"
_i2c_eeprom_init $i2c_bus $i2c_addr $action $desc
}
#get QSFP Status
function _i2c_qsfp_status_get {
local value=0
local status=0
#status: 0 -> Down, 1 -> Up
_i2c_qsfp_signal_get ${QSFP_PORT} ${CPLD_QSFP_ABS}
value=$qsfp_signal
status=$(( value?0:1 ))
echo "status=$status"
}
#get QSFP Type
function _i2c_qsfp_type_get {
local phy_port=0
local value=0
local status=0
echo "========================================================="
echo "# Description: QSFP TYPE Get"
echo "========================================================="
phy_port=$(_port_logic2phy ${QSFP_PORT})
_qsfp_port_i2c_var_set ${phy_port}
_qsfp_eeprom_var_set ${phy_port}
#get abs signal
_i2c_qsfp_signal_get ${QSFP_PORT} ${CPLD_QSFP_ABS}
value=$qsfp_signal
status=$(( value?0:1 ))
#check qsfp is present
if [ $status = 0 ]; then
echo "[Fail] QSFP ${QSFP_PORT} is not present"
exit
fi
#Get QSFP EEPROM info
if [ ! -e "${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf '%04x' $eepromAddr)/eeprom" ]; then
echo "FAIL, qsfp eeprom file does not exist. "
echo "qsfp eeprom file path: ${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf '%04x' $eepromAddr)/eeprom"
return
fi
qsfp_info=$(base64 ${PATH_SYS_I2C_DEVICES}/$eeprombus-$(printf "%04x" $eepromAddr)/eeprom)
identifier=$(echo $qsfp_info | base64 -d -i | hexdump -s 128 -n 1 -e '"%x"')
connector=$(echo $qsfp_info | base64 -d -i | hexdump -s 130 -n 1 -e '"%x"')
transceiver=$(echo $qsfp_info | base64 -d -i | hexdump -s 131 -n 1 -e '"%x"')
echo "------------------------------"
echo "identifier = $identifier"
echo "connector = $connector"
echo "transceiver = $transceiver"
}
#Init PSU Kernel Module
function _i2c_psu_init {
echo "========================================================="
echo "# Description: I2C PSU Init"
echo "========================================================="
modprobe ingrasys_s9200_64x_psu
echo "psu1 ${I2C_ADDR_PSU_EEPROM}" > ${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_PSU1_EEPROM}/new_device
echo "psu2 ${I2C_ADDR_PSU_EEPROM}" > ${PATH_SYS_I2C_DEVICES}/i2c-${I2C_BUS_PSU2_EEPROM}/new_device
}
#Get PSU EEPROM Information
function _i2c_psu_eeprom_get {
local eeprom_psu1=""
local eeprom_psu2=""
echo "========================================================="
echo "# Description: I2C PSU EEPROM Get..."
echo "========================================================="
echo "PUS1 EEPROM"
eeprom_psu1="${PATH_SYSFS_PSU1}/psu_eeprom"
cat ${eeprom_psu1} | hexdump -C
echo "------------------------------"
echo "PUS2 EEPROM"
eeprom_psu2="${PATH_SYSFS_PSU2}/psu_eeprom"
cat ${eeprom_psu2} | hexdump -C
}
#Get MotherBoard EEPROM Information
function _i2c_mb_eeprom_get {
local path_i2c_dev=${PATH_SYS_I2C_DEVICES}
local i2c_bus=${I2C_BUS_MB_EEPROM}
local i2c_addr=${I2C_ADDR_MB_EEPROM}
echo "========================================================="
echo "# Description: I2C MB EEPROM Get"
echo "========================================================="
## MB EEPROM
cat ${path_i2c_dev}/${i2c_bus}-$(printf "%04x" ${i2c_addr})/eeprom | hexdump -v -C
}
#Get CPU EEPROM Information
function _i2c_cpu_eeprom_get {
local path_i2c_dev=${PATH_SYS_I2C_DEVICES}
local i2c_bus=${I2C_BUS_CPU_EEPROM}
local i2c_addr=${I2C_ADDR_CPU_EEPROM}
echo "========================================================="
echo "# Description: I2C CPU EEPROM Get"
echo "========================================================="
## CPU EEPROM
cat ${path_i2c_dev}/${i2c_bus}-$(printf "%04x" ${i2c_addr})/eeprom | hexdump -v -C
}
#Set FAN Tray LED
function _i2c_fan_tray_led {
local value=0
echo "========================================================="
echo "# Description: Set Fan Tray LED"
echo "========================================================="
case ${FAN_TRAY} in
1)
ioPort=$REG_OUT_0
if [ "${COLOR_LED}" == "green" ]; then
mask=${BIT_MASK[0]}
elif [ "${COLOR_LED}" == "amber" ]; then
mask=${BIT_MASK[1]}
fi
;;
2)
ioPort=$REG_OUT_0
if [ "${COLOR_LED}" == "green" ]; then
mask=${BIT_MASK[4]}
elif [ "${COLOR_LED}" == "amber" ]; then
mask=${BIT_MASK[5]}
fi
;;
3)
ioPort=$REG_OUT_1
if [ "${COLOR_LED}" == "green" ]; then
mask=${BIT_MASK[0]}
elif [ "${COLOR_LED}" == "amber" ]; then
mask=${BIT_MASK[1]}
fi
;;
4)
ioPort=$REG_OUT_1
if [ "${COLOR_LED}" == "green" ]; then
mask=${BIT_MASK[4]}
elif [ "${COLOR_LED}" == "amber" ]; then
mask=${BIT_MASK[5]}
fi
;;
*)
echo "Please input 1~4"
exit
;;
esac
if [ "${ONOFF_LED}" == "on" ]; then
value=0xFF
elif [ "${ONOFF_LED}" == "off" ]; then
value=0x00
else
echo "Invalid Parameters ${ONOFF_LED}, Exit!!!"
_help
exit ${FALSE}
fi
i2cset -m $mask -y -r ${I2C_BUS_FAN_BOARD} ${I2C_ADDR_FAN_BOARD} $ioPort $value
}
#Set System Status LED
function _i2c_sys_led {
local value=0
local mask=${BIT_MASK[0]}
if [ "${COLOR_LED}" == "green" ]; then
value=0xFF
elif [ "${COLOR_LED}" == "amber" ]; then
value=0x00
else
echo "Invalid Parameters ${COLOR_LED}, Exit!!!"
_help
exit ${FALSE}
fi
_i2c_set_led $value $mask
}
#Set FAN LED
function _i2c_fan_led {
local value=0
local mask=${BIT_MASK[2]}
if [ "${COLOR_LED}" == "green" ]; then
value=0x00
elif [ "${COLOR_LED}" == "amber" ]; then
value=0xFF
else
echo "Invalid Parameters ${COLOR_LED}, Exit!!!"
_help
exit ${FALSE}
fi
_i2c_set_led $value $mask
}
#Set PSU1 LED
function _i2c_psu1_led {
local value=0
local mask=${BIT_MASK[3]}
if [ "${COLOR_LED}" == "green" ]; then
value=0x00
elif [ "${COLOR_LED}" == "amber" ]; then
value=0xFF
else
echo "Invalid Parameters ${COLOR_LED}, Exit!!!"
_help
exit ${FALSE}
fi
_i2c_set_led $value $mask
}
#Set PSU2 LED
function _i2c_psu2_led {
local reg=${REG_OUT_0}
local value=0
local mask=${BIT_MASK[4]}
if [ "${COLOR_LED}" == "green" ]; then
value=0x00
elif [ "${COLOR_LED}" == "amber" ]; then
value=0xFF
else
echo "Invalid Parameters ${COLOR_LED}, Exit!!!"
_help
exit ${FALSE}
fi
_i2c_set_led $value $mask
}
#Set LEDs in LED Board
function _i2c_set_led {
local value=$1
local mask=$2
local reg=${REG_OUT_0}
local i2c_bus=$I2C_BUS_LED_BOARD
local i2c_addr=$I2C_ADDR_LED_BOARD
_i2c_set $i2c_bus $i2c_addr $reg $mask $value
}
#Reset all system leds
function _i2c_reset_led {
local mask=0xFF
local value=$((2#00000011))
local reg=${REG_OUT_0}
local i2c_bus=$I2C_BUS_LED_BOARD
local i2c_addr=$I2C_ADDR_LED_BOARD
_i2c_set $i2c_bus $i2c_addr $reg $mask $value
}
#Get Mother Board Version and Type
function _i2c_board_type_get {
echo "========================================================="
echo "# Description: I2C MB Board Type Get"
echo "========================================================="
local i2c_bus=${I2C_BUS_ID_GPIO}
local i2c_addr=${I2C_ADDR_ID_GPIO}
local reg=${REG_IN_1}
local value=0
value=$(_i2c_get $i2c_bus $i2c_addr $reg)
#Bit 0-1
boardBuildRev=$((value & 0x03))
#Bit 2-3
boardHwRev=$((value >> 2 & 0x03))
#Bit 4-7
boardId=$((value>>4))
printf "[MB BOARD_ID] = 0x%02x, [HW Rev] = %d, [Build Rev] = %d\n" $boardId $boardHwRev $boardBuildRev
}
#Get Board Version and Type from Dummy BMC Board
function _i2c_bmc_board_type_get {
echo "========================================================="
echo "# Description: I2C BMC Board Type Get"
echo "========================================================="
local i2c_bus=${I2C_BUS_BMC_BOARD_TYPE}
local i2c_addr=${I2C_ADDR_BMC_BOARD_TYPE}
local reg=${REG_IN_1}
local value=0
value=$(_i2c_get $i2c_bus $i2c_addr $reg)
#Bit 0-1
boardBuildRev=$((($value) & 0x03))
#Bit 2-3
boardHwRev=$((($value) >> 2 & 0x03))
#Bit 4-7
boardId=$((($value) >> 4))
printf "[BMC BOARD_ID] = 0x%02x, [HW Rev] = %d, [Build Rev] = %d\n" $boardId $boardHwRev $boardBuildRev
}
#Get CPLD Version
function _i2c_cpld_version {
echo "========================================================="
echo "# Description: CPLD Version"
echo "========================================================="
cat ${PATH_SYS_CPLD}/cpld_version
}
#Get PSU Status
function _i2c_psu_status {
local psu_abs=""
psu1PwGood=`cat ${PATH_SYSFS_PSU1}/psu_pg`
psu_abs=`cat ${PATH_SYSFS_PSU1}/psu_abs`
if [ "$psu_abs" == "0" ]; then
psu1Exist=1
else
psu1Exist=0
fi
psu2PwGood=`cat ${PATH_SYSFS_PSU2}/psu_pg`
psu_abs=`cat ${PATH_SYSFS_PSU2}/psu_abs`
if [ "$psu_abs" == "0" ]; then
psu2Exist=1
else
psu2Exist=0
fi
printf "PSU1 Exist:%x PSU1 PW Good:%d\n" $psu1Exist $psu1PwGood
printf "PSU2 Exist:%d PSU2 PW Good:%d\n" $psu2Exist $psu2PwGood
}
#Set 10G Mux to CPU or Front Panel
function _i2c_10g_mux {
echo "========================================================="
echo "# Description: 10G Mux"
echo "========================================================="
local target=${TARGET_10G_MUX}
local i2c_bus=${I2C_BUS_10GMUX}
local i2c_addr=${I2C_ADDR_10GMUX}
local reg=0
local mask=0xff
local value=0
local file_10g_mux="${PATH_SYS_CPLD}/cpld_10g_mux"
#get current 10g mux register value on CPLD
value=`cat ${file_10g_mux}`
if [ "${target}" == "cpu" ]; then
#Set XE0: slave address access
_i2c_set $i2c_bus $i2c_addr 0x06 $mask 0x18
#Set XE0: CH4 D_IN0-S_OUTA0 EQ
_i2c_set $i2c_bus $i2c_addr 0x2c $mask 0x00
#Set XE0: CH5 NC-S_OUTB0 DEM
_i2c_set $i2c_bus $i2c_addr 0x35 $mask 0x80
#Set XE0: CH5 NC-S_OUTB0 VOD
_i2c_set $i2c_bus $i2c_addr 0x34 $mask 0xab
#Set XE0: CH1 D_OUT0-S_INB0 EQ
_i2c_set $i2c_bus $i2c_addr 0x16 $mask 0x01
#Set XE0: CH1 D_OUT0-S_INB0 DEM
_i2c_set $i2c_bus $i2c_addr 0x18 $mask 0x80
#Set XE0: CH1 D_OUT0-S_INB0 VOD
_i2c_set $i2c_bus $i2c_addr 0x17 $mask 0xab
#Set XE1: CH6 D_IN1-S_OUTA1 EQ
_i2c_set $i2c_bus $i2c_addr 0x3a $mask 0x00
#Set XE1: CH7 NC-S_OUTB1 EQ
_i2c_set $i2c_bus $i2c_addr 0x41 $mask 0x00
#Set XE1: CH7 NC-S_OUTB1 DEM
_i2c_set $i2c_bus $i2c_addr 0x43 $mask 0x80
#Set XE1: CH7 NC-S_OUTB1 VOD
_i2c_set $i2c_bus $i2c_addr 0x42 $mask 0xab
#Set XE1: CH3 D_OUT1-S_INB1 EQ
_i2c_set $i2c_bus $i2c_addr 0x24 $mask 0x01
#Set XE1: CH3 D_OUT1-S_INB1 DEM
_i2c_set $i2c_bus $i2c_addr 0x26 $mask 0x80
#Set XE1: CH3 D_OUT1-S_INB1 VOD
_i2c_set $i2c_bus $i2c_addr 0x25 $mask 0xab
#Enable auto negotiation of XE ports
eval "bcmcmd 'port xe0,xe1 an=1 if=kr en=1'"
#delay 1 sec
sleep 1
#switch 10G MUX to cpu on CPLD
value=$(( value & 0xf3 ))
echo "$(printf "%x" ${value})" > ${file_10g_mux}
echo "Switch 10G Mux to [CPU]"
elif [ "${COLOR_LED}" == "fp" ]; then
#Set XE0: slave address access
_i2c_set $i2c_bus $i2c_addr 0x06 $mask 0x18
#Set XE0: CH4 D_IN0-S_OUTA0 EQ
_i2c_set $i2c_bus $i2c_addr 0x2c $mask 0x00
#Set XE0: CH4 D_IN0-S_OUTA0 DEM
_i2c_set $i2c_bus $i2c_addr 0x2e $mask 0x80
#Set XE0: CH4 D_IN0-S_OUTA0 VOD
_i2c_set $i2c_bus $i2c_addr 0x2d $mask 0xab
#Set XE0: CH0 NC-S_INA0 EQ
_i2c_set $i2c_bus $i2c_addr 0x0f $mask 0x00
#Set XE0: CH1 D_OUT0-S_INB0 DEM
_i2c_set $i2c_bus $i2c_addr 0x18 $mask 0x80
#Set XE0: CH1 D_OUT0-S_INB0 VOD
_i2c_set $i2c_bus $i2c_addr 0x17 $mask 0xab
#Set XE1: CH6 D_IN1-S_OUTA1 EQ
_i2c_set $i2c_bus $i2c_addr 0x3a $mask 0x00
#Set XE1: CH6 D_IN1-S_OUTA1 DEM
_i2c_set $i2c_bus $i2c_addr 0x3c $mask 0x80
#Set XE1: CH6 D_IN1-S_OUTA1 VOD
_i2c_set $i2c_bus $i2c_addr 0x3b $mask 0xab
#Set XE1: CH2 NC-S_INA1 EQ
_i2c_set $i2c_bus $i2c_addr 0x1d $mask 0x00
#Set XE1: CH3 D_OUT1-S_INB1 DEM
_i2c_set $i2c_bus $i2c_addr 0x26 $mask 0x80
#Set XE1: CH3 D_OUT1-S_INB1 VOD
_i2c_set $i2c_bus $i2c_addr 0x25 $mask 0xab
#Enable auto negotiation of XE ports
eval "bcmcmd 'port xe0,xe1 an=0 if=kr en=1'"
#delay 1 sec
sleep 1
#switch 10G MUX to front panel on CPLD
value=$(( value | 0x0c ))
echo "$(printf "%x" ${value})" > ${file_10g_mux}
echo "Switch 10G Mux to [Front Panel]"
else
echo "invalid target, please set target to cpu/fp"
fi
}
#Increase read socket buffer for CoPP Test
function _config_rmem {
echo "109430400" > /proc/sys/net/core/rmem_max
}
#Main Function
function _main {
start_time_str=`date`
start_time_sec=$(date +%s)
if [ "${EXEC_FUNC}" == "help" ]; then
_help
elif [ "${EXEC_FUNC}" == "i2c_init" ]; then
_i2c_init
elif [ "${EXEC_FUNC}" == "i2c_deinit" ]; then
_i2c_deinit
elif [ "${EXEC_FUNC}" == "i2c_temp_init" ]; then
_i2c_temp_init
elif [ "${EXEC_FUNC}" == "i2c_fan_init" ]; then
_i2c_fan_init
elif [ "${EXEC_FUNC}" == "i2c_volmon_init" ]; then
_i2c_volmon_init
elif [ "${EXEC_FUNC}" == "i2c_io_exp_init" ]; then
_i2c_io_exp_init
elif [ "${EXEC_FUNC}" == "i2c_led_test" ]; then
_i2c_led_test
elif [ "${EXEC_FUNC}" == "i2c_mb_eeprom_get" ]; then
_i2c_mb_eeprom_get
elif [ "${EXEC_FUNC}" == "i2c_cpu_eeprom_get" ]; then
_i2c_cpu_eeprom_get
elif [ "${EXEC_FUNC}" == "i2c_psu_eeprom_get" ]; then
_i2c_psu_eeprom_get
elif [ "${EXEC_FUNC}" == "i2c_qsfp_eeprom_get" ]; then
_i2c_qsfp_eeprom_get
elif [ "${EXEC_FUNC}" == "i2c_qsfp_eeprom_init" ]; then
_i2c_qsfp_eeprom_init ${QSFP_INIT_ACTION}
elif [ "${EXEC_FUNC}" == "i2c_mb_eeprom_init" ]; then
_i2c_mb_eeprom_init ${MB_EEPROM_ACTION}
elif [ "${EXEC_FUNC}" == "i2c_cpu_eeprom_init" ]; then
_i2c_cpu_eeprom_init ${MB_EEPROM_ACTION}
elif [ "${EXEC_FUNC}" == "i2c_qsfp_status_get" ]; then
_i2c_qsfp_status_get
elif [ "${EXEC_FUNC}" == "i2c_qsfp_type_get" ]; then
_i2c_qsfp_type_get
elif [ "${EXEC_FUNC}" == "i2c_qsfp_signal_get" ]; then
_i2c_qsfp_signal_get ${QSFP_PORT} ${QSFP_ACTION}
elif [ "${EXEC_FUNC}" == "i2c_qsfp_signal_set" ]; then
_i2c_qsfp_signal_set ${QSFP_PORT} ${QSFP_ACTION} ${QSFP_VALUE}
elif [ "${EXEC_FUNC}" == "i2c_led_psu_status_set" ]; then
_i2c_led_psu_status_set
elif [ "${EXEC_FUNC}" == "i2c_led_fan_status_set" ]; then
_i2c_led_fan_status_set
elif [ "${EXEC_FUNC}" == "i2c_led_fan_tray_status_set" ]; then
_i2c_led_fan_tray_status_set
elif [ "${EXEC_FUNC}" == "i2c_led_fan_tray_test" ]; then
_i2c_led_fan_tray_test
elif [ "${EXEC_FUNC}" == "i2c_sys_led" ]; then
_i2c_sys_led
elif [ "${EXEC_FUNC}" == "i2c_fan_led" ]; then
_i2c_fan_led
elif [ "${EXEC_FUNC}" == "i2c_fan_tray_led" ]; then
_i2c_fan_tray_led
elif [ "${EXEC_FUNC}" == "i2c_psu1_led" ]; then
_i2c_psu1_led
elif [ "${EXEC_FUNC}" == "i2c_psu2_led" ]; then
_i2c_psu2_led
elif [ "${EXEC_FUNC}" == "i2c_board_type_get" ]; then
_i2c_board_type_get
elif [ "${EXEC_FUNC}" == "i2c_bmc_board_type_get" ]; then
_i2c_bmc_board_type_get
elif [ "${EXEC_FUNC}" == "i2c_cpld_version" ]; then
_i2c_cpld_version
elif [ "${EXEC_FUNC}" == "i2c_psu_status" ]; then
_i2c_psu_status
elif [ "${EXEC_FUNC}" == "i2c_test_all" ]; then
_i2c_deinit
_i2c_init
_i2c_led_test
_i2c_psu_eeprom_get
_i2c_mb_eeprom_get
_i2c_cpu_eeprom_get
_i2c_board_type_get
_i2c_bmc_board_type_get
_i2c_cpld_version
_i2c_psu_status
elif [ "${EXEC_FUNC}" == "i2c_10g_mux" ]; then
_i2c_10g_mux
else
echo "Invalid Parameters, Exit!!!"
_help
exit ${FALSE}
fi
end_time_str=`date`
end_time_sec=$(date +%s)
diff_time=$[ ${end_time_sec} - ${start_time_sec} ]
echo "------------------------------"
echo "Total Execution Time: ${diff_time} sec"
echo "DONE"
}
_main