Merge branch 'octeontx2-af-miscellaneous-fixes'
Geetha sowjanya says: ==================== octeontx2-af: miscellaneous fixes The series of patches fixes various issues related to mcs and NIX link registers. v3-v4: Used FIELD_PREP macro and proper data types. v2-v3: Fixed typo error in patch 4 commit message. v1-v2: Fixed author name for patch 5. Added Reviewed-by. ==================== Link: https://lore.kernel.org/r/20231205080434.27604-1-gakula@marvell.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
2078a341f5
@ -1945,7 +1945,7 @@ struct mcs_hw_info {
|
||||
u8 tcam_entries; /* RX/TX Tcam entries per mcs block */
|
||||
u8 secy_entries; /* RX/TX SECY entries per mcs block */
|
||||
u8 sc_entries; /* RX/TX SC CAM entries per mcs block */
|
||||
u8 sa_entries; /* PN table entries = SA entries */
|
||||
u16 sa_entries; /* PN table entries = SA entries */
|
||||
u64 rsvd[16];
|
||||
};
|
||||
|
||||
|
@ -117,7 +117,7 @@ void mcs_get_rx_secy_stats(struct mcs *mcs, struct mcs_secy_stats *stats, int id
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYTAGGEDCTLX(id);
|
||||
stats->pkt_tagged_ctl_cnt = mcs_reg_read(mcs, reg);
|
||||
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYUNTAGGEDORNOTAGX(id);
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYUNTAGGEDX(id);
|
||||
stats->pkt_untaged_cnt = mcs_reg_read(mcs, reg);
|
||||
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYCTLX(id);
|
||||
@ -215,7 +215,7 @@ void mcs_get_sc_stats(struct mcs *mcs, struct mcs_sc_stats *stats,
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSCNOTVALIDX(id);
|
||||
stats->pkt_notvalid_cnt = mcs_reg_read(mcs, reg);
|
||||
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSCUNCHECKEDOROKX(id);
|
||||
reg = MCSX_CSE_RX_MEM_SLAVE_INPKTSSCUNCHECKEDX(id);
|
||||
stats->pkt_unchecked_cnt = mcs_reg_read(mcs, reg);
|
||||
|
||||
if (mcs->hw->mcs_blks > 1) {
|
||||
@ -1219,6 +1219,17 @@ struct mcs *mcs_get_pdata(int mcs_id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool is_mcs_bypass(int mcs_id)
|
||||
{
|
||||
struct mcs *mcs_dev;
|
||||
|
||||
list_for_each_entry(mcs_dev, &mcs_list, mcs_list) {
|
||||
if (mcs_dev->mcs_id == mcs_id)
|
||||
return mcs_dev->bypass;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void mcs_set_port_cfg(struct mcs *mcs, struct mcs_port_cfg_set_req *req)
|
||||
{
|
||||
u64 val = 0;
|
||||
@ -1436,7 +1447,7 @@ static int mcs_x2p_calibration(struct mcs *mcs)
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mcs_set_external_bypass(struct mcs *mcs, u8 bypass)
|
||||
static void mcs_set_external_bypass(struct mcs *mcs, bool bypass)
|
||||
{
|
||||
u64 val;
|
||||
|
||||
@ -1447,6 +1458,7 @@ static void mcs_set_external_bypass(struct mcs *mcs, u8 bypass)
|
||||
else
|
||||
val &= ~BIT_ULL(6);
|
||||
mcs_reg_write(mcs, MCSX_MIL_GLOBAL, val);
|
||||
mcs->bypass = bypass;
|
||||
}
|
||||
|
||||
static void mcs_global_cfg(struct mcs *mcs)
|
||||
|
@ -149,6 +149,7 @@ struct mcs {
|
||||
u16 num_vec;
|
||||
void *rvu;
|
||||
u16 *tx_sa_active;
|
||||
bool bypass;
|
||||
};
|
||||
|
||||
struct mcs_ops {
|
||||
@ -206,6 +207,7 @@ void mcs_get_custom_tag_cfg(struct mcs *mcs, struct mcs_custom_tag_cfg_get_req *
|
||||
int mcs_alloc_ctrlpktrule(struct rsrc_bmap *rsrc, u16 *pf_map, u16 offset, u16 pcifunc);
|
||||
int mcs_free_ctrlpktrule(struct mcs *mcs, struct mcs_free_ctrl_pkt_rule_req *req);
|
||||
int mcs_ctrlpktrule_write(struct mcs *mcs, struct mcs_ctrl_pkt_rule_write_req *req);
|
||||
bool is_mcs_bypass(int mcs_id);
|
||||
|
||||
/* CN10K-B APIs */
|
||||
void cn10kb_mcs_set_hw_capabilities(struct mcs *mcs);
|
||||
|
@ -810,14 +810,37 @@
|
||||
offset = 0x9d8ull; \
|
||||
offset; })
|
||||
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSCUNCHECKEDX(a) ({ \
|
||||
u64 offset; \
|
||||
\
|
||||
offset = 0xee80ull; \
|
||||
if (mcs->hw->mcs_blks > 1) \
|
||||
offset = 0xe818ull; \
|
||||
offset += (a) * 0x8ull; \
|
||||
offset; })
|
||||
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYUNTAGGEDX(a) ({ \
|
||||
u64 offset; \
|
||||
\
|
||||
offset = 0xa680ull; \
|
||||
if (mcs->hw->mcs_blks > 1) \
|
||||
offset = 0xd018ull; \
|
||||
offset += (a) * 0x8ull; \
|
||||
offset; })
|
||||
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSCLATEORDELAYEDX(a) ({ \
|
||||
u64 offset; \
|
||||
\
|
||||
offset = 0xf680ull; \
|
||||
if (mcs->hw->mcs_blks > 1) \
|
||||
offset = 0xe018ull; \
|
||||
offset += (a) * 0x8ull; \
|
||||
offset; })
|
||||
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INOCTETSSCDECRYPTEDX(a) (0xe680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INOCTETSSCVALIDATEX(a) (0xde80ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYUNTAGGEDORNOTAGX(a) (0xa680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYNOTAGX(a) (0xd218 + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYUNTAGGEDX(a) (0xd018ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSCUNCHECKEDOROKX(a) (0xee80ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSECYCTLX(a) (0xb680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSCLATEORDELAYEDX(a) (0xf680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSAINVALIDX(a) (0x12680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSANOTUSINGSAERRORX(a) (0x15680ull + (a) * 0x8ull)
|
||||
#define MCSX_CSE_RX_MEM_SLAVE_INPKTSSANOTVALIDX(a) (0x13680ull + (a) * 0x8ull)
|
||||
|
@ -2631,6 +2631,9 @@ static void __rvu_flr_handler(struct rvu *rvu, u16 pcifunc)
|
||||
rvu_npc_free_mcam_entries(rvu, pcifunc, -1);
|
||||
rvu_mac_reset(rvu, pcifunc);
|
||||
|
||||
if (rvu->mcs_blk_cnt)
|
||||
rvu_mcs_flr_handler(rvu, pcifunc);
|
||||
|
||||
mutex_unlock(&rvu->flr_lock);
|
||||
}
|
||||
|
||||
|
@ -345,6 +345,7 @@ struct nix_hw {
|
||||
struct nix_txvlan txvlan;
|
||||
struct nix_ipolicer *ipolicer;
|
||||
u64 *tx_credits;
|
||||
u8 cc_mcs_cnt;
|
||||
};
|
||||
|
||||
/* RVU block's capabilities or functionality,
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "rvu_reg.h"
|
||||
#include "rvu.h"
|
||||
#include "npc.h"
|
||||
#include "mcs.h"
|
||||
#include "cgx.h"
|
||||
#include "lmac_common.h"
|
||||
#include "rvu_npc_hash.h"
|
||||
@ -4389,6 +4390,12 @@ static void nix_link_config(struct rvu *rvu, int blkaddr,
|
||||
SDP_HW_MAX_FRS << 16 | NIC_HW_MIN_FRS);
|
||||
}
|
||||
|
||||
/* Get MCS external bypass status for CN10K-B */
|
||||
if (mcs_get_blkcnt() == 1) {
|
||||
/* Adjust for 2 credits when external bypass is disabled */
|
||||
nix_hw->cc_mcs_cnt = is_mcs_bypass(0) ? 0 : 2;
|
||||
}
|
||||
|
||||
/* Set credits for Tx links assuming max packet length allowed.
|
||||
* This will be reconfigured based on MTU set for PF/VF.
|
||||
*/
|
||||
@ -4412,6 +4419,7 @@ static void nix_link_config(struct rvu *rvu, int blkaddr,
|
||||
tx_credits = (lmac_fifo_len - lmac_max_frs) / 16;
|
||||
/* Enable credits and set credit pkt count to max allowed */
|
||||
cfg = (tx_credits << 12) | (0x1FF << 2) | BIT_ULL(1);
|
||||
cfg |= FIELD_PREP(NIX_AF_LINKX_MCS_CNT_MASK, nix_hw->cc_mcs_cnt);
|
||||
|
||||
link = iter + slink;
|
||||
nix_hw->tx_credits[link] = tx_credits;
|
||||
|
@ -31,8 +31,8 @@ static struct hw_reg_map txsch_reg_map[NIX_TXSCH_LVL_CNT] = {
|
||||
{NIX_TXSCH_LVL_TL4, 3, 0xFFFF, {{0x0B00, 0x0B08}, {0x0B10, 0x0B18},
|
||||
{0x1200, 0x12E0} } },
|
||||
{NIX_TXSCH_LVL_TL3, 4, 0xFFFF, {{0x1000, 0x10E0}, {0x1600, 0x1608},
|
||||
{0x1610, 0x1618}, {0x1700, 0x17B0} } },
|
||||
{NIX_TXSCH_LVL_TL2, 2, 0xFFFF, {{0x0E00, 0x0EE0}, {0x1700, 0x17B0} } },
|
||||
{0x1610, 0x1618}, {0x1700, 0x17C8} } },
|
||||
{NIX_TXSCH_LVL_TL2, 2, 0xFFFF, {{0x0E00, 0x0EE0}, {0x1700, 0x17C8} } },
|
||||
{NIX_TXSCH_LVL_TL1, 1, 0xFFFF, {{0x0C00, 0x0D98} } },
|
||||
};
|
||||
|
||||
|
@ -437,6 +437,7 @@
|
||||
|
||||
#define NIX_AF_LINKX_BASE_MASK GENMASK_ULL(11, 0)
|
||||
#define NIX_AF_LINKX_RANGE_MASK GENMASK_ULL(19, 16)
|
||||
#define NIX_AF_LINKX_MCS_CNT_MASK GENMASK_ULL(33, 32)
|
||||
|
||||
/* SSO */
|
||||
#define SSO_AF_CONST (0x1000)
|
||||
|
Loading…
Reference in New Issue
Block a user