mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 02:24:32 +01:00
octeontx2-af: Workaround SQM/PSE stalls by disabling sticky
NIX SQ manager sticky mode is known to cause stalls when multiple SQs share an SMQ and transmit concurrently. Additionally, PSE may deadlock on transitions between sticky and non-sticky transmissions. There is also a credit drop issue observed when certain condition clocks are gated. work around these hardware errata by: - Disabling SQM sticky operation: - Clear TM6 (bit 15) - Clear TM11 (bit 14) - Disabling sticky → non-sticky transition path that can deadlock PSE: - Clear TM5 (bit 23) - Preventing credit drops by keeping the control-flow clock enabled: - Set TM9 (bit 21) These changes are applied via NIX_AF_SQM_DBG_CTL_STATUS. With this configuration the SQM/PSE maintain forward progress under load without credit loss, at the cost of disabling sticky optimizations. Signed-off-by: Geetha sowjanya <gakula@marvell.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260127125147.1642-1-gakula@marvell.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
7b85c77585
commit
70e9a5760a
1 changed files with 9 additions and 3 deletions
|
|
@ -4938,12 +4938,18 @@ static int rvu_nix_block_init(struct rvu *rvu, struct nix_hw *nix_hw)
|
|||
/* Set chan/link to backpressure TL3 instead of TL2 */
|
||||
rvu_write64(rvu, blkaddr, NIX_AF_PSE_CHANNEL_LEVEL, 0x01);
|
||||
|
||||
/* Disable SQ manager's sticky mode operation (set TM6 = 0)
|
||||
/* Disable SQ manager's sticky mode operation (set TM6 = 0, TM11 = 0)
|
||||
* This sticky mode is known to cause SQ stalls when multiple
|
||||
* SQs are mapped to same SMQ and transmitting pkts at a time.
|
||||
* SQs are mapped to same SMQ and transmitting pkts simultaneously.
|
||||
* NIX PSE may deadlock when there are any sticky to non-sticky
|
||||
* transmission. Hence disable it (TM5 = 0).
|
||||
*/
|
||||
cfg = rvu_read64(rvu, blkaddr, NIX_AF_SQM_DBG_CTL_STATUS);
|
||||
cfg &= ~BIT_ULL(15);
|
||||
cfg &= ~(BIT_ULL(15) | BIT_ULL(14) | BIT_ULL(23));
|
||||
/* NIX may drop credits when condition clocks are turned off.
|
||||
* Hence enable control flow clk (set TM9 = 1).
|
||||
*/
|
||||
cfg |= BIT_ULL(21);
|
||||
rvu_write64(rvu, blkaddr, NIX_AF_SQM_DBG_CTL_STATUS, cfg);
|
||||
|
||||
ltdefs = rvu->kpu.lt_def;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue