common/mlx5/linux: replace malloc and free in glue
[dpdk.git] / drivers / common / octeontx2 / otx2_dev.c
index 53a0c6e..6a84df2 100644 (file)
@@ -11,6 +11,7 @@
 #include <rte_common.h>
 #include <rte_eal.h>
 #include <rte_memcpy.h>
+#include <rte_eal_paging.h>
 
 #include "otx2_dev.h"
 #include "otx2_mbox.h"
@@ -34,10 +35,11 @@ mbox_mem_map(off_t off, size_t size)
        if (mem_fd < 0)
                goto error;
 
-       va = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, off);
+       va = rte_mem_map(NULL, size, RTE_PROT_READ | RTE_PROT_WRITE,
+                       RTE_MAP_SHARED, mem_fd, off);
        close(mem_fd);
 
-       if (va == MAP_FAILED)
+       if (va == NULL)
                otx2_err("Failed to mmap sz=0x%zx, fd=%d, off=%jd",
                         size, mem_fd, (intmax_t)off);
 error:
@@ -48,7 +50,7 @@ static void
 mbox_mem_unmap(void *va, size_t size)
 {
        if (va)
-               munmap(va, size);
+               rte_mem_unmap(va, size);
 }
 
 static int
@@ -577,17 +579,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 +599,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
@@ -744,9 +743,9 @@ static void
 mbox_unregister_irq(struct rte_pci_device *pci_dev, struct otx2_dev *dev)
 {
        if (otx2_dev_is_vf(dev))
-               return mbox_unregister_vf_irq(pci_dev, dev);
+               mbox_unregister_vf_irq(pci_dev, dev);
        else
-               return mbox_unregister_pf_irq(pci_dev, dev);
+               mbox_unregister_pf_irq(pci_dev, dev);
 }
 
 static int
@@ -791,9 +790,8 @@ otx2_pf_vf_flr_irq(void *param)
                        if (!(intr & (1ULL << vf)))
                                continue;
 
-                       vf = 64 * i + vf;
                        otx2_base_dbg("FLR: i :%d intr: 0x%" PRIx64 ", vf-%d",
-                                     i, intr, vf);
+                                     i, intr, (64 * i + vf));
                        /* Clear interrupt */
                        otx2_write64(BIT_ULL(vf), bar2 + RVU_PF_VFFLR_INTX(i));
                        /* Disable the interrupt */
@@ -875,20 +873,9 @@ otx2_dev_active_vfs(void *otx2_dev)
        return count;
 }
 
-static void
-otx2_update_pass_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev)
-{
-       RTE_SET_USED(pci_dev);
-
-       /* Update this logic when we have A1 */
-       dev->hwcap |= OTX2_HWCAP_F_A0;
-}
-
 static void
 otx2_update_vf_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev)
 {
-       dev->hwcap = 0;
-
        switch (pci_dev->id.device_id) {
        case PCI_DEVID_OCTEONTX2_RVU_PF:
                break;
@@ -897,6 +884,7 @@ otx2_update_vf_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev)
        case PCI_DEVID_OCTEONTX2_RVU_CPT_VF:
        case PCI_DEVID_OCTEONTX2_RVU_AF_VF:
        case PCI_DEVID_OCTEONTX2_RVU_VF:
+       case PCI_DEVID_OCTEONTX2_RVU_SDP_VF:
                dev->hwcap |= OTX2_HWCAP_F_VF;
                break;
        }
@@ -907,10 +895,11 @@ otx2_update_vf_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev)
  * Initialize the otx2 device
  */
 int
-otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
+otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev)
 {
        int up_direction = MBOX_DIR_PFAF_UP;
        int rc, direction = MBOX_DIR_PFAF;
+       uint64_t intr_offset = RVU_PF_INT;
        struct otx2_dev *dev = otx2_dev;
        uintptr_t bar2, bar4;
        uint64_t bar4_addr;
@@ -931,20 +920,22 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
        dev->bar4 = bar4;
 
        otx2_update_vf_hwcap(pci_dev, dev);
-       otx2_update_pass_hwcap(pci_dev, dev);
 
        if (otx2_dev_is_vf(dev)) {
                direction = MBOX_DIR_VFPF;
                up_direction = MBOX_DIR_VFPF_UP;
+               intr_offset = RVU_VF_INT;
        }
 
        /* Initialize the local mbox */
-       rc = otx2_mbox_init(&dev->mbox_local, bar4, bar2, direction, 1);
+       rc = otx2_mbox_init(&dev->mbox_local, bar4, bar2, direction, 1,
+                           intr_offset);
        if (rc)
                goto error;
        dev->mbox = &dev->mbox_local;
 
-       rc = otx2_mbox_init(&dev->mbox_up, bar4, bar2, up_direction, 1);
+       rc = otx2_mbox_init(&dev->mbox_up, bar4, bar2, up_direction, 1,
+                           intr_offset);
        if (rc)
                goto error;
 
@@ -979,13 +970,15 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
                }
                /* Init mbox object */
                rc = otx2_mbox_init(&dev->mbox_vfpf, (uintptr_t)hwbase,
-                                   bar2, MBOX_DIR_PFVF, pci_dev->max_vfs);
+                                   bar2, MBOX_DIR_PFVF, pci_dev->max_vfs,
+                                   intr_offset);
                if (rc)
                        goto iounmap;
 
                /* PF -> VF UP messages */
                rc = otx2_mbox_init(&dev->mbox_vfpf_up, (uintptr_t)hwbase,
-                                   bar2, MBOX_DIR_PFVF_UP, pci_dev->max_vfs);
+                                   bar2, MBOX_DIR_PFVF_UP, pci_dev->max_vfs,
+                                   intr_offset);
                if (rc)
                        goto mbox_fini;
        }