Adds support to configure writing result to offset of the DMA
response event.

Signed-off-by: Amit Prakash Shukla <amitpraka...@marvell.com>
---
 drivers/common/cnxk/roc_dpi.c       |  5 ++++-
 drivers/common/cnxk/roc_dpi.h       |  2 +-
 drivers/common/cnxk/roc_dpi_priv.h  |  4 ++++
 drivers/common/cnxk/roc_idev.c      | 20 ++++++++++++++++++++
 drivers/common/cnxk/roc_idev_priv.h |  3 +++
 drivers/dma/cnxk/cnxk_dmadev.c      |  3 ++-
 drivers/dma/cnxk/cnxk_dmadev.h      |  1 +
 7 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/drivers/common/cnxk/roc_dpi.c b/drivers/common/cnxk/roc_dpi.c
index 2e086b3698..7bf6ac2aaf 100644
--- a/drivers/common/cnxk/roc_dpi.c
+++ b/drivers/common/cnxk/roc_dpi.c
@@ -84,6 +84,8 @@ roc_dpi_configure(struct roc_dpi *roc_dpi, uint32_t chunk_sz, 
uint64_t aura, uin
        mbox_msg.s.aura = aura;
        mbox_msg.s.sso_pf_func = idev_sso_pffunc_get();
        mbox_msg.s.npa_pf_func = idev_npa_pffunc_get();
+       mbox_msg.s.wqecs = 1;
+       mbox_msg.s.wqecsoff = idev_dma_cs_offset_get();
 
        rc = send_msg_to_pf(&pci_dev->addr, (const char *)&mbox_msg,
                            sizeof(dpi_mbox_msg_t));
@@ -95,7 +97,7 @@ roc_dpi_configure(struct roc_dpi *roc_dpi, uint32_t chunk_sz, 
uint64_t aura, uin
 }
 
 int
-roc_dpi_dev_init(struct roc_dpi *roc_dpi)
+roc_dpi_dev_init(struct roc_dpi *roc_dpi, uint8_t offset)
 {
        struct plt_pci_device *pci_dev = roc_dpi->pci_dev;
        uint16_t vfid;
@@ -104,6 +106,7 @@ roc_dpi_dev_init(struct roc_dpi *roc_dpi)
        vfid = ((pci_dev->addr.devid & 0x1F) << 3) | (pci_dev->addr.function & 
0x7);
        vfid -= 1;
        roc_dpi->vfid = vfid;
+       idev_dma_cs_offset_set(offset);
 
        return 0;
 }
diff --git a/drivers/common/cnxk/roc_dpi.h b/drivers/common/cnxk/roc_dpi.h
index 4ebde5b8a6..978e2badb2 100644
--- a/drivers/common/cnxk/roc_dpi.h
+++ b/drivers/common/cnxk/roc_dpi.h
@@ -11,7 +11,7 @@ struct roc_dpi {
        uint16_t vfid;
 } __plt_cache_aligned;
 
-int __roc_api roc_dpi_dev_init(struct roc_dpi *roc_dpi);
+int __roc_api roc_dpi_dev_init(struct roc_dpi *roc_dpi, uint8_t offset);
 int __roc_api roc_dpi_dev_fini(struct roc_dpi *roc_dpi);
 
 int __roc_api roc_dpi_configure(struct roc_dpi *dpi, uint32_t chunk_sz, 
uint64_t aura,
diff --git a/drivers/common/cnxk/roc_dpi_priv.h 
b/drivers/common/cnxk/roc_dpi_priv.h
index 518a3e7351..52962c8bc0 100644
--- a/drivers/common/cnxk/roc_dpi_priv.h
+++ b/drivers/common/cnxk/roc_dpi_priv.h
@@ -31,6 +31,10 @@ typedef union dpi_mbox_msg_t {
                uint64_t sso_pf_func : 16;
                /* NPA PF function */
                uint64_t npa_pf_func : 16;
+               /* WQE queue DMA completion status enable */
+               uint64_t wqecs : 1;
+               /* WQE queue DMA completion status offset */
+               uint64_t wqecsoff : 8;
        } s;
 } dpi_mbox_msg_t;
 
diff --git a/drivers/common/cnxk/roc_idev.c b/drivers/common/cnxk/roc_idev.c
index e6c6b34d78..7b922c8bae 100644
--- a/drivers/common/cnxk/roc_idev.c
+++ b/drivers/common/cnxk/roc_idev.c
@@ -301,6 +301,26 @@ idev_sso_set(struct roc_sso *sso)
                __atomic_store_n(&idev->sso, sso, __ATOMIC_RELEASE);
 }
 
