[PATCH 2/5] common/cnxk: add params to register IRQ handler
Rakesh Kudurumalla
rkudurumalla at marvell.com
Mon Oct 6 07:13:59 CEST 2025
modified cpt_lf_unregister_irqs cpt_lf_register_irqs()
parameters to register and unregister call back handlers.
Signed-off-by: Rakesh Kudurumalla <rkudurumalla at marvell.com>
---
drivers/common/cnxk/roc_cpt.c | 53 ++++++++++++++-------------
drivers/common/cnxk/roc_cpt_priv.h | 10 ++++-
drivers/common/cnxk/roc_nix_inl.c | 6 +--
drivers/common/cnxk/roc_nix_inl_dev.c | 6 +--
4 files changed, 42 insertions(+), 33 deletions(-)
diff --git a/drivers/common/cnxk/roc_cpt.c b/drivers/common/cnxk/roc_cpt.c
index d1ba2b8858..9f67a3c78c 100644
--- a/drivers/common/cnxk/roc_cpt.c
+++ b/drivers/common/cnxk/roc_cpt.c
@@ -44,7 +44,7 @@ cpt_lf_misc_intr_enb_dis(struct roc_cpt_lf *lf, bool enb)
lf->rbase + CPT_LF_MISC_INT_ENA_W1C);
}
-static void
+void
cpt_lf_misc_irq(void *param)
{
struct roc_cpt_lf *lf = (struct roc_cpt_lf *)param;
@@ -70,7 +70,7 @@ cpt_lf_misc_irq(void *param)
}
static int
-cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
+cpt_lf_register_misc_irq(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb)
{
struct plt_pci_device *pci_dev = lf->pci_dev;
struct plt_intr_handle *handle;
@@ -82,7 +82,7 @@ cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
/* Clear err interrupt */
cpt_lf_misc_intr_enb_dis(lf, false);
/* Set used interrupt vectors */
- rc = dev_irq_register(handle, cpt_lf_misc_irq, lf, vec);
+ rc = dev_irq_register(handle, misc_cb, lf, vec);
/* Enable all dev interrupt except for RQ_DISABLED */
cpt_lf_misc_intr_enb_dis(lf, true);
@@ -90,7 +90,7 @@ cpt_lf_register_misc_irq(struct roc_cpt_lf *lf)
}
static void
-cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf)
+cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb)
{
struct plt_pci_device *pci_dev = lf->pci_dev;
struct plt_intr_handle *handle;
@@ -101,7 +101,7 @@ cpt_lf_unregister_misc_irq(struct roc_cpt_lf *lf)
vec = lf->msixoff + CPT_LF_INT_VEC_MISC;
/* Clear err interrupt */
cpt_lf_misc_intr_enb_dis(lf, false);
- dev_irq_unregister(handle, cpt_lf_misc_irq, lf, vec);
+ dev_irq_unregister(handle, misc_cb, lf, vec);
}
static void
@@ -134,7 +134,7 @@ cpt_lf_done_irq(void *param)
}
static int
-cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
+cpt_lf_register_done_irq(struct roc_cpt_lf *lf, done_irq_cb_t done_cb)
{
struct plt_pci_device *pci_dev = lf->pci_dev;
struct plt_intr_handle *handle;
@@ -148,7 +148,7 @@ cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
cpt_lf_done_intr_enb_dis(lf, false);
/* Set used interrupt vectors */
- rc = dev_irq_register(handle, cpt_lf_done_irq, lf, vec);
+ rc = dev_irq_register(handle, done_cb, lf, vec);
/* Enable done interrupt */
cpt_lf_done_intr_enb_dis(lf, true);
@@ -157,7 +157,7 @@ cpt_lf_register_done_irq(struct roc_cpt_lf *lf)
}
static void
-cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf)
+cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf, done_irq_cb_t done_cb)
{
struct plt_pci_device *pci_dev = lf->pci_dev;
struct plt_intr_handle *handle;
@@ -169,11 +169,11 @@ cpt_lf_unregister_done_irq(struct roc_cpt_lf *lf)
/* Clear done interrupt */
cpt_lf_done_intr_enb_dis(lf, false);
- dev_irq_unregister(handle, cpt_lf_done_irq, lf, vec);
+ dev_irq_unregister(handle, done_cb, lf, vec);
}
-static int
-cpt_lf_register_irqs(struct roc_cpt_lf *lf)
+int
+cpt_lf_register_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, done_irq_cb_t done_cb)
{
int rc;
@@ -184,22 +184,22 @@ cpt_lf_register_irqs(struct roc_cpt_lf *lf)
}
/* Register lf err interrupt */
- rc = cpt_lf_register_misc_irq(lf);
+ rc = cpt_lf_register_misc_irq(lf, misc_cb);
if (rc)
plt_err("Error registering IRQs");
- rc = cpt_lf_register_done_irq(lf);
+ rc = cpt_lf_register_done_irq(lf, done_cb);
if (rc)
plt_err("Error registering IRQs");
return rc;
}
-static void
-cpt_lf_unregister_irqs(struct roc_cpt_lf *lf)
+void
+cpt_lf_unregister_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, done_irq_cb_t done_cb)
{
- cpt_lf_unregister_misc_irq(lf);
- cpt_lf_unregister_done_irq(lf);
+ cpt_lf_unregister_misc_irq(lf, misc_cb);
+ cpt_lf_unregister_done_irq(lf, done_cb);
}
static void
@@ -685,7 +685,7 @@ cpt_get_blkaddr(struct dev *dev)
}
int
-cpt_lf_init(struct roc_cpt_lf *lf)
+cpt_lf_init(struct roc_cpt_lf *lf, bool skip_register_irq)
{
struct dev *dev = lf->dev;
uint64_t blkaddr;
@@ -710,9 +710,11 @@ cpt_lf_init(struct roc_cpt_lf *lf)
/* Initialize instruction queue */
cpt_iq_init(lf);
- rc = cpt_lf_register_irqs(lf);
- if (rc)
- goto disable_iq;
+ if (!skip_register_irq) {
+ rc = cpt_lf_register_irqs(lf, cpt_lf_misc_irq, cpt_lf_done_irq);
+ if (rc)
+ goto disable_iq;
+ }
return 0;
@@ -733,7 +735,7 @@ roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf)
lf->msixoff = cpt->lf_msix_off[lf->lf_id];
lf->pci_dev = cpt->pci_dev;
- rc = cpt_lf_init(lf);
+ rc = cpt_lf_init(lf, false);
if (rc)
return rc;
@@ -943,10 +945,11 @@ roc_cpt_iq_reset(struct roc_cpt_lf *lf)
}
void
-cpt_lf_fini(struct roc_cpt_lf *lf)
+cpt_lf_fini(struct roc_cpt_lf *lf, bool skip_register_irq)
{
/* Unregister IRQ's */
- cpt_lf_unregister_irqs(lf);
+ if (!skip_register_irq)
+ cpt_lf_unregister_irqs(lf, cpt_lf_misc_irq, cpt_lf_done_irq);
/* Disable IQ */
roc_cpt_iq_disable(lf);
@@ -977,7 +980,7 @@ roc_cpt_lf_fini(struct roc_cpt_lf *lf)
if (lf == NULL)
return;
lf->roc_cpt->lf[lf->lf_id] = NULL;
- cpt_lf_fini(lf);
+ cpt_lf_fini(lf, false);
}
int
diff --git a/drivers/common/cnxk/roc_cpt_priv.h b/drivers/common/cnxk/roc_cpt_priv.h
index 0bd956e373..c46ef143ab 100644
--- a/drivers/common/cnxk/roc_cpt_priv.h
+++ b/drivers/common/cnxk/roc_cpt_priv.h
@@ -18,14 +18,20 @@ roc_cpt_to_cpt_priv(struct roc_cpt *roc_cpt)
return (struct cpt *)&roc_cpt->reserved[0];
}
+typedef void (*misc_irq_cb_t)(void *params);
+typedef void (*done_irq_cb_t)(void *params);
int cpt_lfs_attach(struct dev *dev, uint8_t blkaddr, bool modify,
uint16_t nb_lf);
int cpt_lfs_detach(struct dev *dev);
int cpt_lfs_alloc(struct dev *dev, uint8_t eng_grpmsk, uint8_t blk, bool inl_dev_sso,
bool ctx_ilen_valid, uint8_t ctx_ilen, bool rxc_ena, uint16_t rx_inject_qp);
int cpt_lfs_free(struct dev *dev);
-int cpt_lf_init(struct roc_cpt_lf *lf);
-void cpt_lf_fini(struct roc_cpt_lf *lf);
+int cpt_lf_init(struct roc_cpt_lf *lf, bool skip_register_irq);
+void cpt_lf_fini(struct roc_cpt_lf *lf, bool skip_register_irq);
+int cpt_lf_register_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, done_irq_cb_t done_cb);
+void cpt_lf_unregister_irqs(struct roc_cpt_lf *lf, misc_irq_cb_t misc_cb, done_irq_cb_t done_cb);
+void cpt_lf_cq_init(struct roc_cpt_lf *lf);
+void cpt_lf_misc_irq(void *params);
int cpt_lf_outb_cfg(struct dev *dev, uint16_t sso_pf_func, uint16_t nix_pf_func,
uint8_t lf_id, bool ena);
diff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c
index c7637ddbdc..bc63f4ee62 100644
--- a/drivers/common/cnxk/roc_nix_inl.c
+++ b/drivers/common/cnxk/roc_nix_inl.c
@@ -1588,7 +1588,7 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
lf->pci_dev = nix->pci_dev;
/* Setup CPT LF instruction queue */
- rc = cpt_lf_init(lf);
+ rc = cpt_lf_init(lf, false);
if (rc) {
plt_err("Failed to initialize CPT LF, rc=%d", rc);
goto lf_fini;
@@ -1678,7 +1678,7 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
lf_fini:
for (j = i - 1; j >= 0; j--)
- cpt_lf_fini(&lf_base[j]);
+ cpt_lf_fini(&lf_base[j], false);
plt_free(lf_base);
lf_free:
rc |= cpt_lfs_free(dev);
@@ -1705,7 +1705,7 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix)
/* Cleanup CPT LF instruction queue */
for (i = 0; i < nix->nb_cpt_lf; i++)
- cpt_lf_fini(&lf_base[i]);
+ cpt_lf_fini(&lf_base[i], false);
/* Free LF resources */
rc = cpt_lfs_free(dev);
diff --git a/drivers/common/cnxk/roc_nix_inl_dev.c b/drivers/common/cnxk/roc_nix_inl_dev.c
index 75d03c1077..dcfb893215 100644
--- a/drivers/common/cnxk/roc_nix_inl_dev.c
+++ b/drivers/common/cnxk/roc_nix_inl_dev.c
@@ -451,7 +451,7 @@ nix_inl_cpt_setup(struct nix_inl_dev *inl_dev, bool inl_dev_sso)
lf->msixoff = inl_dev->cpt_msixoff[i];
lf->pci_dev = inl_dev->pci_dev;
- rc = cpt_lf_init(lf);
+ rc = cpt_lf_init(lf, false);
if (rc) {
plt_err("Failed to initialize CPT LF, rc=%d", rc);
goto lf_free;
@@ -477,7 +477,7 @@ nix_inl_cpt_setup(struct nix_inl_dev *inl_dev, bool inl_dev_sso)
return 0;
lf_fini:
for (i = 0; i < inl_dev->nb_cptlf; i++)
- cpt_lf_fini(&inl_dev->cpt_lf[i]);
+ cpt_lf_fini(&inl_dev->cpt_lf[i], false);
lf_free:
rc |= cpt_lfs_free(dev);
return rc;
@@ -501,7 +501,7 @@ nix_inl_cpt_release(struct nix_inl_dev *inl_dev)
/* Cleanup CPT LF queue */
for (i = 0; i < inl_dev->nb_cptlf; i++)
- cpt_lf_fini(&inl_dev->cpt_lf[i]);
+ cpt_lf_fini(&inl_dev->cpt_lf[i], false);
/* Free LF resources */
rc = cpt_lfs_free(dev);
--
2.25.1
More information about the dev
mailing list