From d1d32a12549529086ddf4b5e0fe243b40daa65a6 Mon Sep 17 00:00:00 2001 From: Jeff Chen Date: Tue, 27 Nov 2018 17:08:09 +0800 Subject: [PATCH] Fix SFP eeprom read issue. --- .../builds/delta_agc7648sv1_platform.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/platforms/delta/x86-64/x86-64-delta-agc7648sv1/modules/builds/delta_agc7648sv1_platform.c b/packages/platforms/delta/x86-64/x86-64-delta-agc7648sv1/modules/builds/delta_agc7648sv1_platform.c index 72a7a61a..eaa5d460 100755 --- a/packages/platforms/delta/x86-64/x86-64-delta-agc7648sv1/modules/builds/delta_agc7648sv1_platform.c +++ b/packages/platforms/delta/x86-64/x86-64-delta-agc7648sv1/modules/builds/delta_agc7648sv1_platform.c @@ -2752,7 +2752,7 @@ static int swpld3_mux_select(struct i2c_mux_core *muxc, u32 chan) ret = dni_bmc_exist_check(); if ( mux->data.base_nr == BUS2_QSFP_BASE_NUM ){ - /* QSFP module selection */ + /* Set QSFP module respond */ swpld1_qsfp_modsel_val = SWPLD1_QSFP_MODSEL_VAL & (~(1 << chan)); if (ret == 0) //BMC monitor on { @@ -2779,6 +2779,24 @@ static int swpld3_mux_select(struct i2c_mux_core *muxc, u32 chan) swpld3_mux_val = chan; } else if ( mux->data.base_nr == BUS2_SFP_BASE_NUM ){ + /* Disable all QSFP modules respond */ + swpld1_qsfp_modsel_val |= SWPLD1_QSFP_MODSEL_VAL; + if (ret == 0) //BMC monitor on + { + set_cmd = CMD_SETDATA; + cmd_data[0] = BMC_SWPLD_BUS; + cmd_data[1] = SWPLD1_ADDR; + cmd_data[2] = SWPLD1_QSFP_MODSEL_REG; + cmd_data[3] = swpld1_qsfp_modsel_val; + cmd_data_len = sizeof(cmd_data); + dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len); + } + else //BMC monitor off or BMC is not exist + { + if (cpld_reg_write_byte(pdata[swpld1].client, SWPLD1_QSFP_MODSEL_REG, swpld1_qsfp_modsel_val) < 0) + return -EIO; + } + /* SFP port 51-59, 9 ports, chan 0-8 */ if ( chan < SWPLD3_SFP_PORT_9 ){ swpld3_qsfp_ch_en |= SWPLD3_SFP_CH1_EN << 4;