From e4db3d6b0cc8c5cff580cc6f5e5b54c7a0281d54 Mon Sep 17 00:00:00 2001 From: jostar-yang Date: Tue, 22 Nov 2022 14:27:57 +0800 Subject: [PATCH 1/2] [sonic_xcvr/cmis] Tune to set_lpmode status for 400G-ZR Signed-off-by: jostar-yang --- sonic_platform_base/sonic_xcvr/api/public/cmis.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sonic_platform_base/sonic_xcvr/api/public/cmis.py b/sonic_platform_base/sonic_xcvr/api/public/cmis.py index 564e151..a0be999 100644 --- a/sonic_platform_base/sonic_xcvr/api/public/cmis.py +++ b/sonic_platform_base/sonic_xcvr/api/public/cmis.py @@ -1056,7 +1056,11 @@ def set_lpmode(self, lpmode): # Force module transition to LowPwr under SW control lpmode_val = lpmode_val | (1 << CmisApi.LowPwrRequestSW) self.xcvr_eeprom.write(consts.MODULE_LEVEL_CONTROL, lpmode_val) - time.sleep(0.1) + for retries in range(50): + if self.get_lpmode(): + break + time.sleep(0.1) + return self.get_lpmode() else: # Force transition from LowPwr to HighPower state under SW control. @@ -1066,7 +1070,8 @@ def set_lpmode(self, lpmode): self.xcvr_eeprom.write(consts.MODULE_LEVEL_CONTROL, lpmode_val) time.sleep(1) mstate = self.get_module_state() - return True if mstate == 'ModuleReady' else False + return True if mstate == 'ModuleReady' or mstate=='ModulePwrUp' else False + return False def get_loopback_capability(self): From d1a2e17fee79f244759ecc81ac617d40d360dd6a Mon Sep 17 00:00:00 2001 From: jostar-yang Date: Wed, 7 Dec 2022 10:52:53 +0800 Subject: [PATCH 2/2] [sonic_xcvr]Enhance to support QSFP port_id=0xC for access eeprom Signed-off-by: jostar-yang --- sonic_platform_base/sonic_xcvr/xcvr_api_factory.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonic_platform_base/sonic_xcvr/xcvr_api_factory.py b/sonic_platform_base/sonic_xcvr/xcvr_api_factory.py index b4d0af8..9a08721 100644 --- a/sonic_platform_base/sonic_xcvr/xcvr_api_factory.py +++ b/sonic_platform_base/sonic_xcvr/xcvr_api_factory.py @@ -96,8 +96,8 @@ def create_xcvr_api(self): mem_map = Sff8636MemMap(codes) xcvr_eeprom = XcvrEeprom(self.reader, self.writer, mem_map) api = Sff8636Api(xcvr_eeprom) - # QSFP+ - elif id == 0x0D: + # QSFP+ or QSFP + elif id == 0x0D or id == 0x0C: revision_compliance = self._get_revision_compliance() if revision_compliance >= 3: codes = Sff8636Codes