Based on thread context, mbox API will get response for submitted
request. If thread runs in interrupt context then it uses polling
based get response API otherwise interrupt based.

Signed-off-by: Sunil Kumar Kori <sk...@marvell.com>
---
v2:
 - Included Makefile and meson build changes.
 - Rebased patch on 19.11-rc4

 drivers/common/octeontx2/otx2_dev.c   | 27 ++++++++++++---------------
 drivers/common/octeontx2/otx2_mbox.h  | 21 +++++++++++++++++----
 drivers/net/octeontx2/Makefile        |  2 ++
 drivers/net/octeontx2/meson.build     |  2 ++
 drivers/raw/octeontx2_dma/Makefile    |  2 ++
 drivers/raw/octeontx2_dma/meson.build |  2 ++
 6 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/drivers/common/octeontx2/otx2_dev.c 
b/drivers/common/octeontx2/otx2_dev.c
index 6f29d6108..d61c712fa 100644
--- a/drivers/common/octeontx2/otx2_dev.c
+++ b/drivers/common/octeontx2/otx2_dev.c
@@ -577,17 +577,16 @@ otx2_pf_vf_mbox_irq(void *param)
 
        intr = otx2_read64(dev->bar2 + RVU_VF_INT);
        if (intr == 0)
-               return;
+               otx2_base_dbg("Proceeding to check mbox UP messages if any");
 
        otx2_write64(intr, dev->bar2 + RVU_VF_INT);
        otx2_base_dbg("Irq 0x%" PRIx64 "(pf:%d,vf:%d)", intr, dev->pf, dev->vf);
-       if (intr) {
-               /* First process all configuration messages */
-               otx2_process_msgs(dev, dev->mbox);
 
-               /* Process Uplink messages */
-               otx2_process_msgs_up(dev, &dev->mbox_up);
-       }
+       /* First process all configuration messages */
+       otx2_process_msgs(dev, dev->mbox);
+
+       /* Process Uplink messages */
+       otx2_process_msgs_up(dev, &dev->mbox_up);
 }
 
 static void
@@ -598,18 +597,16 @@ otx2_af_pf_mbox_irq(void *param)
 
        intr = otx2_read64(dev->bar2 + RVU_PF_INT);
        if (intr == 0)
-               return;
+               otx2_base_dbg("Proceeding to check mbox UP messages if any");
 
        otx2_write64(intr, dev->bar2 + RVU_PF_INT);
-
        otx2_base_dbg("Irq 0x%" PRIx64 "(pf:%d,vf:%d)", intr, dev->pf, dev->vf);
-       if (intr) {
-               /* First process all configuration messages */
-               otx2_process_msgs(dev, dev->mbox);
 
-               /* Process Uplink messages */
-               otx2_process_msgs_up(dev, &dev->mbox_up);
-       }
+       /* First process all configuration messages */
+       otx2_process_msgs(dev, dev->mbox);
+
+       /* Process Uplink messages */
+       otx2_process_msgs_up(dev, &dev->mbox_up);
 }
 
 static int
diff --git a/drivers/common/octeontx2/otx2_mbox.h 
b/drivers/common/octeontx2/otx2_mbox.h
index 237d4cf45..e82dfe530 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -9,6 +9,7 @@
 #include <stdbool.h>
 
 #include <rte_ether.h>
+#include <rte_interrupts.h>
 #include <rte_spinlock.h>
 
 #include <otx2_common.h>
