aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c10
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c1
3 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 9efbdc6f1fcb..89c3c8760a78 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -2247,6 +2247,9 @@ static void bnxt_free_rx_rings(struct bnxt *bp)
2247 if (rxr->xdp_prog) 2247 if (rxr->xdp_prog)
2248 bpf_prog_put(rxr->xdp_prog); 2248 bpf_prog_put(rxr->xdp_prog);
2249 2249
2250 if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
2251 xdp_rxq_info_unreg(&rxr->xdp_rxq);
2252
2250 kfree(rxr->rx_tpa); 2253 kfree(rxr->rx_tpa);
2251 rxr->rx_tpa = NULL; 2254 rxr->rx_tpa = NULL;
2252 2255
@@ -2280,6 +2283,10 @@ static int bnxt_alloc_rx_rings(struct bnxt *bp)
2280 2283
2281 ring = &rxr->rx_ring_struct; 2284 ring = &rxr->rx_ring_struct;
2282 2285
2286 rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
2287 if (rc < 0)
2288 return rc;
2289
2283 rc = bnxt_alloc_ring(bp, ring); 2290 rc = bnxt_alloc_ring(bp, ring);
2284 if (rc) 2291 if (rc)
2285 return rc; 2292 return rc;
@@ -2834,6 +2841,9 @@ void bnxt_set_ring_params(struct bnxt *bp)
2834 bp->cp_ring_mask = bp->cp_bit - 1; 2841 bp->cp_ring_mask = bp->cp_bit - 1;
2835} 2842}
2836 2843
2844/* Changing allocation mode of RX rings.
2845 * TODO: Update when extending xdp_rxq_info to support allocation modes.
2846 */
2837int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode) 2847int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
2838{ 2848{
2839 if (page_mode) { 2849 if (page_mode) {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 5359a1f0045f..2d268fc26f5e 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -23,6 +23,7 @@
23#include <net/devlink.h> 23#include <net/devlink.h>
24#include <net/dst_metadata.h> 24#include <net/dst_metadata.h>
25#include <net/switchdev.h> 25#include <net/switchdev.h>
26#include <net/xdp.h>
26 27
27struct tx_bd { 28struct tx_bd {
28 __le32 tx_bd_len_flags_type; 29 __le32 tx_bd_len_flags_type;
@@ -664,6 +665,7 @@ struct bnxt_rx_ring_info {
664 665
665 struct bnxt_ring_struct rx_ring_struct; 666 struct bnxt_ring_struct rx_ring_struct;
666 struct bnxt_ring_struct rx_agg_ring_struct; 667 struct bnxt_ring_struct rx_agg_ring_struct;
668 struct xdp_rxq_info xdp_rxq;
667}; 669};
668 670
669struct bnxt_cp_ring_info { 671struct bnxt_cp_ring_info {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
index 261e5847557a..1389ab5e05df 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
@@ -96,6 +96,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
96 xdp.data = *data_ptr; 96 xdp.data = *data_ptr;
97 xdp_set_data_meta_invalid(&xdp); 97 xdp_set_data_meta_invalid(&xdp);
98 xdp.data_end = *data_ptr + *len; 98 xdp.data_end = *data_ptr + *len;
99 xdp.rxq = &rxr->xdp_rxq;
99 orig_data = xdp.data; 100 orig_data = xdp.data;
100 mapping = rx_buf->mapping - bp->rx_dma_offset; 101 mapping = rx_buf->mapping - bp->rx_dma_offset;
101 102