+void
+idev_dma_cs_offset_set(uint8_t offset)
+{
+       struct idev_cfg *idev = idev_get_cfg();
+
+       if (idev != NULL)
+               idev->dma_cs_offset = offset;
+}
+
+uint8_t
+idev_dma_cs_offset_get(void)
+{
+       struct idev_cfg *idev = idev_get_cfg();
+
+       if (idev != NULL)
+               return idev->dma_cs_offset;
+
+       return 0;
+}
+
 uint64_t
 roc_idev_nix_inl_meta_aura_get(void)
 {
diff --git a/drivers/common/cnxk/roc_idev_priv.h 
b/drivers/common/cnxk/roc_idev_priv.h
index 80f8465e1c..cf63c58d92 100644
--- a/drivers/common/cnxk/roc_idev_priv.h
+++ b/drivers/common/cnxk/roc_idev_priv.h
@@ -37,6 +37,7 @@ struct idev_cfg {
        struct roc_nix_list roc_nix_list;
        plt_spinlock_t nix_inl_dev_lock;
        plt_spinlock_t npa_dev_lock;
+       uint8_t dma_cs_offset;
 };
 
 /* Generic */
@@ -55,6 +56,8 @@ void idev_sso_pffunc_set(uint16_t sso_pf_func);
 uint16_t idev_sso_pffunc_get(void);
 struct roc_sso *idev_sso_get(void);
 void idev_sso_set(struct roc_sso *sso);
+void idev_dma_cs_offset_set(uint8_t offset);
+uint8_t idev_dma_cs_offset_get(void);
 
 /* idev lmt */
 uint16_t idev_lmt_pffunc_get(void);
diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c
index 26680edfde..db127e056f 100644
--- a/drivers/dma/cnxk/cnxk_dmadev.c
+++ b/drivers/dma/cnxk/cnxk_dmadev.c
@@ -511,6 +511,7 @@ static const struct rte_dma_dev_ops cnxk_dmadev_ops = {
 static int
 cnxk_dmadev_probe(struct rte_pci_driver *pci_drv __rte_unused, struct 
rte_pci_device *pci_dev)
 {
+       struct cnxk_dpi_compl_s *compl = NULL;
        struct cnxk_dpi_vf_s *dpivf = NULL;
        char name[RTE_DEV_NAME_MAX_LEN];
        struct rte_dma_dev *dmadev;
@@ -556,7 +557,7 @@ cnxk_dmadev_probe(struct rte_pci_driver *pci_drv 
__rte_unused, struct rte_pci_de
        rdpi = &dpivf->rdpi;
 
        rdpi->pci_dev = pci_dev;
-       rc = roc_dpi_dev_init(rdpi);
+       rc = roc_dpi_dev_init(rdpi, (uint64_t)&compl->wqecs);
        if (rc < 0)
                goto err_out_free;
 
diff --git a/drivers/dma/cnxk/cnxk_dmadev.h b/drivers/dma/cnxk/cnxk_dmadev.h
index 350ae73b5c..75059b8843 100644
--- a/drivers/dma/cnxk/cnxk_dmadev.h
+++ b/drivers/dma/cnxk/cnxk_dmadev.h
@@ -86,6 +86,7 @@ union cnxk_dpi_instr_cmd {
 struct cnxk_dpi_compl_s {
        uint64_t cdata;
        void *cb_data;
+       uint32_t wqecs;
 };
 
 struct cnxk_dpi_cdesc_data_s {
-- 
2.25.1

Reply via email to