File tree 2 files changed +20
-2
lines changed
platform/mellanox/mlnx-platform-api/sonic_platform
2 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -513,16 +513,18 @@ def get_change_event_for_module_host_management_mode(self, timeout):
513
513
s .on_event (event )
514
514
515
515
if s .in_stable_state ():
516
+ self .sfp_module .SFP .wait_sfp_eeprom_ready ([s ], 2 )
516
517
s .fill_change_event (port_dict )
517
518
s .refresh_poll_obj (self .poll_obj , self .registered_fds )
518
519
else :
519
520
logger .log_debug (f'SFP { sfp_index } does not reach stable state, state={ s .state } ' )
520
-
521
+
521
522
ready_sfp_set = wait_ready_task .get_ready_set ()
522
523
for sfp_index in ready_sfp_set :
523
524
s = self ._sfp_list [sfp_index ]
524
525
s .on_event (sfp .EVENT_RESET_DONE )
525
526
if s .in_stable_state ():
527
+ self .sfp_module .SFP .wait_sfp_eeprom_ready ([s ], 2 )
526
528
s .fill_change_event (port_dict )
527
529
s .refresh_poll_obj (self .poll_obj , self .registered_fds )
528
530
else :
Original file line number Diff line number Diff line change @@ -500,6 +500,21 @@ def get_presence(self):
500
500
return False
501
501
eeprom_raw = self ._read_eeprom (0 , 1 , log_on_error = False )
502
502
return eeprom_raw is not None
503
+
504
+ @classmethod
505
+ def wait_sfp_eeprom_ready (cls , sfp_list , wait_time ):
506
+ not_ready_list = sfp_list
507
+
508
+ while wait_time > 0 :
509
+ not_ready_list = [s for s in not_ready_list if s .state == STATE_FW_CONTROL and s ._read_eeprom (0 , 2 ,False ) is None ]
510
+ if not_ready_list :
511
+ time .sleep (0.1 )
512
+ wait_time -= 0.1
513
+ else :
514
+ return
515
+
516
+ for s in not_ready_list :
517
+ logger .log_error (f'SFP { s .sdk_index } eeprom is not ready' )
503
518
504
519
# read eeprom specfic bytes beginning from offset with size as num_bytes
505
520
def read_eeprom (self , offset , num_bytes ):
@@ -1724,7 +1739,8 @@ def initialize_sfp_modules(cls, sfp_list):
1724
1739
logger .log_error (f'SFP { index } is not in stable state after initializing, state={ s .state } ' )
1725
1740
logger .log_notice (f'SFP { index } is in state { s .state } after module initialization' )
1726
1741
1727
-
1742
+ cls .wait_sfp_eeprom_ready (sfp_list , 2 )
1743
+
1728
1744
class RJ45Port (NvidiaSFPCommon ):
1729
1745
"""class derived from SFP, representing RJ45 ports"""
1730
1746
You can’t perform that action at this time.
0 commit comments