-
Notifications
You must be signed in to change notification settings - Fork 530
SAI LPO attributes #2178
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
base: master
Are you sure you want to change the base?
SAI LPO attributes #2178
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
|
||
SAI - Linear Pluggable Optics (LPO) support | ||
============================================ | ||
|
||
| Title | SAI LPO attributes | | ||
|-------------|----------------------------| | ||
| Authors | Pulla Rao, Broadcom Inc | | ||
| Status | In Review | | ||
| Type | Standards Track | | ||
| Created | 06/09/2025 | | ||
| SAI-Version | 1.16 | | ||
|
||
### 1. Overview | ||
--------------- | ||
LPO optics are designed specifically to meet the data center requirements for low power consumption, low cost, low latency, compact form factor, reach up to 500meters. | ||
|
||
This document defines the port serdes attributes used to tune the Linear Pluggable Optics (LPO). At a port level, the attributes define the non-linear compensation percentage values, reach mode configuration, Error Correcting Decoder (ECD) state and Tx/Rx polarity settings. | ||
|
||
### 2. Specification | ||
-------------------- | ||
|
||
#### 2.1 Changes to saiport.h | ||
----------------------------- | ||
/** | ||
* @brief Serdes reach mode | ||
*/ | ||
typedef enum _sai_port_serdes_reach_mode_t | ||
{ | ||
/** Normal Reach */ | ||
SAI_PORT_SERDES_REACH_MODE_NR, | ||
/** Extended Reach */ | ||
SAI_PORT_SERDES_REACH_MODE_ER | ||
|
||
} sai_port_serdes_reach_mode_t; | ||
|
||
/** | ||
* @brief Serdes Rx Error Correcting Decoder/Maximum Likelihood | ||
* Sequence Estimation control state | ||
*/ | ||
typedef enum _sai_port_serdes_rx_ecd_mlse_state_t | ||
{ | ||
/** Disable */ | ||
SAI_PORT_SERDES_RX_ECD_MLSE_STATE_DISABLE, | ||
/** Enable */ | ||
SAI_PORT_SERDES_RX_ECD_MLSE_STATE_ENABLE | ||
|
||
} sai_port_serdes_rx_ecd_mlse_state_t; | ||
|
||
/** | ||
* @brief Serdes polarity setting value | ||
*/ | ||
typedef enum _sai_port_serdes_polarity_t | ||
{ | ||
/** Normal polarity */ | ||
SAI_PORT_SERDES_POLARITY_NORMAL, | ||
/** Inverted polarity */ | ||
SAI_PORT_SERDES_POLARITY_INVERTED | ||
|
||
} sai_port_serdes_polarity_t; | ||
|
||
|
||
The following attributes are added to `sai_port_serdes_attr_t`: | ||
|
||
/** | ||
* @brief Port serdes Tx upper eye non linear compensation percentage value | ||
* | ||
* List of port serdes Tx upper eye non linear compensation percentage value | ||
* The values are of type sai_u32_list_t where the count is number of lanes | ||
* in a port and the list specifies list of values to be applied to each | ||
* lane. | ||
* | ||
* @type sai_u32_list_t | ||
* @flags CREATE_AND_SET | ||
* @default internal | ||
*/ | ||
SAI_PORT_SERDES_ATTR_TX_NLC_PERCENTAGE, | ||
|
||
/** | ||
* @brief Port serdes Tx lower eye non linear compensation percentage value | ||
* | ||
* List of port serdes Tx lower eye non linear compensation percentage value | ||
* The values are of type sai_u32_list_t where the count is number of lanes | ||
* in a port and the list specifies list of values to be applied to each | ||
* lane. | ||
* | ||
* @type sai_u32_list_t | ||
* @flags CREATE_AND_SET | ||
* @default internal | ||
*/ | ||
SAI_PORT_SERDES_ATTR_TX_NLC_LOWER_EYE_PERCENTAGE, | ||
|
||
/** | ||
* @brief Port serdes reach mode control | ||
* | ||
* To select per port NR/ER mode for a port with back plane media type. | ||
* | ||
* @type sai_s32_list_t sai_port_serdes_reach_mode_t | ||
* @flags CREATE_AND_SET | ||
* @default empty | ||
*/ | ||
SAI_PORT_SERDES_ATTR_REACH_MODE, | ||
|
||
/** | ||
* @brief Port serdes Rx Error Correcting Decoder/Maximum Likelihood | ||
* Sequence Estimation control | ||
* | ||
* To enable/disable Rx ECD for a port with back plane media type. | ||
* | ||
* @type sai_s32_list_t sai_port_serdes_rx_ecd_mlse_state_t | ||
* @flags CREATE_AND_SET | ||
* @default empty | ||
*/ | ||
SAI_PORT_SERDES_ATTR_RX_ECD_MLSE_STATE, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please also double-check if it is a standard attribute. See my comment above There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @eddyk-nvidia MLSE is a known technique similar to existing channel equalization techniques like DFE, FFE, CTLE. Though here its being introduced in the LPO context, its not a mandatory attribute as per the LPO MSA. Its upto the user if they want to derive the extra BER improved performance that comes with MLSE being enabled. For example, NLC attribute introduced here is also optional and not mandatory but helps to remove the non linearity based on your application specific channel characteristics. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @eddyk-nvidia All these attributes are optional. Could you please provide your feedback. |
||
|
||
/** | ||
* @brief Port serdes control for inverted TX polarity setting | ||
* | ||
* TX polarity setting value | ||
* The values are of type sai_s32_list_t where the count is number of lanes in | ||
* a port and the list specifies list of values to be applied to each lane. | ||
* This extension is added to support both create and set operations. | ||
* | ||
* @type sai_s32_list_t sai_port_serdes_polarity_t | ||
* @flags CREATE_AND_SET | ||
* @default internal | ||
*/ | ||
SAI_PORT_SERDES_ATTR_TX_POLARITY, | ||
|
||
/** | ||
* @brief Port serdes control for inverted RX polarity setting | ||
* | ||
* RX polarity setting value | ||
* The values are of type sai_s32_list_t where the count is number of lanes in | ||
* a port and the list specifies list of values to be applied to each lane. | ||
* This extension is added to support both create and set operations. | ||
* | ||
* @type sai_s32_list_t sai_port_serdes_polarity_t | ||
* @flags CREATE_AND_SET | ||
* @default internal | ||
*/ | ||
SAI_PORT_SERDES_ATTR_RX_POLARITY, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please check if this attribute is a standard one, defined in the spec and can be beneficial for all vendors. If it is vendor-specific please consider using the SAI "custom" infrastructure (#2122)