On Sat, Sep 18, 2021 at 8:02 PM <skotesh...@marvell.com> wrote: > > From: Satha Rao <skotesh...@marvell.com> > > Added new API to flush all SMQs related nix interface
nix-> NIX Add more details in the commit log for meaning flush. Change the subject to : common/cnxk: support SMQ flush > > Signed-off-by: Satha Rao <skotesh...@marvell.com> > --- > drivers/common/cnxk/hw/nix.h | 6 +++++ > drivers/common/cnxk/roc_nix.h | 1 + > drivers/common/cnxk/roc_nix_tm_ops.c | 50 > ++++++++++++++++++++++++++++++++++++ > drivers/common/cnxk/version.map | 1 + > 4 files changed, 58 insertions(+) > > diff --git a/drivers/common/cnxk/hw/nix.h b/drivers/common/cnxk/hw/nix.h > index a0ffd25..bc908c2 100644 > --- a/drivers/common/cnxk/hw/nix.h > +++ b/drivers/common/cnxk/hw/nix.h > @@ -2189,4 +2189,10 @@ struct nix_lso_format { > #define NIX_LSO_FORMAT_IDX_TSOV4 0 > #define NIX_LSO_FORMAT_IDX_TSOV6 1 > > +/* [CN10K, .) */ > +#define NIX_SENDSTATALG_MASK 0x7 > +#define NIX_SENDSTATALG_SEL_MASK 0x8 > +#define NIX_SENDSTAT_IOFFSET_MASK 0xFFF > +#define NIX_SENDSTAT_OOFFSET_MASK 0xFFF > + > #endif /* __NIX_HW_H__ */ > diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h > index b0e6fab..ac7bd7e 100644 > --- a/drivers/common/cnxk/roc_nix.h > +++ b/drivers/common/cnxk/roc_nix.h > @@ -468,6 +468,7 @@ int __roc_api roc_nix_tm_rsrc_count(struct roc_nix > *roc_nix, > int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix, > uint32_t node_id, char *buf, > size_t buflen); > +int __roc_api roc_nix_smq_flush(struct roc_nix *roc_nix); > > /* MAC */ > int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool > start); > diff --git a/drivers/common/cnxk/roc_nix_tm_ops.c > b/drivers/common/cnxk/roc_nix_tm_ops.c > index ed244d4..d9741f5 100644 > --- a/drivers/common/cnxk/roc_nix_tm_ops.c > +++ b/drivers/common/cnxk/roc_nix_tm_ops.c > @@ -311,6 +311,56 @@ > } > > int > +roc_nix_smq_flush(struct roc_nix *roc_nix) > +{ > + struct nix *nix = roc_nix_to_nix_priv(roc_nix); > + struct nix_tm_node_list *list; > + enum roc_nix_tm_tree tree; > + struct nix_tm_node *node; > + int rc = 0; > + > + if (!(nix->tm_flags & NIX_TM_HIERARCHY_ENA)) > + return 0; > + > + tree = nix->tm_tree; > + list = nix_tm_node_list(nix, tree); > + > + /* XOFF & Flush all SMQ's. HRM mandates > + * all SQ's empty before SMQ flush is issued. > + */ > + TAILQ_FOREACH(node, list, node) { > + if (node->hw_lvl != NIX_TXSCH_LVL_SMQ) > + continue; > + if (!(node->flags & NIX_TM_NODE_HWRES)) > + continue; > + > + rc = nix_tm_smq_xoff(nix, node, true); > + if (rc) { > + plt_err("Failed to enable smq %u, rc=%d", node->hw_id, > + rc); > + goto exit; > + } > + } > + > + /* XON all SMQ's */ > + TAILQ_FOREACH(node, list, node) { > + if (node->hw_lvl != NIX_TXSCH_LVL_SMQ) > + continue; > + if (!(node->flags & NIX_TM_NODE_HWRES)) > + continue; > + > + rc = nix_tm_smq_xoff(nix, node, false); > + if (rc) { > + plt_err("Failed to enable smq %u, rc=%d", node->hw_id, > + rc); > + goto exit; > + } > + } > +exit: > + return rc; > +} > + > +int > roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix) > { > struct nix *nix = roc_nix_to_nix_priv(roc_nix); > diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map > index 5df2e56..388f938 100644 > --- a/drivers/common/cnxk/version.map > +++ b/drivers/common/cnxk/version.map > @@ -170,6 +170,7 @@ INTERNAL { > roc_nix_xstats_names_get; > roc_nix_switch_hdr_set; > roc_nix_eeprom_info_get; > + roc_nix_smq_flush; > roc_nix_tm_dump; > roc_nix_tm_fini; > roc_nix_tm_free_resources; > -- > 1.8.3.1 >