]> git.droids-corp.org - dpdk.git/commitdiff
net/ark: support arbitrary mbuf size
authorJohn Miller <john.miller@atomicrules.com>
Tue, 15 Feb 2022 22:19:22 +0000 (16:19 -0600)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 15 Feb 2022 23:48:06 +0000 (00:48 +0100)
Added arbitrary mbuf size per queue capability.
Updated ARK_UDM_CONST3 value to reflect the version number
read from the HW that is required to support this change.

Signed-off-by: John Miller <john.miller@atomicrules.com>
drivers/net/ark/ark_ethdev.c
drivers/net/ark/ark_ethdev_rx.c
drivers/net/ark/ark_udm.h

index a13f74718b109dfb4b0318f42f2fc568e72692f0..51b9e0470126db0cd975b5e2a698ef0446aa60b7 100644 (file)
@@ -527,14 +527,6 @@ ark_config_device(struct rte_eth_dev *dev)
                mpu = RTE_PTR_ADD(mpu, ARK_MPU_QOFFSET);
        }
 
-       ark_udm_stop(ark->udm.v, 0);
-       ark_udm_configure(ark->udm.v,
-                         RTE_PKTMBUF_HEADROOM,
-                         RTE_MBUF_DEFAULT_DATAROOM,
-                         ARK_RX_WRITE_TIME_NS);
-       ark_udm_stats_reset(ark->udm.v);
-       ark_udm_stop(ark->udm.v, 0);
-
        /* TX -- DDM */
        if (ark_ddm_stop(ark->ddm.v, 1))
                ARK_PMD_LOG(ERR, "Unable to stop DDM\n");
index 37a88cbedee4bd8f511de570a1431b2b20aa1a42..0478702cbe615b30117a3dcc18c245284773b633 100644 (file)
@@ -12,7 +12,6 @@
 
 #define ARK_RX_META_SIZE 32
 #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE)
-#define ARK_RX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM)
 
 /* Forward declarations */
 struct ark_rx_queue;
@@ -41,6 +40,9 @@ struct ark_rx_queue {
        rx_user_meta_hook_fn rx_user_meta_hook;
        void *ext_user_data;
 
+       uint32_t dataroom;
+       uint32_t headroom;
+
        uint32_t queue_size;
        uint32_t queue_mask;
 
@@ -164,6 +166,9 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev,
 
        /* NOTE zmalloc is used, no need to 0 indexes, etc. */
        queue->mb_pool = mb_pool;
+       queue->dataroom = rte_pktmbuf_data_room_size(mb_pool) -
+               RTE_PKTMBUF_HEADROOM;
+       queue->headroom = RTE_PKTMBUF_HEADROOM;
        queue->phys_qid = qidx;
        queue->queue_index = queue_idx;
        queue->queue_size = nb_desc;
@@ -196,6 +201,15 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev,
        queue->udm = RTE_PTR_ADD(ark->udm.v, qidx * ARK_UDM_QOFFSET);
        queue->mpu = RTE_PTR_ADD(ark->mpurx.v, qidx * ARK_MPU_QOFFSET);
 
+       /* Configure UDM per queue */
+       ark_udm_stop(queue->udm, 0);
+       ark_udm_configure(queue->udm,
+                         RTE_PKTMBUF_HEADROOM,
+                         queue->dataroom,
+                         ARK_RX_WRITE_TIME_NS);
+       ark_udm_stats_reset(queue->udm);
+       ark_udm_stop(queue->udm, 0);
+
        /* populate mbuf reserve */
        status = eth_ark_rx_seed_mbufs(queue);
 
@@ -267,6 +281,7 @@ eth_ark_recv_pkts(void *rx_queue,
                mbuf->data_len = meta->pkt_len;
 
                if (ARK_DEBUG_CORE) {   /* debug sanity checks */
+
                        if ((meta->pkt_len > (1024 * 16)) ||
                            (meta->pkt_len == 0)) {
                                ARK_PMD_LOG(DEBUG, "RX: Bad Meta Q: %u"
@@ -295,7 +310,7 @@ eth_ark_recv_pkts(void *rx_queue,
                        }
                }
 
-               if (unlikely(meta->pkt_len > ARK_RX_MAX_NOCHAIN))
+               if (unlikely(meta->pkt_len > queue->dataroom))
                        cons_index = eth_ark_rx_jumbo
                                (queue, meta, mbuf, cons_index + 1);
                else
@@ -336,14 +351,14 @@ eth_ark_rx_jumbo(struct ark_rx_queue *queue,
        /* first buf populated by called */
        mbuf_prev = mbuf0;
        segments = 1;
-       data_len = RTE_MIN(meta->pkt_len, RTE_MBUF_DEFAULT_DATAROOM);
+       data_len = RTE_MIN(meta->pkt_len, queue->dataroom);
        remaining = meta->pkt_len - data_len;
        mbuf0->data_len = data_len;
 
        /* HW guarantees that the data does not exceed prod_index! */
        while (remaining != 0) {
                data_len = RTE_MIN(remaining,
-                                  RTE_MBUF_DEFAULT_DATAROOM);
+                                  queue->dataroom);
 
                remaining -= data_len;
                segments += 1;
index 4e51a5e82c77ae28f7e3d1647ccb8aa993e0d4e2..1cbcd94a980489ca5a24967303c93070c6810d1c 100644 (file)
@@ -33,7 +33,7 @@ struct ark_rx_meta {
 #define ARK_RX_WRITE_TIME_NS 2500
 #define ARK_UDM_SETUP 0
 #define ARK_UDM_CONST2 0xbACECACE
-#define ARK_UDM_CONST3 0x334d4455
+#define ARK_UDM_CONST3 0x344d4455
 #define ARK_UDM_CONST ARK_UDM_CONST3
 struct ark_udm_setup_t {
        uint32_t r0;