Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sonic_platform_base/sonic_xcvr/api/public/c_cmis.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
})

class CCmisApi(CmisApi):
def __init__(self, xcvr_eeprom, cdb):
super(CCmisApi, self).__init__(xcvr_eeprom, cdb)
def __init__(self, xcvr_eeprom, init_cdb_fw_handler=False):
super(CCmisApi, self).__init__(xcvr_eeprom, init_cdb_fw_handler)

def _get_vdm_key_to_db_prefix_map(self):
combined_map = {**CMIS_VDM_KEY_TO_DB_PREFIX_KEY_MAP, **C_CMIS_DELTA_VDM_KEY_TO_DB_PREFIX_KEY_MAP}
Expand Down
24 changes: 22 additions & 2 deletions sonic_platform_base/sonic_xcvr/api/public/cmis.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@

import logging
from ...codes.public.cmis import CmisCodes
from ...codes.public.cdb import CdbCodes
from ...codes.public.sff8024 import Sff8024
from ...fields import consts
from ...mem_maps.public.cdb import CdbMemMap
from ...cdb.cdb_fw import CdbFwHandler as CdbFw
from ..xcvr_api import XcvrApi
from .cmisCDB import CmisCdbApi
from .cmisVDM import CmisVdmApi
Expand Down Expand Up @@ -135,11 +138,28 @@ def set_cache_enabled(cls, enabled: bool):
"""
cls.cache_enabled = bool(enabled)

def __init__(self, xcvr_eeprom, cdb_fw_hdlr=None):
def __init__(self, xcvr_eeprom, init_cdb_fw_handler=False):
super(CmisApi, self).__init__(xcvr_eeprom)
self.vdm = CmisVdmApi(xcvr_eeprom) if not self.is_flat_memory() else None
self.cdb = CmisCdbApi(xcvr_eeprom) if self.is_cdb_supported() else None
self.cdb_fw_hdlr = cdb_fw_hdlr if self.is_cdb_supported() else None
self._init_cdb_fw_handler = init_cdb_fw_handler
self._cdb_fw_hdlr = None

@property
def cdb_fw_hdlr(self):
if not self._init_cdb_fw_handler:
return None

if self._cdb_fw_hdlr is None:
self._cdb_fw_hdlr = self._create_cdb_fw_handler()
return self._cdb_fw_hdlr

def _create_cdb_fw_handler(self):
if not self.is_cdb_supported():
self._init_cdb_fw_handler = False
return None
cdb_mem_map = CdbMemMap(CdbCodes)
return CdbFw(self.xcvr_eeprom.reader, self.xcvr_eeprom.writer, cdb_mem_map)

def get_cdb_fw_handler(self):
return self.cdb_fw_hdlr
Expand Down
9 changes: 2 additions & 7 deletions sonic_platform_base/sonic_xcvr/xcvr_api_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
from .api.public.c_cmis import CCmisApi
from .mem_maps.public.cmis import CmisMemMap
from .mem_maps.public.c_cmis import CCmisMemMap
from .mem_maps.public.cdb import CdbMemMap
from .cdb.cdb_fw import CdbFwHandler as CdbFw
from .codes.public.cdb import CdbCodes

from .codes.credo.aec_800g import CmisAec800gCodes
from .api.credo.aec_800g import CmisAec800gApi
Expand Down Expand Up @@ -89,13 +86,11 @@ def _create_cmis_api(self):
('EOPTOLINK' in vendor_name and vendor_pn in EOP_800G_VENDOR_PN_LIST):
api = self._create_api(CmisCodes, CmisMemMap, CmisFr800gApi)
else:
cdb_mem_map = CdbMemMap(CdbCodes)
cdb_fw = CdbFw(self.reader, self.writer, cdb_mem_map)
xcvr_eeprom = XcvrEeprom(self.reader, self.writer, CmisMemMap(CmisCodes))
api = CmisApi(xcvr_eeprom, cdb_fw)
api = CmisApi(xcvr_eeprom, init_cdb_fw_handler=True)
if api.is_coherent_module():
xcvr_eeprom = XcvrEeprom(self.reader, self.writer, CCmisMemMap(CmisCodes))
api = CCmisApi(xcvr_eeprom, cdb_fw)
api = CCmisApi(xcvr_eeprom, init_cdb_fw_handler=True)
return api

def _create_qsfp_api(self):
Expand Down
8 changes: 1 addition & 7 deletions tests/sonic_xcvr/test_ccmis.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,18 @@
import pytest
from sonic_platform_base.sonic_xcvr.api.public.c_cmis import CCmisApi, C_CMIS_XCVR_INFO_DEFAULT_DICT
from sonic_platform_base.sonic_xcvr.mem_maps.public.c_cmis import CCmisMemMap
from sonic_platform_base.sonic_xcvr.mem_maps.public.cdb import CdbMemMap
from sonic_platform_base.sonic_xcvr.xcvr_eeprom import XcvrEeprom
from sonic_platform_base.sonic_xcvr.codes.public.cmis import CmisCodes
from sonic_platform_base.sonic_xcvr.codes.public.cdb import CdbCodes
from sonic_platform_base.sonic_xcvr.cdb.cdb_fw import CdbFwHandler as CdbFw


CdbFw.initFwHandler = MagicMock(return_value=True)

class TestCCmis(object):
codes = CmisCodes
mem_map = CCmisMemMap(codes)
reader = MagicMock(return_value=None)
writer = MagicMock()
eeprom = XcvrEeprom(reader, writer, mem_map)

cdb = CdbFw(reader, writer, CdbMemMap(CdbCodes))
api = CCmisApi(eeprom, cdb)
api = CCmisApi(eeprom, init_cdb_fw_handler=False)

@pytest.mark.parametrize("mock_response, expected", [
(8, 150),
Expand Down
4 changes: 2 additions & 2 deletions tests/sonic_xcvr/test_cdb_fw.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def test_initFwHandler_send_cmd_failure(self):

result = handler.initFwHandler()

assert result == True
assert result == False

def test_initFwHandler_read_reply_none(self):
"""Test initFwHandler when read_reply returns None"""
Expand All @@ -75,7 +75,7 @@ def test_initFwHandler_read_reply_none(self):

result = handler.initFwHandler()

assert result == True
assert result == False

def test_initFwHandler_lpl_only(self):
"""Test initFwHandler with LPL only mechanism"""
Expand Down
26 changes: 26 additions & 0 deletions tests/sonic_xcvr/test_cmis.py
Original file line number Diff line number Diff line change
Expand Up @@ -2997,3 +2997,29 @@ def test_get_tx_adaptive_eq_fail_flag(self, mock_response, expected):
self.api.xcvr_eeprom.read.return_value = mock_response[1]
result = self.api.get_tx_adaptive_eq_fail_flag()
assert result == expected

@patch('sonic_platform_base.sonic_xcvr.cdb.cdb_fw.CdbFwHandler.initFwHandler', MagicMock(return_value=True))
@patch('sonic_platform_base.sonic_xcvr.api.public.cmis.CmisApi.is_cdb_supported')
def test_create_cdb_fw_handler(self, mock_cdb_support):
mock_cdb_support.return_value = False
assert self.api._create_cdb_fw_handler() is None
assert self.api._init_cdb_fw_handler is False
mock_cdb_support.return_value = True
assert self.api._create_cdb_fw_handler()

with patch.object(self.api, '_init_cdb_fw_handler', new=False):
assert self.api.cdb_fw_hdlr is None
with patch.object(self.api, '_init_cdb_fw_handler', new=True):
assert self.api.cdb_fw_hdlr is not None

@patch('sonic_platform_base.sonic_xcvr.cdb.cdb_fw.CdbFwHandler.initFwHandler', MagicMock(return_value=True))
@patch('sonic_platform_base.sonic_xcvr.api.public.cmis.CmisApi.is_cdb_supported', MagicMock(return_value=True))
@patch('sonic_platform_base.sonic_xcvr.api.public.cmis.CmisApi._create_cdb_fw_handler')
def test_lazy_create_cdb_fw_handler(self, mock_create_handler):
mock_create_handler.return_value = MagicMock()
self.api._cdb_fw_hdlr = None
with patch.object(self.api, '_init_cdb_fw_handler', new=True):
first_handle = self.api.cdb_fw_hdlr
second_handle =self.api.cdb_fw_hdlr
assert first_handle is second_handle
assert mock_create_handler.call_count == 1
10 changes: 3 additions & 7 deletions tests/sonic_xcvr/test_sfp_optoe_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,8 @@
from sonic_platform_base.sonic_xcvr.xcvr_eeprom import XcvrEeprom
from sonic_platform_base.sonic_xcvr.codes.public.cmis import CmisCodes
from sonic_platform_base.sonic_xcvr.api.public.sff8472 import Sff8472Api
from sonic_platform_base.sonic_xcvr.mem_maps.public.cdb import CdbMemMap
from sonic_platform_base.sonic_xcvr.codes.public.cdb import CdbCodes
from sonic_platform_base.sonic_xcvr.cdb.cdb_fw import CdbFwHandler as CdbFw

CdbFw.initFwHandler = MagicMock(return_value=True)

class TestSfpOptoeBase(object):

codes = CmisCodes
Expand All @@ -22,9 +19,8 @@ class TestSfpOptoeBase(object):
writer = MagicMock()
eeprom = XcvrEeprom(reader, writer, mem_map)
sfp_optoe_api = SfpOptoeBase()
cdb = CdbFw(reader, writer, CdbMemMap(CdbCodes))
ccmis_api = CCmisApi(eeprom, cdb)
cmis_api = CmisApi(eeprom, cdb)
ccmis_api = CCmisApi(eeprom, init_cdb_fw_handler=False)
cmis_api = CmisApi(eeprom, init_cdb_fw_handler=False)
sff8472_api = Sff8472Api(eeprom)

def test_is_transceiver_vdm_supported_non_cmis(self):
Expand Down
Loading