Skip to content

Commit dca6fa8

Browse files
nithind1988Paolo Abeni
authored andcommitted
octeontx2-af: Adjust Tx credits when MCS external bypass is disabled
When MCS external bypass is disabled, MCS returns additional 2 credits(32B) for every packet Tx'ed on LMAC. To account for these extra credits, NIX_AF_TX_LINKX_NORM_CREDIT.CC_MCS_CNT needs to be configured as otherwise NIX Tx credits would overflow and will never be returned to idle state credit count causing issues with credit control and MTU change. This patch fixes the same by configuring CC_MCS_CNT at probe time for MCS enabled SoC's Fixes: bd69476 ("octeontx2-af: cn10k: mcs: Install a default TCAM for normal traffic") Signed-off-by: Nithin Dabilpuram <[email protected]> Signed-off-by: Geetha sowjanya <[email protected]> Signed-off-by: Sunil Goutham <[email protected]> Reviewed-by: Wojciech Drewek <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 3142dbf commit dca6fa8

File tree

5 files changed

+25
-1
lines changed

5 files changed

+25
-1
lines changed

drivers/net/ethernet/marvell/octeontx2/af/mcs.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,17 @@ struct mcs *mcs_get_pdata(int mcs_id)
12191219
return NULL;
12201220
}
12211221

1222+
bool is_mcs_bypass(int mcs_id)
1223+
{
1224+
struct mcs *mcs_dev;
1225+
1226+
list_for_each_entry(mcs_dev, &mcs_list, mcs_list) {
1227+
if (mcs_dev->mcs_id == mcs_id)
1228+
return mcs_dev->bypass;
1229+
}
1230+
return true;
1231+
}
1232+
12221233
void mcs_set_port_cfg(struct mcs *mcs, struct mcs_port_cfg_set_req *req)
12231234
{
12241235
u64 val = 0;
@@ -1436,7 +1447,7 @@ static int mcs_x2p_calibration(struct mcs *mcs)
14361447
return err;
14371448
}
14381449

1439-
static void mcs_set_external_bypass(struct mcs *mcs, u8 bypass)
1450+
static void mcs_set_external_bypass(struct mcs *mcs, bool bypass)
14401451
{
14411452
u64 val;
14421453

@@ -1447,6 +1458,7 @@ static void mcs_set_external_bypass(struct mcs *mcs, u8 bypass)
14471458
else
14481459
val &= ~BIT_ULL(6);
14491460
mcs_reg_write(mcs, MCSX_MIL_GLOBAL, val);
1461+
mcs->bypass = bypass;
14501462
}
14511463

14521464
static void mcs_global_cfg(struct mcs *mcs)

drivers/net/ethernet/marvell/octeontx2/af/mcs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ struct mcs {
149149
u16 num_vec;
150150
void *rvu;
151151
u16 *tx_sa_active;
152+
bool bypass;
152153
};
153154

154155
struct mcs_ops {
@@ -206,6 +207,7 @@ void mcs_get_custom_tag_cfg(struct mcs *mcs, struct mcs_custom_tag_cfg_get_req *
206207
int mcs_alloc_ctrlpktrule(struct rsrc_bmap *rsrc, u16 *pf_map, u16 offset, u16 pcifunc);
207208
int mcs_free_ctrlpktrule(struct mcs *mcs, struct mcs_free_ctrl_pkt_rule_req *req);
208209
int mcs_ctrlpktrule_write(struct mcs *mcs, struct mcs_ctrl_pkt_rule_write_req *req);
210+
bool is_mcs_bypass(int mcs_id);
209211

210212
/* CN10K-B APIs */
211213
void cn10kb_mcs_set_hw_capabilities(struct mcs *mcs);

drivers/net/ethernet/marvell/octeontx2/af/rvu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ struct nix_hw {
345345
struct nix_txvlan txvlan;
346346
struct nix_ipolicer *ipolicer;
347347
u64 *tx_credits;
348+
u8 cc_mcs_cnt;
348349
};
349350

350351
/* RVU block's capabilities or functionality,

drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "rvu_reg.h"
1313
#include "rvu.h"
1414
#include "npc.h"
15+
#include "mcs.h"
1516
#include "cgx.h"
1617
#include "lmac_common.h"
1718
#include "rvu_npc_hash.h"
@@ -4389,6 +4390,12 @@ static void nix_link_config(struct rvu *rvu, int blkaddr,
43894390
SDP_HW_MAX_FRS << 16 | NIC_HW_MIN_FRS);
43904391
}
43914392

4393+
/* Get MCS external bypass status for CN10K-B */
4394+
if (mcs_get_blkcnt() == 1) {
4395+
/* Adjust for 2 credits when external bypass is disabled */
4396+
nix_hw->cc_mcs_cnt = is_mcs_bypass(0) ? 0 : 2;
4397+
}
4398+
43924399
/* Set credits for Tx links assuming max packet length allowed.
43934400
* This will be reconfigured based on MTU set for PF/VF.
43944401
*/
@@ -4412,6 +4419,7 @@ static void nix_link_config(struct rvu *rvu, int blkaddr,
44124419
tx_credits = (lmac_fifo_len - lmac_max_frs) / 16;
44134420
/* Enable credits and set credit pkt count to max allowed */
44144421
cfg = (tx_credits << 12) | (0x1FF << 2) | BIT_ULL(1);
4422+
cfg |= FIELD_PREP(NIX_AF_LINKX_MCS_CNT_MASK, nix_hw->cc_mcs_cnt);
44154423

44164424
link = iter + slink;
44174425
nix_hw->tx_credits[link] = tx_credits;

drivers/net/ethernet/marvell/octeontx2/af/rvu_reg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@
437437

438438
#define NIX_AF_LINKX_BASE_MASK GENMASK_ULL(11, 0)
439439
#define NIX_AF_LINKX_RANGE_MASK GENMASK_ULL(19, 16)
440+
#define NIX_AF_LINKX_MCS_CNT_MASK GENMASK_ULL(33, 32)
440441

441442
/* SSO */
442443
#define SSO_AF_CONST (0x1000)

0 commit comments

Comments
 (0)