Keep track of per module DPInitPending state software to work around transceiver firmware issues #696
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Certain transceiver firmwares clear DPInitPending on other datapaths when setting it for currently transitioning datapaths. This requires keeping a track of DPInitPending state in software so that the config loop does not fail when two datapaths in a module are being configured in an interleaved manner.
Description
Software state is maintained for the datapaths undergoing initialization and a second data path on a module is not configured when a different datapath is undergoing initialization. This serializes the initialization and does not cause the firmware to overwrite bits in the
DpInitPendingregister.When a datapath enters the
CMIS_INSERTEDorCMIS_FAILEDstate or if the datapath is configured successfully, the software state maintained is cleared to allow other datapaths on the transceiver to be initialized.Motivation and Context
During reboot + link up testing, certain transceivers entered CMIS failed state due to
EthernetX: datapath init not pending. Upon investigation it was found that affected transceivers' firmware clear a priorDpInitPendingwhen it needs to be set on a different datapath leading toxcvrdmissing theDpInitPendingcheck and setting state to failed.How Has This Been Tested?
Successfully ran 500+ reboot + link up tests with transceivers initializing every single time. Previously, links would fail to come up within 10 iterations.
Additional Information (Optional)