[PATCH net-next 0/8] net: macb: Add XDP support and page pool integration
From: Paolo Valerio <hidden>
Date: 2026-01-15 22:26:07
Tested on Raspberry Pi 5. All the changes are intended for gem only. The series consists of two main changes: - Migration from netdev_alloc_skb() to page pool allocation model, enabling skb recycling. This also adds support for multi-descriptor frame reception, removing the previous single-descriptor approach and avoiding potentially large contiguous allocations for e.g. jumbo frames with CONFIG_PAGE_SIZE_4KB. - XDP support: Initial XDP implementation supporting major verdicts (XDP_PASS, XDP_DROP, XDP_REDIRECT, XDP_TX) along with the ndo_xdp_xmit function for packet redirection. The driver now advertises NETDEV_XDP_ACT_BASIC, NETDEV_XDP_ACT_REDIRECT, NETDEV_XDP_ACT_NDO_XMIT capabilities. Previous versions ================= - RFC v1: https://lore.kernel.org/netdev/20251119135330.551835-1-pvalerio@redhat.com/ (local) - RFC v2: https://lore.kernel.org/netdev/20251220235135.1078587-1-pvalerio@redhat.com/ (local) RFC v2 -> v1 ============ - Removed bp->macbgem_ops.mog_init_rings(bp) call from macb_open() - Fixed includes (remove unneeded, moved one from header to macb_main.c) - Reverse xmas tree ordering (gem_rx, gem_rx_refill) - print_hex_dump_debug() instead of print_hex_dump() - Replaced rx frame length check with MACB_BIT(RX_EOF) for data_len calculation - Removed NET_IP_ALIGN handling in rx buffer size calculation - Updated debug format string to include rx_headroom and total size - Changed types to unsigned int in helper functions and variable - Removed unneeded line break RFC v1 -> RFC v2 ================ - Squashed 1/6 and 2/6 - Reworked rx_buffer_size computation. It no longer takes into accounts extra room. - A bunch of renaming (rx_offset => rx_headroom, removed MACB_MAX_PAD, MACB_PP_HEADROOM => XDP_PACKET_HEADROOM, data => ptr, xdp_q => xdp_rxq, macb_xdp() => gem_xdp(), macb_xdp_xmit() => gem_xdp_xmit()) - Deduplicated buffer size computation in gem_xdp_valid_mtu() and gem_xdp_setup() - gem_xdp_setup() no longer close()/open() - Renaming from rx_skbuff to rx_buff is now got split in a separate commit - Open-coded gem_page_pool_get_buff() - Added missing rx_buff re-initialization in the error path during rx - Page pool creation failure now fails the device open - Moved xdp buff preparation inside gem_xdp_run() - Added missing rcu_access_pointer() - Turned return value in -EOPNOTSUPP for macb_xdp() on failure - moved tx_skb to tx_buff renaming to a separate commit - Removed some unneeded code and set MACB_TYPE_SKB for lp->rm9200_txq[desc].type as well - Replaced !!addr with a dedicated bool in macb_xdp_submit_frame() Paolo Valerio (7): net: macb: rename rx_skbuff into rx_buff cadence: macb: Add page pool support handle multi-descriptor frame rx cadence: macb: use the current queue number for stats cadence: macb: add XDP support for gem cadence: macb: make macb_tx_skb generic cadence: macb: make tx path skb agnostic cadence: macb: introduce xmit support Théo Lebrun (1): net: macb: move Rx buffers alloc from link up to open drivers/net/ethernet/cadence/Kconfig | 1 + drivers/net/ethernet/cadence/macb.h | 40 +- drivers/net/ethernet/cadence/macb_main.c | 827 +++++++++++++++++------ 3 files changed, 659 insertions(+), 209 deletions(-) -- 2.52.0