common/cnxk: improve MCAM entries management
[dpdk.git] / drivers / common / cnxk / roc_nix.c
index 0621976..64156ce 100644 (file)
@@ -113,10 +113,13 @@ roc_nix_max_pkt_len(struct roc_nix *roc_nix)
 {
        struct nix *nix = roc_nix_to_nix_priv(roc_nix);
 
+       if (roc_nix_is_sdp(roc_nix))
+               return NIX_SDP_MAX_HW_FRS;
+
        if (roc_model_is_cn9k())
                return NIX_CN9K_MAX_HW_FRS;
 
-       if (nix->lbk_link || roc_nix_is_sdp(roc_nix))
+       if (nix->lbk_link)
                return NIX_LBK_MAX_HW_FRS;
 
        return NIX_RPM_MAX_HW_FRS;
@@ -143,10 +146,14 @@ roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, uint32_t nb_txq,
        req->rss_sz = nix->reta_sz;
        req->rss_grps = ROC_NIX_RSS_GRPS;
        req->npa_func = idev_npa_pffunc_get();
+       req->sso_func = idev_sso_pffunc_get();
        req->rx_cfg = rx_cfg;
+       if (roc_nix_is_lbk(roc_nix) && roc_nix->enable_loop &&
+           roc_model_is_cn98xx())
+               req->flags = NIX_LF_LBK_BLK_SEL;
 
        if (!roc_nix->rss_tag_as_xor)
-               req->flags = NIX_LF_RSS_TAG_LSB_AS_ADDER;
+               req->flags |= NIX_LF_RSS_TAG_LSB_AS_ADDER;
 
        rc = mbox_process_msg(mbox, (void *)&rsp);
        if (rc)
@@ -177,6 +184,8 @@ roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, uint32_t nb_txq,
        nix->sqs = plt_zmalloc(sizeof(struct roc_nix_sq *) * nb_txq, 0);
        if (!nix->sqs)
                return -ENOMEM;
+
+       nix_tel_node_add(roc_nix);
 fail:
        return rc;
 }
@@ -299,7 +308,7 @@ sdp_lbk_id_update(struct plt_pci_device *pci_dev, struct nix *nix)
        }
 }
 
-static inline uint64_t
+uint64_t
 nix_get_blkaddr(struct dev *dev)
 {
        uint64_t reg;
@@ -396,16 +405,23 @@ skip_dev_init:
        if (rc)
                goto lf_detach;
 
+       rc = nix_tm_conf_init(roc_nix);
+       if (rc)
+               goto unregister_irqs;
+
        /* Get NIX HW info */
        roc_nix_get_hw_info(roc_nix);
        nix->dev.drv_inited = true;
 
        return 0;
+unregister_irqs:
+       nix_unregister_irqs(nix);
 lf_detach:
        nix_lf_detach(nix);
 dev_fini:
        rc |= dev_fini(dev, pci_dev);
 fail:
+       nix_tel_node_del(roc_nix);
        return rc;
 }
 
@@ -421,6 +437,7 @@ roc_nix_dev_fini(struct roc_nix *roc_nix)
        if (!nix->dev.drv_inited)
                goto fini;
 
+       nix_tm_conf_fini(roc_nix);
        nix_unregister_irqs(nix);
 
        rc = nix_lf_detach(nix);