From a5515b52976f82c95ce2254186b25934dbf7c78c Mon Sep 17 00:00:00 2001 From: SeanWu <81406250+seanwu-ec@users.noreply.github.com> Date: Thu, 13 Jan 2022 05:43:47 +0800 Subject: [PATCH] [Accton] Enable pca954x i2c mux idle_disconnect for 5.10 kernel (#9745) Enable pca954x idle_disconnect to avoid possible I2C device address conflict. How I did it Change pca954x device_attr idle_state to -2 (MUX_IDLE_DISCONNECT). How to verify it Cat pca954x device_attr idle_state and confirm the value is -2. Signed-off-by: Sean Wu --- .../pddf/pddf-device.json | 2 +- .../pddf/pddf-device.json | 2 +- .../pddf/pddf-device.json | 2 +- .../pddf/pddf-device.json | 2 +- .../as4630-54te/utils/accton_as4630_54te_util.py | 11 ++++++++++- .../as7312-54x/utils/accton_as7312_util.py | 11 ++++++++++- .../as7315-27xb/utils/accton_as7315_util.py | 12 ++++++++++-- .../as7326-56x/utils/pddf_post_device_create.sh | 12 ++++++++++++ .../as7726-32x/utils/pddf_post_device_create.sh | 12 ++++++++++++ .../as7816-64x/utils/pddf_post_device_create.sh | 12 ++++++++++++ .../as9716-32d/utils/pddf_post_device_create.sh | 12 ++++++++++++ .../as9726-32d/utils/accton_as9726_32d_util.py | 11 ++++++++++- 12 files changed, 92 insertions(+), 9 deletions(-) create mode 100755 platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_device_create.sh create mode 100755 platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_device_create.sh create mode 100755 platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_device_create.sh create mode 100755 platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_device_create.sh diff --git a/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json index 301e1663bf..78be7f2b61 100644 --- a/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7326_56x-r0/pddf/pddf-device.json @@ -32,7 +32,7 @@ [ "i2c-i801", "i2c_dev", - "i2c_mux_pca954x force_deselect_on_exit=1", + "i2c_mux_pca954x", "optoe" ], "pddf_kos": diff --git a/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json index 82295f93b0..8a4caec277 100644 --- a/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7726_32x-r0/pddf/pddf-device.json @@ -33,7 +33,7 @@ [ "i2c-i801", "i2c_dev", - "i2c_mux_pca954x force_deselect_on_exit=1", + "i2c_mux_pca954x", "optoe" ], "pddf_kos": diff --git a/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json index d5461804b6..12d6c3a115 100644 --- a/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as7816_64x-r0/pddf/pddf-device.json @@ -32,7 +32,7 @@ [ "i2c-i801", "i2c_dev", - "i2c_mux_pca954x force_deselect_on_exit=1", + "i2c_mux_pca954x", "optoe" ], "pddf_kos": diff --git a/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json b/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json index 21a9bef87b..ce59228607 100644 --- a/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json +++ b/device/accton/x86_64-accton_as9716_32d-r0/pddf/pddf-device.json @@ -33,7 +33,7 @@ "i2c-ismt", "i2c-i801", "i2c_dev", - "i2c_mux_pca954x force_deselect_on_exit=1", + "i2c_mux_pca954x", "optoe" ], "pddf_kos": diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/utils/accton_as4630_54te_util.py b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/utils/accton_as4630_54te_util.py index 21e8ecb30c..7e325ed429 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/utils/accton_as4630_54te_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/utils/accton_as4630_54te_util.py @@ -274,7 +274,7 @@ def driver_inserted(): kos = [ 'depmod -ae', 'modprobe i2c_dev', - 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', + 'modprobe i2c_mux_pca954x', 'modprobe ym2651y', 'modprobe x86_64_accton_as4630_54te_cpld', 'modprobe x86_64_accton_as4630_54te_leds', @@ -330,6 +330,15 @@ def device_install(): print(output) if FORCE == 0: return status + + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status + print("Check SFP") for i in range(0, len(sfp_map)): if(i < 4): diff --git a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py index b79a1c1088..4897945368 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7312-54x/utils/accton_as7312_util.py @@ -164,7 +164,7 @@ def driver_check(): kos = [ 'modprobe i2c_dev', - 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', + 'modprobe i2c_mux_pca954x', 'modprobe accton_i2c_cpld', 'modprobe ym2651y', 'modprobe accton_as7312_54x_fan', @@ -308,6 +308,15 @@ def device_install(): print(output) if FORCE == 0: return status + + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status + for i in range(0, len(sfp_map)): if i < qsfp_start: (status, output) = \ diff --git a/platform/broadcom/sonic-platform-modules-accton/as7315-27xb/utils/accton_as7315_util.py b/platform/broadcom/sonic-platform-modules-accton/as7315-27xb/utils/accton_as7315_util.py index 867f5ce1ae..2b2d2b4670 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as7315-27xb/utils/accton_as7315_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as7315-27xb/utils/accton_as7315_util.py @@ -158,7 +158,7 @@ def driver_check(): kos = [ 'modprobe i2c_dev', -'modprobe i2c_mux_pca954x force_deselect_on_exit=1', +'modprobe i2c_mux_pca954x', 'modprobe optoe', 'modprobe ym2651y', 'modprobe accton_as7315_27xb_fan', @@ -240,7 +240,7 @@ mknod =[ def i2c_order_check(): return 0 - + def device_install(): global FORCE @@ -255,6 +255,14 @@ def device_install(): if FORCE == 0: return status + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status + for i in range(0,len(sfp_map)): path = "/sys/bus/i2c/devices/i2c-"+str(sfp_map[i])+"/new_device" if 1 >= qsfp_start_index: diff --git a/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_device_create.sh b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_device_create.sh new file mode 100755 index 0000000000..bfa5455953 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7326-56x/utils/pddf_post_device_create.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set_pca_mux_idle_disconnect() +{ + echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state >& /dev/null + if [ $? -ne 0 ]; then + echo Fail to set pca954x mux idle disconnect + exit 2 + fi +} + +set_pca_mux_idle_disconnect diff --git a/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_device_create.sh b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_device_create.sh new file mode 100755 index 0000000000..bfa5455953 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7726-32x/utils/pddf_post_device_create.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set_pca_mux_idle_disconnect() +{ + echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state >& /dev/null + if [ $? -ne 0 ]; then + echo Fail to set pca954x mux idle disconnect + exit 2 + fi +} + +set_pca_mux_idle_disconnect diff --git a/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_device_create.sh b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_device_create.sh new file mode 100755 index 0000000000..bfa5455953 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as7816-64x/utils/pddf_post_device_create.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set_pca_mux_idle_disconnect() +{ + echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state >& /dev/null + if [ $? -ne 0 ]; then + echo Fail to set pca954x mux idle disconnect + exit 2 + fi +} + +set_pca_mux_idle_disconnect diff --git a/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_device_create.sh b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_device_create.sh new file mode 100755 index 0000000000..bfa5455953 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-accton/as9716-32d/utils/pddf_post_device_create.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set_pca_mux_idle_disconnect() +{ + echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state >& /dev/null + if [ $? -ne 0 ]; then + echo Fail to set pca954x mux idle disconnect + exit 2 + fi +} + +set_pca_mux_idle_disconnect diff --git a/platform/broadcom/sonic-platform-modules-accton/as9726-32d/utils/accton_as9726_32d_util.py b/platform/broadcom/sonic-platform-modules-accton/as9726-32d/utils/accton_as9726_32d_util.py index 5ba732cb73..1dd3c0b467 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as9726-32d/utils/accton_as9726_32d_util.py +++ b/platform/broadcom/sonic-platform-modules-accton/as9726-32d/utils/accton_as9726_32d_util.py @@ -277,7 +277,7 @@ def driver_inserted(): kos = [ 'depmod -ae', 'modprobe i2c_dev', - 'modprobe i2c_mux_pca954x force_deselect_on_exit=1', + 'modprobe i2c_mux_pca954x', 'modprobe ym2651y', 'modprobe x86-64-accton-as9726-32d_cpld', 'modprobe x86-64-accton-as9726-32d_fan', @@ -326,6 +326,15 @@ def device_install(): print(output) if FORCE == 0: return status + + # set all pca954x idle_disconnect + cmd = 'echo -2 | tee /sys/bus/i2c/drivers/pca954x/*-00*/idle_state' + status, output = log_os_system(cmd, 1) + if status: + print(output) + if FORCE == 0: + return status + print("Check SFP") for i in range(0, len(sfp_map)): if(i >= (len(sfp_map)-2)):