net/dpaa: add packet dump for debugging
authorShreyansh Jain <shreyansh.jain@nxp.com>
Thu, 28 Sep 2017 12:29:58 +0000 (17:59 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:50 +0000 (02:49 +0200)
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa/dpaa_rxtx.c

index 12dcc68..3d6ddae 100644 (file)
@@ -618,6 +618,39 @@ static int dpaa_tx_queue_init(struct qman_fq *fq,
        return ret;
 }
 
+#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
+/* Initialise a DEBUG FQ ([rt]x_error, rx_default). */
+static int dpaa_debug_queue_init(struct qman_fq *fq, uint32_t fqid)
+{
+       struct qm_mcc_initfq opts;
+       int ret;
+
+       PMD_INIT_FUNC_TRACE();
+
+       ret = qman_reserve_fqid(fqid);
+       if (ret) {
+               DPAA_PMD_ERR("Reserve debug fqid %d failed with ret: %d",
+                       fqid, ret);
+               return -EINVAL;
+       }
+       /* "map" this Rx FQ to one of the interfaces Tx FQID */
+       DPAA_PMD_DEBUG("Creating debug fq %p, fqid %d", fq, fqid);
+       ret = qman_create_fq(fqid, QMAN_FQ_FLAG_NO_ENQUEUE, fq);
+       if (ret) {
+               DPAA_PMD_ERR("create debug fqid %d failed with ret: %d",
+                       fqid, ret);
+               return ret;
+       }
+       opts.we_mask = QM_INITFQ_WE_DESTWQ | QM_INITFQ_WE_FQCTRL;
+       opts.fqd.dest.wq = DPAA_IF_DEBUG_PRIORITY;
+       ret = qman_init_fq(fq, 0, &opts);
+       if (ret)
+               DPAA_PMD_ERR("init debug fqid %d failed with ret: %d",
+                           fqid, ret);
+       return ret;
+}
+#endif
+
 /* Initialise a network interface */
 static int
 dpaa_dev_init(struct rte_eth_dev *eth_dev)
@@ -692,6 +725,15 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev)
        }
        dpaa_intf->nb_tx_queues = num_cores;
 
+#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
+       dpaa_debug_queue_init(&dpaa_intf->debug_queues[
+               DPAA_DEBUG_FQ_RX_ERROR], fman_intf->fqid_rx_err);
+       dpaa_intf->debug_queues[DPAA_DEBUG_FQ_RX_ERROR].dpaa_intf = dpaa_intf;
+       dpaa_debug_queue_init(&dpaa_intf->debug_queues[
+               DPAA_DEBUG_FQ_TX_ERROR], fman_intf->fqid_tx_err);
+       dpaa_intf->debug_queues[DPAA_DEBUG_FQ_TX_ERROR].dpaa_intf = dpaa_intf;
+#endif
+
        DPAA_PMD_DEBUG("All frame queues created");
 
        /* Get the initial configuration for flow control */
index 9c25d8c..d73f9cb 100644 (file)
                (_fd)->bpid = _bpid; \
        } while (0)
 
+#if (defined RTE_LIBRTE_DPAA_DEBUG_DRIVER)
+void dpaa_display_frame(const struct qm_fd *fd)
+{
+       int ii;
+       char *ptr;
+
+       printf("%s::bpid %x addr %08x%08x, format %d off %d, len %d stat %x\n",
+              __func__, fd->bpid, fd->addr_hi, fd->addr_lo, fd->format,
+               fd->offset, fd->length20, fd->status);
+
+       ptr = (char *)rte_dpaa_mem_ptov(fd->addr);
+       ptr += fd->offset;
+       printf("%02x ", *ptr);
+       for (ii = 1; ii < fd->length20; ii++) {
+               printf("%02x ", *ptr);
+               if ((ii % 16) == 0)
+                       printf("\n");
+               ptr++;
+       }
+       printf("\n");
+}
+#else
+#define dpaa_display_frame(a)
+#endif
+
 static inline void dpaa_slow_parsing(struct rte_mbuf *m __rte_unused,
                                     uint64_t prs __rte_unused)
 {
@@ -353,6 +378,7 @@ static inline struct rte_mbuf *dpaa_eth_fd_to_mbuf(struct qm_fd *fd,
                return dpaa_eth_sg_to_mbuf(fd, ifid);
 
        /* Ignoring case when format != qm_fd_contig */
+       dpaa_display_frame(fd);
        ptr = rte_dpaa_mem_ptov(fd->addr);
        /* Ignoring case when ptr would be NULL. That is only possible incase
         * of a corrupted packet