]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: fec: add pagepool_order to support variable page size
authorShenwei Wang <shenwei.wang@nxp.com>
Wed, 10 Sep 2025 18:52:07 +0000 (13:52 -0500)
committerJakub Kicinski <kuba@kernel.org>
Sun, 14 Sep 2025 21:20:01 +0000 (14:20 -0700)
Add a new pagepool_order member in the fec_enet_private struct
to allow dynamic configuration of page size for an instance. This
change clears the hardcoded page size assumptions.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Wei Fang <wei.fang@nxp.com>
Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
Link: https://patch.msgid.link/20250910185211.721341-3-shenwei.wang@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/fec.h
drivers/net/ethernet/freescale/fec_main.c

index 2969088dda09f57416b2daf29df14cb91b8ef9da..47317346b2f313325600d6c6852e3270924e1229 100644 (file)
@@ -620,6 +620,7 @@ struct fec_enet_private {
        unsigned int total_tx_ring_size;
        unsigned int total_rx_ring_size;
        unsigned int max_buf_size;
+       unsigned int pagepool_order;
 
        struct  platform_device *pdev;
 
index 9dacbb2371b716f21b15b13be911e8de7711482f..05feffc4162be51595c9d799b0d025055f6e9f58 100644 (file)
@@ -1783,7 +1783,7 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
         * These get messed up if we get called due to a busy condition.
         */
        bdp = rxq->bd.cur;
-       xdp_init_buff(&xdp, PAGE_SIZE, &rxq->xdp_rxq);
+       xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq);
 
        while (!((status = fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) {
 
@@ -1853,7 +1853,8 @@ fec_enet_rx_queue(struct net_device *ndev, u16 queue_id, int budget)
                 * include that when passing upstream as it messes up
                 * bridging applications.
                 */
-               skb = build_skb(page_address(page), PAGE_SIZE);
+               skb = build_skb(page_address(page),
+                               PAGE_SIZE << fep->pagepool_order);
                if (unlikely(!skb)) {
                        page_pool_recycle_direct(rxq->page_pool, page);
                        ndev->stats.rx_dropped++;
@@ -4563,6 +4564,7 @@ fec_probe(struct platform_device *pdev)
        fec_enet_clk_enable(ndev, false);
        pinctrl_pm_select_sleep_state(&pdev->dev);
 
+       fep->pagepool_order = 0;
        fep->max_buf_size = PKT_MAXBUF_SIZE;
        ndev->max_mtu = fep->max_buf_size - ETH_HLEN - ETH_FCS_LEN;