From dff8d48677836b95e788c410de404d48637bb1c1 Mon Sep 17 00:00:00 2001 From: mihirpat1 <112018033+mihirpat1@users.noreply.github.com> Date: Sun, 14 Apr 2024 00:26:48 -0700 Subject: [PATCH] Separate common code for remote target FW upgrade supported optics (#453) * Separate common code for remote side FW upgrade supported optics Signed-off-by: Mihir Patel * Added newline to EOF * Moved TARGET_MODE to Credo specific memmap --------- Signed-off-by: Mihir Patel --- .../sonic_xcvr/api/credo/aec_800g.py | 9 ++++----- .../sonic_xcvr/api/public/cmisTargetFWUpgrade.py | 13 +++++++++++++ .../sonic_xcvr/codes/credo/aec_800g.py | 11 ++++------- .../sonic_xcvr/codes/public/cmisTargetFWUpgrade.py | 8 ++++++++ .../sonic_xcvr/mem_maps/credo/aec_800g.py | 14 +++----------- .../mem_maps/public/cmisTargetFWUpgrade.py | 12 ++++++++++++ 6 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 sonic_platform_base/sonic_xcvr/api/public/cmisTargetFWUpgrade.py create mode 100644 sonic_platform_base/sonic_xcvr/codes/public/cmisTargetFWUpgrade.py create mode 100644 sonic_platform_base/sonic_xcvr/mem_maps/public/cmisTargetFWUpgrade.py diff --git a/sonic_platform_base/sonic_xcvr/api/credo/aec_800g.py b/sonic_platform_base/sonic_xcvr/api/credo/aec_800g.py index 87fb0a53c..44c67477d 100644 --- a/sonic_platform_base/sonic_xcvr/api/credo/aec_800g.py +++ b/sonic_platform_base/sonic_xcvr/api/credo/aec_800g.py @@ -4,9 +4,8 @@ Implementation of Credo AEC cable specific in addition to the CMIS specification. """ -from ...fields import consts -from ..public.cmis import CmisApi +from ..public.cmisTargetFWUpgrade import CmisTargetFWUpgradeAPI -class CmisAec800gApi(CmisApi): - def set_firmware_download_target_end(self, target): - return self.xcvr_eeprom.write(consts.TARGET_MODE, target) +class CmisAec800gApi(CmisTargetFWUpgradeAPI): + # Vendor specific implementation to be added here + pass diff --git a/sonic_platform_base/sonic_xcvr/api/public/cmisTargetFWUpgrade.py b/sonic_platform_base/sonic_xcvr/api/public/cmisTargetFWUpgrade.py new file mode 100644 index 000000000..cc3bac81d --- /dev/null +++ b/sonic_platform_base/sonic_xcvr/api/public/cmisTargetFWUpgrade.py @@ -0,0 +1,13 @@ +""" + cmisTargetFWUpgrade.py + + Implementation of XcvrApi for CMIS based modules supporting firmware + upgrade of remote target from the local target itself. +""" + +from ...fields import consts +from .cmis import CmisApi + +class CmisTargetFWUpgradeAPI(CmisApi): + def set_firmware_download_target_end(self, target): + return self.xcvr_eeprom.write(consts.TARGET_MODE, target) diff --git a/sonic_platform_base/sonic_xcvr/codes/credo/aec_800g.py b/sonic_platform_base/sonic_xcvr/codes/credo/aec_800g.py index 939a3d26a..5fb2f7ba0 100644 --- a/sonic_platform_base/sonic_xcvr/codes/credo/aec_800g.py +++ b/sonic_platform_base/sonic_xcvr/codes/credo/aec_800g.py @@ -1,8 +1,5 @@ -from ..public.cmis import CmisCodes +from ..public.cmisTargetFWUpgrade import CmisTargetFWUpgradeCodes -class CmisAec800gCodes(CmisCodes): - TARGET_MODE = { - 0: 'local', - 1: 'remote-A', - 2: 'remote-B' - } +class CmisAec800gCodes(CmisTargetFWUpgradeCodes): + # Vendor specific implementation to be added here + pass diff --git a/sonic_platform_base/sonic_xcvr/codes/public/cmisTargetFWUpgrade.py b/sonic_platform_base/sonic_xcvr/codes/public/cmisTargetFWUpgrade.py new file mode 100644 index 000000000..fde5d496c --- /dev/null +++ b/sonic_platform_base/sonic_xcvr/codes/public/cmisTargetFWUpgrade.py @@ -0,0 +1,8 @@ +from .cmis import CmisCodes + +class CmisTargetFWUpgradeCodes(CmisCodes): + TARGET_MODE = { + 0: 'local', + 1: 'remote-A', + 2: 'remote-B' + } diff --git a/sonic_platform_base/sonic_xcvr/mem_maps/credo/aec_800g.py b/sonic_platform_base/sonic_xcvr/mem_maps/credo/aec_800g.py index 697e47613..7e66a47df 100644 --- a/sonic_platform_base/sonic_xcvr/mem_maps/credo/aec_800g.py +++ b/sonic_platform_base/sonic_xcvr/mem_maps/credo/aec_800g.py @@ -4,25 +4,17 @@ Implementation of Credo AEC cable specific XcvrMemMap for CMIS Rev 5.0 """ -from ..public.cmis import CmisMemMap +from ..public.cmisTargetFWUpgrade import CmisTargetFWUpgradeMemMap from ...fields.xcvr_field import ( - CodeRegField, - DateField, - HexRegField, NumberRegField, - RegBitField, RegGroupField, - StringRegField, ) from ...fields import consts -class CmisAec800gMemMap(CmisMemMap): +class CmisAec800gMemMap(CmisTargetFWUpgradeMemMap): def __init__(self, codes): - super(CmisAec800gMemMap, self).__init__(codes) + super().__init__(codes) self.VENDOR_CUSTOM = RegGroupField(consts.VENDOR_CUSTOM, NumberRegField(consts.TARGET_MODE, self.getaddr(0x0, 64), ro=False) ) - - def getaddr(self, page, offset, page_size=128): - return page * page_size + offset diff --git a/sonic_platform_base/sonic_xcvr/mem_maps/public/cmisTargetFWUpgrade.py b/sonic_platform_base/sonic_xcvr/mem_maps/public/cmisTargetFWUpgrade.py new file mode 100644 index 000000000..3cb2bdd7a --- /dev/null +++ b/sonic_platform_base/sonic_xcvr/mem_maps/public/cmisTargetFWUpgrade.py @@ -0,0 +1,12 @@ +""" + cmisTargetFWUpgrade.py + + Implementation of memory map for CMIS based modules supporting firmware + upgrade of remote target from the local target itself. +""" + +from .cmis import CmisMemMap + +class CmisTargetFWUpgradeMemMap(CmisMemMap): + # Vendor agnostic implementation to be added here + pass