Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

code fix for copper cable modules with flat memory #235

Merged
merged 17 commits into from
Dec 1, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
357 changes: 190 additions & 167 deletions sonic_platform_base/sonic_xcvr/api/public/cmis.py

Large diffs are not rendered by default.

28 changes: 14 additions & 14 deletions sonic_platform_base/sonic_xcvr/codes/public/sff8024.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,26 +345,26 @@ class Sff8024(XcvrCodes):
}

PASSIVE_COPPER_MEDIA_INTERFACE = {
'00': 'Undefined',
'01': 'Copper cable',
'02': 'Passive Loopback module'
0: 'Undefined',
1: 'Copper cable',
2: 'Passive Loopback module'
}

ACTIVE_CABLE_MEDIA_INTERFACE = {
'00': 'Undefined',
'01': 'Active Cable assembly with BER < 10^-12',
'02': 'Active Cable assembly with BER < 5x10^-5',
'03': 'Active Cable assembly with BER < 2.6x10^-4',
'04': 'Active Cable assembly with BER < 10^-6',
'bf': 'Active Loopback module'
0: 'Undefined',
1: 'Active Cable assembly with BER < 10^-12',
2: 'Active Cable assembly with BER < 5x10^-5',
3: 'Active Cable assembly with BER < 2.6x10^-4',
4: 'Active Cable assembly with BER < 10^-6',
191: 'Active Loopback module'
}

BASE_T_MEDIA_INTERFACE = {
'00': 'Undefined',
'01': '1000BASE-T (Clause 40)',
'02': '2.5GBASE-T (Clause 126)',
'03': '5GBASE-T (Clause 126)',
'04': '10GBASE-T (Clause 55)'
0: 'Undefined',
1: '1000BASE-T (Clause 40)',
2: '2.5GBASE-T (Clause 126)',
3: '5GBASE-T (Clause 126)',
4: '10GBASE-T (Clause 55)'
}

# TODO: Add other codes
13 changes: 12 additions & 1 deletion sonic_platform_base/sonic_xcvr/fields/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
MODULE_MONITORS_FIELD = "Module Monitors"

RX_LOS_FIELD = "RxLOS"
RX_LOS_SUPPORT = "RxLOSSupported"
RX_POWER_FIELD = "RxPower"
RX_POWER_SUPPORT_FIELD = "RxPowerSupported"
RX_POWER_THRESHOLDS_FIELD = "RxPowerThresholds"
RX_POWER_HIGH_ALARM_FIELD = "RxPowerHighAlarm"
RX_POWER_LOW_ALARM_FIELD = "RxPowerLowAlarm"
Expand All @@ -41,6 +43,8 @@
THRESHOLDS_FIELD = "Thresholds"

TX_BIAS_FIELD = "TxBias"
TX_BIAS_SUPPORT_FIELD = "TxBiasSupported"
TX_BIAS_SCALE = "TxBiasScalingFactor"
TX_BIAS_THRESHOLDS_FIELD = "TxBiasThresholds"
TX_BIAS_HIGH_ALARM_FIELD = "TxHighAlarm"
TX_BIAS_LOW_ALARM_FIELD = "TxLowAlarm"
Expand Down Expand Up @@ -238,7 +242,9 @@
TX_OUTPUT_STATUS = "TxOutputStatus"
RX_OUTPUT_STATUS = "RxOutputStatus"
TX_LOS_FIELD = "TxLOS"
TX_LOS_SUPPORT_FIELD = "TxLOSSupported"
TX_CDR_LOL = "TxCDRLOL"
TX_CDR_LOL_SUPPORT_FIELD = "TxCDRLOLSupported"
TX_POWER_HIGH_ALARM_FLAG = "TxPowerHighAlarmFlag"
TX_POWER_LOW_ALARM_FLAG = "TxPowerLowAlarmFlag"
TX_POWER_HIGH_WARN_FLAG = "TxPowerHighWarnFlag"
Expand All @@ -253,6 +259,7 @@
RX_POWER_LOW_WARN_FLAG = "RxPowerLowWarnFlag"

RX_CDR_LOL = "RxCDRLOL"
RX_CDR_LOL_SUPPORT_FIELD = "RxCDRLOLSupported"
CONFIG_LANE_STATUS = "ConfigStatusLane"
DPINIT_PENDING = "DPInitPending"
TUNING_IN_PROGRESS = "TxTuningInProgress"
Expand All @@ -265,7 +272,10 @@

