Skip to content

Commit 8eb3462

Browse files
[cmis] Optimize cmis.get_error_description speed for passive module
1 parent 9ca0f69 commit 8eb3462

File tree

2 files changed

+73
-44
lines changed

2 files changed

+73
-44
lines changed

sonic_platform_base/sonic_xcvr/api/public/cmis.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,21 +3132,22 @@ def stage_custom_si_settings(self, host_lanes_mask, optics_si_dict):
31323132
return True
31333133

31343134
def get_error_description(self):
3135-
dp_state = self.get_datapath_state()
3136-
conf_state = self.get_config_datapath_hostlane_status()
3137-
for lane in range(self.NUM_CHANNELS):
3138-
name = "{}_{}_{}".format(consts.STAGED_CTRL_APSEL_FIELD, 0, lane + 1)
3139-
appl = self.xcvr_eeprom.read(name)
3140-
if (appl is None) or ((appl >> 4) == 0):
3141-
continue
3142-
3143-
name = "DP{}State".format(lane + 1)
3144-
if dp_state[name] != CmisCodes.DATAPATH_STATE[4]:
3145-
return dp_state[name]
3146-
3147-
name = "ConfigStatusLane{}".format(lane + 1)
3148-
if conf_state[name] != CmisCodes.CONFIG_STATUS[1]:
3149-
return conf_state[name]
3135+
if not self.is_flat_memory():
3136+
dp_state = self.get_datapath_state()
3137+
conf_state = self.get_config_datapath_hostlane_status()
3138+
for lane in range(self.NUM_CHANNELS):
3139+
name = "{}_{}_{}".format(consts.STAGED_CTRL_APSEL_FIELD, 0, lane + 1)
3140+
appl = self.xcvr_eeprom.read(name)
3141+
if (appl is None) or ((appl >> 4) == 0):
3142+
continue
3143+
3144+
name = "DP{}State".format(lane + 1)
3145+
if dp_state[name] != CmisCodes.DATAPATH_STATE[4]:
3146+
return dp_state[name]
3147+
3148+
name = "ConfigStatusLane{}".format(lane + 1)
3149+
if conf_state[name] != CmisCodes.CONFIG_STATUS[1]:
3150+
return conf_state[name]
31503151

31513152
state = self.get_module_state()
31523153
if state != CmisCodes.MODULE_STATE[3]:

tests/sonic_xcvr/test_cmis.py

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3038,35 +3038,63 @@ def test_set_module_OutputAmplitudeTargetRx_settings(self):
30383038
assert self.api.xcvr_eeprom.write.call_count == 4
30393039

30403040
def test_get_error_description(self):
3041-
self.api.get_module_state = MagicMock()
3042-
self.api.get_module_state.return_value = 'ModuleReady'
3043-
self.api.get_datapath_state = MagicMock()
3044-
self.api.get_datapath_state.return_value = {
3045-
'DP1State': 'DataPathActivated',
3046-
'DP2State': 'DataPathActivated',
3047-
'DP3State': 'DataPathActivated',
3048-
'DP4State': 'DataPathActivated',
3049-
'DP5State': 'DataPathActivated',
3050-
'DP6State': 'DataPathActivated',
3051-
'DP7State': 'DataPathActivated',
3052-
'DP8State': 'DataPathActivated'
3053-
}
3054-
self.api.get_config_datapath_hostlane_status = MagicMock()
3055-
self.api.get_config_datapath_hostlane_status.return_value = {
3056-
'ConfigStatusLane1': 'ConfigSuccess',
3057-
'ConfigStatusLane2': 'ConfigSuccess',
3058-
'ConfigStatusLane3': 'ConfigSuccess',
3059-
'ConfigStatusLane4': 'ConfigSuccess',
3060-
'ConfigStatusLane5': 'ConfigSuccess',
3061-
'ConfigStatusLane6': 'ConfigSuccess',
3062-
'ConfigStatusLane7': 'ConfigSuccess',
3063-
'ConfigStatusLane8': 'ConfigSuccess'
3064-
}
3065-
self.api.xcvr_eeprom.read = MagicMock()
3066-
self.api.xcvr_eeprom.read.return_value = 0x10
3067-
3068-
result = self.api.get_error_description()
3069-
assert result is 'OK'
3041+
with patch.object(self.api, 'is_flat_memory') as mock_method:
3042+
mock_method.return_value = False
3043+
self.api.get_module_state = MagicMock()
3044+
self.api.get_module_state.return_value = 'ModuleReady'
3045+
self.api.get_datapath_state = MagicMock()
3046+
self.api.get_datapath_state.return_value = {
3047+
'DP1State': 'DataPathActivated',
3048+
'DP2State': 'DataPathActivated',
3049+
'DP3State': 'DataPathActivated',
3050+
'DP4State': 'DataPathActivated',
3051+
'DP5State': 'DataPathActivated',
3052+
'DP6State': 'DataPathActivated',
3053+
'DP7State': 'DataPathActivated',
3054+
'DP8State': 'DataPathActivated'
3055+
}
3056+
self.api.get_config_datapath_hostlane_status = MagicMock()
3057+
self.api.get_config_datapath_hostlane_status.return_value = {
3058+
'ConfigStatusLane1': 'ConfigSuccess',
3059+
'ConfigStatusLane2': 'ConfigSuccess',
3060+
'ConfigStatusLane3': 'ConfigSuccess',
3061+
'ConfigStatusLane4': 'ConfigSuccess',
3062+
'ConfigStatusLane5': 'ConfigSuccess',
3063+
'ConfigStatusLane6': 'ConfigSuccess',
3064+
'ConfigStatusLane7': 'ConfigSuccess',
3065+
'ConfigStatusLane8': 'ConfigSuccess'
3066+
}
3067+
self.api.xcvr_eeprom.read = MagicMock()
3068+
self.api.xcvr_eeprom.read.return_value = 0x10
3069+
3070+
result = self.api.get_error_description()
3071+
assert result is 'OK'
3072+
3073+
self.api.get_config_datapath_hostlane_status.return_value = {
3074+
'ConfigStatusLane1': 'ConfigRejected',
3075+
'ConfigStatusLane2': 'ConfigRejected',
3076+
'ConfigStatusLane3': 'ConfigRejected',
3077+
'ConfigStatusLane4': 'ConfigRejected',
3078+
'ConfigStatusLane5': 'ConfigRejected',
3079+
'ConfigStatusLane6': 'ConfigRejected',
3080+
'ConfigStatusLane7': 'ConfigRejected',
3081+
'ConfigStatusLane8': 'ConfigRejected'
3082+
}
3083+
result = self.api.get_error_description()
3084+
assert result is 'ConfigRejected'
3085+
3086+
self.api.get_datapath_state.return_value = {
3087+
'DP1State': 'DataPathDeactivated',
3088+
'DP2State': 'DataPathActivated',
3089+
'DP3State': 'DataPathActivated',
3090+
'DP4State': 'DataPathActivated',
3091+
'DP5State': 'DataPathActivated',
3092+
'DP6State': 'DataPathActivated',
3093+
'DP7State': 'DataPathActivated',
3094+
'DP8State': 'DataPathActivated'
3095+
}
3096+
result = self.api.get_error_description()
3097+
assert result is 'DataPathDeactivated'
30703098

30713099
def test_random_read_fail(self):
30723100
def mock_read_raw(offset, size):

0 commit comments

Comments
 (0)