#/bin/bash # # SFP28(25GbE) Retimer(DS250DF230) Setup(I2C) Init # # check paramter if [ $# -ne 1 ]; then echo "Usage: sfp28_retimer_setup_init [port]" echo " [port] --> (0:SFP28_0, 1:SFP28_1) $1 " exit 1 fi # command tmp CMD_RT='/tmp/.ess_cmd_rt' # ************************************************************************************************** sfp28_port=$1 # ************************************************************************************************** # 25G Retimer I2C Address # ************************************************************************************************** # i2c-15 i2c i2c-1-mux (chan_id 2) I2C adapter I2C3_CH2 25G Retimer #1 # i2c-16 i2c i2c-1-mux (chan_id 3) I2C adapter I2C3_CH3 25G Retimer #2 # Retimer I2C Address 0x18 if [ $sfp28_port -eq 0 ]; then I2C_ADR="15" # echo " *** 25G Retimer 0 Setup Init *** " fi if [ $sfp28_port -eq 1 ]; then I2C_ADR="16" # echo " *** 25G Retimer 1 Setup Init *** " fi # ************************************************************************************************** echo " *** 25G Retimer Setup Init Start *** " # ************************************************************************************************** # ********************************************************** # Device ID # ********************************************************** # ------------------------------------------------------ # Read the Device ID # ------------------------------------------------------ i2cget -f -y $I2C_ADR 0x18 0xF1 > $CMD_RT # Device ID DS250DF230: 0x15 DATA_TMP="$(cat $CMD_RT)" echo " Device ID : $DATA_TMP" # ********************************************************** # Reset Channel Registers # ********************************************************** # ------------------------------------------------------ # Reset All Channel Registers # ------------------------------------------------------ echo " Reset All Channel Registers" i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFC 0x01 # Select channel 0 i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x03 # Select broadcast mode i2cset -f -y -m 0x04 $I2C_ADR 0x18 0x00 0x04 # Assert channel register reset. # This bit is self-clearing. i2cset -f -y -m 0xFF $I2C_ADR 0x18 0xFC 0x00 # Select channel X i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x00 # Select shared mode sleep 0.5 # ********************************************************** # Configure Cross-Point # ********************************************************** # ------------------------------------------------------ # Configure Cross-Point CH0 # ------------------------------------------------------ echo " Configure Cross-Point CH0" i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFC 0x01 # Select channel 0 i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x01 # Select channel mode i2cset -f -y -m 0x08 $I2C_ADR 0x18 0x95 0x08 # Set eq_enable to 1 i2cset -f -y -m 0x08 $I2C_ADR 0x18 0x96 0x00 # Set EQ en_local to 0 i2cset -f -y -m 0x04 $I2C_ADR 0x18 0x96 0x04 # Set EQ en_fanout to 1 i2cset -f -y -m 0x01 $I2C_ADR 0x18 0x96 0x00 # Set EQ xpnt_slave to 0 i2cset -f -y -m 0x02 $I2C_ADR 0x18 0x96 0x02 # Set EQ sel_xpt to 1 i2cset -f -y -m 0x01 $I2C_ADR 0x18 0x96 0x00 # Set EQ xpnt_slave to 0 i2cset -f -y -m 0x0C $I2C_ADR 0x18 0x0A 0x0C # Force CDR Reset i2cset -f -y -m 0x0C $I2C_ADR 0x18 0x0A 0x00 # Release CDR Reset i2cset -f -y -m 0xFF $I2C_ADR 0x18 0xFC 0x00 # Select channel X i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x00 # Select shared mode # ------------------------------------------------------ # Configure Cross-Point CH1 # ------------------------------------------------------ echo " Configure Cross-Point CH1" i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFC 0x02 # Select channel 1 i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x01 # Select channel mode i2cset -f -y -m 0x08 $I2C_ADR 0x18 0x95 0x08 # Set eq_enable to 1 i2cset -f -y -m 0x08 $I2C_ADR 0x18 0x96 0x00 # Set EQ en_local to 0 i2cset -f -y -m 0x04 $I2C_ADR 0x18 0x96 0x04 # Set EQ en_fanout to 1 i2cset -f -y -m 0x01 $I2C_ADR 0x18 0x96 0x00 # Set EQ xpnt_slave to 0 i2cset -f -y -m 0x02 $I2C_ADR 0x18 0x96 0x02 # Set EQ sel_xpt to 1 i2cset -f -y -m 0x01 $I2C_ADR 0x18 0x96 0x00 # Set EQ xpnt_slave to 0 i2cset -f -y -m 0x0C $I2C_ADR 0x18 0x0A 0x0C # Force CDR Reset i2cset -f -y -m 0x0C $I2C_ADR 0x18 0x0A 0x00 # Release CDR Reset i2cset -f -y -m 0xFF $I2C_ADR 0x18 0xFC 0x00 # Select channel X i2cset -f -y -m 0x03 $I2C_ADR 0x18 0xFF 0x00 # Select shared mode sleep 1 # ************************************************************************************************** echo " *** 25G Retimer Setup Init END *** " # ************************************************************************************************** exit 0