@@ -1627,28 +1628,40 @@ static inline int
 otx2_mbox_process(struct otx2_mbox *mbox)
 {
        otx2_mbox_msg_send(mbox, 0);
-       return otx2_mbox_get_rsp(mbox, 0, NULL);
+       if (rte_thread_is_intr())
+               return otx2_mbox_get_rsp_poll(mbox, 0, NULL);
+       else
+               return otx2_mbox_get_rsp(mbox, 0, NULL);
 }
 
 static inline int
 otx2_mbox_process_msg(struct otx2_mbox *mbox, void **msg)
 {
        otx2_mbox_msg_send(mbox, 0);
-       return otx2_mbox_get_rsp(mbox, 0, msg);
+       if (rte_thread_is_intr())
+               return otx2_mbox_get_rsp_poll(mbox, 0, msg);
+       else
+               return otx2_mbox_get_rsp(mbox, 0, msg);
 }
 
 static inline int
 otx2_mbox_process_tmo(struct otx2_mbox *mbox, uint32_t tmo)
 {
        otx2_mbox_msg_send(mbox, 0);
-       return otx2_mbox_get_rsp_tmo(mbox, 0, NULL, tmo);
+       if (rte_thread_is_intr())
+               return otx2_mbox_get_rsp_poll_tmo(mbox, 0, NULL, tmo);
+       else
+               return otx2_mbox_get_rsp_tmo(mbox, 0, NULL, tmo);
 }
 
 static inline int
 otx2_mbox_process_msg_tmo(struct otx2_mbox *mbox, void **msg, uint32_t tmo)
 {
        otx2_mbox_msg_send(mbox, 0);
-       return otx2_mbox_get_rsp_tmo(mbox, 0, msg, tmo);
+       if (rte_thread_is_intr())
+               return otx2_mbox_get_rsp_poll_tmo(mbox, 0, msg, tmo);
+       else
+               return otx2_mbox_get_rsp_tmo(mbox, 0, msg, tmo);
 }
 
 int otx2_send_ready_msg(struct otx2_mbox *mbox, uint16_t *pf_func /* out */);
diff --git a/drivers/net/octeontx2/Makefile b/drivers/net/octeontx2/Makefile
index 68f5765db..3da4d8cc1 100644
--- a/drivers/net/octeontx2/Makefile
+++ b/drivers/net/octeontx2/Makefile
@@ -26,6 +26,8 @@ CFLAGS += -diag-disable 2259
 endif
 endif
 
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+
 EXPORT_MAP := rte_pmd_octeontx2_version.map
 
 #
diff --git a/drivers/net/octeontx2/meson.build 
b/drivers/net/octeontx2/meson.build
index fad3076a3..a976a2c19 100644
--- a/drivers/net/octeontx2/meson.build
+++ b/drivers/net/octeontx2/meson.build
@@ -24,6 +24,8 @@ sources = files('otx2_rx.c',
                'otx2_ethdev_devargs.c'
                )
 
+allow_experimental_apis = true
+
 deps += ['bus_pci', 'common_octeontx2', 'mempool_octeontx2']
 
 cflags += ['-flax-vector-conversions']
diff --git a/drivers/raw/octeontx2_dma/Makefile 
b/drivers/raw/octeontx2_dma/Makefile
index c64ca3497..0d0c530fe 100644
--- a/drivers/raw/octeontx2_dma/Makefile
+++ b/drivers/raw/octeontx2_dma/Makefile
@@ -22,6 +22,8 @@ CFLAGS += -diag-disable 2259
 endif
 endif
 
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+
 EXPORT_MAP := rte_rawdev_octeontx2_dma_version.map
 
 #
diff --git a/drivers/raw/octeontx2_dma/meson.build 
b/drivers/raw/octeontx2_dma/meson.build
index 11f74680a..f8f88aa7e 100644
--- a/drivers/raw/octeontx2_dma/meson.build
+++ b/drivers/raw/octeontx2_dma/meson.build
@@ -5,6 +5,8 @@
 deps += ['bus_pci', 'common_octeontx2', 'rawdev']
 sources = files('otx2_dpi_rawdev.c', 'otx2_dpi_msg.c', 'otx2_dpi_test.c')
 
+allow_experimental_apis = true
+
 extra_flags = []
 # This integrated controller runs only on a arm64 machine, remove 32bit 
warnings
 if not dpdk_conf.get('RTE_ARCH_64')
-- 
2.17.1

Reply via email to