The default Rx extension header size is reduced from 16 bytes to 12 bytes.
This reduction saves PCIe bandwidth by decreasing packet overhead.

Signed-off-by: Dimon Zhao <[email protected]>
---
 drivers/net/nbl/nbl_dev/nbl_dev.c         | 4 +++-
 drivers/net/nbl/nbl_dev/nbl_dev.h         | 1 +
 drivers/net/nbl/nbl_hw/nbl_resource.h     | 1 +
 drivers/net/nbl/nbl_hw/nbl_txrx.c         | 6 +++++-
 drivers/net/nbl/nbl_include/nbl_include.h | 3 ++-
 5 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/nbl/nbl_dev/nbl_dev.c 
b/drivers/net/nbl/nbl_dev/nbl_dev.c
index 0381bb74ec..1992568088 100644
--- a/drivers/net/nbl/nbl_dev/nbl_dev.c
+++ b/drivers/net/nbl/nbl_dev/nbl_dev.c
@@ -87,7 +87,7 @@ static int nbl_dev_txrx_start(struct rte_eth_dev *eth_dev)
                param.local_queue_id = i + ring_mgt->queue_offset;
                param.intr_en = 0;
                param.intr_mask = 0;
-               param.half_offload_en = 1;
+               param.half_offload_en = ring_mgt->rx_hash_en;
                param.extend_header = 1;
                param.split = 0;
                param.rxcsum = 1;
@@ -266,6 +266,7 @@ int nbl_rx_queue_setup(struct rte_eth_dev *eth_dev, u16 
queue_idx,
        param.conf = conf;
        param.mempool = mempool;
        param.product = adapter->caps.product_type;
+       param.rx_hash_en = ring_mgt->rx_hash_en;
        ret =  disp_ops->start_rx_ring(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), 
&param, &rx_ring->dma);
        if (ret) {
                NBL_LOG(ERR, "start_rx_ring failed %d", ret);
@@ -993,6 +994,7 @@ int nbl_dev_init(void *p, struct rte_eth_dev *eth_dev)
                               eth_dev->data->mac_addrs[0].addr_bytes);
 
        adapter->state = NBL_ETHDEV_INITIALIZED;
+       (*dev_mgt)->net_dev->ring_mgt.rx_hash_en = 0;
        eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
        disp_ops->get_resource_pt_ops(NBL_DEV_MGT_TO_DISP_PRIV(*dev_mgt),
                                      &(*dev_mgt)->pt_ops, 0);
diff --git a/drivers/net/nbl/nbl_dev/nbl_dev.h 
b/drivers/net/nbl/nbl_dev/nbl_dev.h
index 99d8fd9483..46683d0aff 100644
--- a/drivers/net/nbl/nbl_dev/nbl_dev.h
+++ b/drivers/net/nbl/nbl_dev/nbl_dev.h
@@ -35,6 +35,7 @@ struct nbl_dev_ring_mgt {
        u8 tx_ring_num;
        u8 rx_ring_num;
        u8 active_ring_num;
+       bool rx_hash_en;
 };
 
 struct nbl_dev_net_mgt {
diff --git a/drivers/net/nbl/nbl_hw/nbl_resource.h 
b/drivers/net/nbl/nbl_hw/nbl_resource.h
index e5d184a2a0..7212778647 100644
--- a/drivers/net/nbl/nbl_hw/nbl_resource.h
+++ b/drivers/net/nbl/nbl_hw/nbl_resource.h
@@ -197,6 +197,7 @@ struct nbl_res_rx_ring {
 
        u16 avail_used_flags;
        bool used_wrap_counter;
+       bool rx_hash_en;
        u16 notify_qid;
        u16 exthdr_len;
 
diff --git a/drivers/net/nbl/nbl_hw/nbl_txrx.c 
b/drivers/net/nbl/nbl_hw/nbl_txrx.c
index 77a982ccfb..3c93765a5f 100644
--- a/drivers/net/nbl/nbl_hw/nbl_txrx.c
+++ b/drivers/net/nbl/nbl_hw/nbl_txrx.c
@@ -284,10 +284,14 @@ static int nbl_res_txrx_start_rx_ring(void *priv,
        rx_ring->dma_limit_msb = common->dma_limit_msb;
        rx_ring->common = common;
        rx_ring->notify = hw_ops->get_tail_ptr(NBL_RES_MGT_TO_HW_PRIV(res_mgt));
+       rx_ring->rx_hash_en = param->rx_hash_en;
 
        switch (param->product) {
        case NBL_LEONIS_TYPE:
-               rx_ring->exthdr_len = sizeof(struct nbl_rx_ehdr_leonis);
+               if (param->rx_hash_en)
+                       rx_ring->exthdr_len = sizeof(struct nbl_rx_ehdr_leonis);
+               else
+                       rx_ring->exthdr_len = sizeof(struct nbl_rx_ehdr_leonis) 
- 4;
                break;
        default:
                rx_ring->exthdr_len = sizeof(union nbl_rx_extend_head);
diff --git a/drivers/net/nbl/nbl_include/nbl_include.h 
b/drivers/net/nbl/nbl_include/nbl_include.h
index e0f0497e3f..f565e321d4 100644
--- a/drivers/net/nbl/nbl_include/nbl_include.h
+++ b/drivers/net/nbl/nbl_include/nbl_include.h
@@ -82,9 +82,10 @@ struct nbl_start_rx_ring_param {
        u16 queue_idx;
        u16 nb_desc;
        u32 socket_id;
-       enum nbl_product_type product;
        const struct rte_eth_rxconf *conf;
        struct rte_mempool *mempool;
+       enum nbl_product_type product;
+       bool rx_hash_en;
 };
 
 struct nbl_start_tx_ring_param {
-- 
2.34.1

Reply via email to