From 6b480fa232c80a38964670b65fef809e477c2091 Mon Sep 17 00:00:00 2001 From: duanchunming Date: Tue, 4 Aug 2026 16:05:07 +0800 Subject: [PATCH] add cpo bailly cmis firmware upgrade api Signed-off-by: duanchunming --- .../sonic_xcvr/api/broadcom/bailly.py | 20 +++++++++++++++++++ .../sonic_xcvr/cdb/broadcom/bailly.py | 18 +++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 sonic_platform_base/sonic_xcvr/cdb/broadcom/bailly.py diff --git a/sonic_platform_base/sonic_xcvr/api/broadcom/bailly.py b/sonic_platform_base/sonic_xcvr/api/broadcom/bailly.py index cb7efb399..06f73a880 100644 --- a/sonic_platform_base/sonic_xcvr/api/broadcom/bailly.py +++ b/sonic_platform_base/sonic_xcvr/api/broadcom/bailly.py @@ -5,6 +5,7 @@ """ from ..public.cmis import CmisApi from ...fields.broadcom import bailly +from ...cdb.broadcom.bailly import BaillyCdbFwHandler class BaillyApi(CmisApi): RLM_THRESHOLD_FIELDS = { @@ -376,3 +377,22 @@ def get_laser_temperature(self): Bailly has no laser temperature acquisition register, return none. """ return None + + # Override cdb_fw_hdlr property from parent CmisCdbFw + @property + def cdb_fw_hdlr(self): + if not self._init_cdb_fw_handler: + return None + if self._cdb_fw_hdlr is None: + # Instantiate vendor-specific BaillyCdbFwHandler instead of base CdbFwHandler + self._cdb_fw_hdlr = BaillyCdbFwHandler( + self.xcvr_eeprom.reader, + self.xcvr_eeprom.writer, + self._cdb_mem_map, + ) + return self._cdb_fw_hdlr + # Override firmware upgreade function + def module_fw_upgrade(self, imagepath, timeout=5): + #Todo parse firmware hearder + # load/run/commit + pass \ No newline at end of file diff --git a/sonic_platform_base/sonic_xcvr/cdb/broadcom/bailly.py b/sonic_platform_base/sonic_xcvr/cdb/broadcom/bailly.py new file mode 100644 index 000000000..e53adcc5a --- /dev/null +++ b/sonic_platform_base/sonic_xcvr/cdb/broadcom/bailly.py @@ -0,0 +1,18 @@ +from ...cdb.cdb_fw import CdbFwHandler + +# Vendor custom CDB handler inheriting base community handler +class BaillyCdbFwHandler(CdbFwHandler): + def __init__(self, reader, writer, cdb_map): + super().__init__(reader, writer, cdb_map) + + # Reuse parent implementation for consistent opcodes (no override needed) + # Override single opcode method only if Bailly hardware has different logic + def write_epl_block(self, address, data): + # Example: OE firmware strip 4-byte header, vendor custom logic + stripped = data[4:] + return super().write_epl_block(address, stripped) + # Override start download to inject CPO partition ID (0x0101) + def start_fw_download(self, filepath): + # Inject CPO partition info before parent download initialization + # Todo + return super().start_fw_download(filepath) \ No newline at end of file