CTRLS_ADVT_FIELD = "Supported Controls Advertisement"
FLAGS_ADVT_FIELD = "Supported Flags Advertisement"

PAGE_SUPPORT_ADVT_FIELD = "Supported Pages Advertisement"
TX_FLAGS_ADVT_FIELD = "Supported TX Flags Advertisement"
RX_FLAGS_ADVT_FIELD = "Supported RX Flags Advertisement"
LANE_MON_ADVT_FIELD = "Supported Lane Monitor Advertisement"
LANE_DATAPATH_CTRL_FIELD = "Lane Control and Data Path Control"
LANE_DATAPATH_STATUS_FIELD = "Lane Status and Data Path Status"
LEN_MULT_FIELD = "LengthMultiplier"
Expand All @@ -289,6 +299,7 @@
## Media Lane Link Performance Monitoring
# PM
TRANS_PM_FIELD = "TransceiverPm"
VDM_SUPPORTED = "VdmSupported"
VDM_SUPPORTED_PAGE = "VdmSupportedPage"
VDM_CONTROL = "VdmControl"
MEDIA_LANE_FEC_PM = "Media Lane FEC Performance Monitoring"
Expand Down
22 changes: 19 additions & 3 deletions sonic_platform_base/sonic_xcvr/mem_maps/public/cmis.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,30 @@ def __init__(self, codes):
)

self.MODULE_CHAR_ADVT = RegGroupField(consts.MODULE_CHAR_ADVT_FIELD,
NumberRegField(consts.PAGE_SUPPORT_ADVT_FIELD, self.getaddr(0x1, 142),
RegBitField(consts.VDM_SUPPORTED, 6),
),
NumberRegField(consts.CTRLS_ADVT_FIELD, self.getaddr(0x1, 155),
RegBitField(consts.TX_DISABLE_SUPPORT_FIELD, 1),
size=2, format="<H"
),
NumberRegField(consts.FLAGS_ADVT_FIELD, self.getaddr(0x1, 157),
NumberRegField(consts.TX_FLAGS_ADVT_FIELD, self.getaddr(0x1, 157),
RegBitField(consts.TX_FAULT_SUPPORT_FIELD, 0),
size=2, format="<H"
)
RegBitField(consts.TX_LOS_SUPPORT_FIELD, 1),
RegBitField(consts.TX_CDR_LOL_SUPPORT_FIELD, 2),
),
NumberRegField(consts.RX_FLAGS_ADVT_FIELD, self.getaddr(0x1, 158),
RegBitField(consts.RX_LOS_SUPPORT, 1),
RegBitField(consts.RX_CDR_LOL_SUPPORT_FIELD, 2),
),
NumberRegField(consts.LANE_MON_ADVT_FIELD, self.getaddr(0x1, 160),
RegBitField(consts.RX_POWER_SUPPORT_FIELD, 2),
RegBitField(consts.TX_POWER_SUPPORT_FIELD, 1),
RegBitField(consts.TX_BIAS_SUPPORT_FIELD, 0),
),
NumberRegField(consts.TX_BIAS_SCALE, self.getaddr(0x1, 160),
*(RegBitField("Bit%d" % (bit), bit) for bit in range (3, 5))
),
)

self.THRESHOLDS = RegGroupField(consts.THRESHOLDS_FIELD,
Expand Down
16 changes: 16 additions & 0 deletions sonic_platform_base/sonic_xcvr/sfp_optoe_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,22 @@ def get_transceiver_threshold_info(self):
api = self.get_xcvr_api()
return api.get_transceiver_threshold_info() if api is not None else None

def get_transceiver_status(self):
api = self.get_xcvr_api()
return api.get_transceiver_status() if api is not None else None

def get_transceiver_loopback(self):
api = self.get_xcvr_api()
return api.get_transceiver_loopback() if api is not None else None

def is_coherent_module(self):
api = self.get_xcvr_api()
return api.is_coherent_module() if api is not None else None

def get_transceiver_pm(self):
api = self.get_xcvr_api()
return api.get_transceiver_pm() if api is not None else None

def get_rx_los(self):
api = self.get_xcvr_api()
if api is not None:
Expand Down
Loading