From: Rakesh Kudurumalla <[email protected]> Initialize inline outbound CPT LF for CPT CQ configurations.
Signed-off-by: Rakesh Kudurumalla <[email protected]> --- Changes in v2: No change. drivers/common/cnxk/roc_nix_inl.c | 42 +++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c index 917c2c669a..86d571c6e2 100644 --- a/drivers/common/cnxk/roc_nix_inl.c +++ b/drivers/common/cnxk/roc_nix_inl.c @@ -1573,8 +1573,18 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix) lf->msixoff = nix->cpt_msixoff[i]; lf->pci_dev = nix->pci_dev; + if (roc_feature_nix_has_cpt_cq_support()) { + if (inl_dev && inl_dev->cpt_cq_ena) { + lf->dq_ack_ena = true; + lf->cpt_cq_ena = true; + lf->cq_entry_size = 0; + lf->cq_all = 0; + lf->cq_size = lf->nb_desc; + } + } + /* Setup CPT LF instruction queue */ - rc = cpt_lf_init(lf, false); + rc = cpt_lf_init(lf, lf->cpt_cq_ena); if (rc) { plt_err("Failed to initialize CPT LF, rc=%d", rc); goto lf_fini; @@ -1591,6 +1601,13 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix) /* Enable IQ */ roc_cpt_iq_enable(lf); + /* Enable CQ */ + if (lf->cpt_cq_ena) { + rc = cpt_lf_register_irqs(lf, cpt_lf_misc_irq, nix_inl_cpt_done_irq); + if (rc) + goto lf_fini; + roc_cpt_cq_enable(lf); + } } if (!roc_nix->ipsec_out_max_sa) @@ -1635,6 +1652,9 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix) nix->outb_se_ring_base = roc_nix->port_id * ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS; + /* Fetch engine capabilities */ + nix_inl_eng_caps_get(nix); + if (inl_dev == NULL || !inl_dev->set_soft_exp_poll) { nix->outb_se_ring_cnt = 0; return 0; @@ -1658,13 +1678,15 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix) } } - /* Fetch engine capabilities */ - nix_inl_eng_caps_get(nix); return 0; lf_fini: - for (j = i - 1; j >= 0; j--) - cpt_lf_fini(&lf_base[j], false); + for (j = i - 1; j >= 0; j--) { + lf = &lf_base[j]; + cpt_lf_fini(lf, lf->cpt_cq_ena); + if (lf->cpt_cq_ena) + cpt_lf_unregister_irqs(lf, cpt_lf_misc_irq, nix_inl_cpt_done_irq); + } plt_free(lf_base); lf_free: rc |= cpt_lfs_free(dev); @@ -1681,6 +1703,7 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix) struct idev_cfg *idev = idev_get_cfg(); struct dev *dev = &nix->dev; struct nix_inl_dev *inl_dev; + struct roc_cpt_lf *lf; uint64_t *ring_base; int i, rc, ret = 0; @@ -1690,9 +1713,12 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix) nix->inl_outb_ena = false; /* Cleanup CPT LF instruction queue */ - for (i = 0; i < nix->nb_cpt_lf; i++) - cpt_lf_fini(&lf_base[i], false); - + for (i = 0; i < nix->nb_cpt_lf; i++) { + lf = &lf_base[i]; + cpt_lf_fini(lf, lf->cpt_cq_ena); + if (lf->cpt_cq_ena) + cpt_lf_unregister_irqs(lf, cpt_lf_misc_irq, nix_inl_cpt_done_irq); + } /* Free LF resources */ rc = cpt_lfs_free(dev); if (rc) -- 2.34.1

