From patchwork Sun Nov 13 11:15:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 19341 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1637186wru; Sun, 13 Nov 2022 03:12:57 -0800 (PST) X-Google-Smtp-Source: AA0mqf6lQGrvu7EOHDP9m+mY5fHEHs6iZhqahntNilZAn4yycKt1PEiwE1NUd8uwTqp6iyxr7s2/ X-Received: by 2002:a17:902:9894:b0:188:9ae7:bb7d with SMTP id s20-20020a170902989400b001889ae7bb7dmr9627330plp.113.1668337977368; Sun, 13 Nov 2022 03:12:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668337977; cv=none; d=google.com; s=arc-20160816; b=hDuSg1zYiqD1pipKMQdDq6H7CkuqrghyKdiT/sObRtaoydbBajWuQScGMNcGU/JaRO oUpcUFuMZ5UZri7J6o+Zvh0e4NdBL3niebvkJMusqowH0Bjbe62uRemuhWHjaE/CBpdF o7rpXly5MDT806lRSYR9+FT4sVrJ522wKXysqy6WbRJa7Rlfyj7DzxAOi2Xwxw4PDq+r jwztqU0sM5K1uJ06fG4MwhOPefNpYd8iTe8pI6542G1jeXFxXwT24QFJXbhKLg8bglP5 XKCo2A1/jXO/a08Mov+yhsG5KbFMKYP2+po9zahdkTr0TfjR7CLJzqXDlaw/cV4PGVr9 NjHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Y3XaJe7HU29G6mhB6yKGc/jcj6No8cfwY4vdpEL1zsg=; b=U2qqhIsVO5OE5PdkTd73gSkRjb59vxFKCN5TPsVbCvnb14CqdeWtmtwknpsCzODahn WJ5+WNlfOAbeFTbgpJEs4iwTEjHyoQq2yCa07GaFHq1mxYqBCipey/C8Lp8QZf7vv5Kv dYoFVyEGVRyD5cVH7ldNHbvfghL4bMwNS6VYnitrxMyJTyse6orfkap3mim3AunNuoqa JeU+t2xG2Odmp01w5X4pOZv8y3HIXW9VTeeFa45vvL9zQBnUpYRwfv9BKPAqfFi5Mo42 Kv5uYNbDD2AV0T0Ln+UyEIF44crOHydF2eWj53UKHprhIkYlgJSxF6lvbTa6KgpQHBKS wMHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=SPqeb664; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s3-20020a170902a50300b00176b3c7d158si6942377plq.99.2022.11.13.03.12.44; Sun, 13 Nov 2022 03:12:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=SPqeb664; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235240AbiKMLMZ (ORCPT + 99 others); Sun, 13 Nov 2022 06:12:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235207AbiKMLMW (ORCPT ); Sun, 13 Nov 2022 06:12:22 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CFCB12AF3; Sun, 13 Nov 2022 03:12:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1668337941; x=1699873941; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HZHZO0WhtkDNe6O+t1GNqVTy3ldQ1ijx80yqsva3JXA=; b=SPqeb664/AWGva7ef4h1O3NaDADaZ+NH//h1QYs9ssd4mIsmSbh01nRV BCpaROspflOLpzRhvLpCdDSaCRoEDiImBccSsG+L9hz1KtpCHaw8Yl7lk ihqxXbTLVYAmJwITSHYphgWsTDcdQi8CvRYYtRlx80fg4gHNh9YB4WkbA Dv4uxgqgYbFPKvtzUJQTmr0iM/utvsQZxITqmeXyLquJNiqvs0f+4E04J t1NCLexDaqGXD+Z9IhHt6qTKfZFbup31T3Z1aAb9xhMUvTQg1KjPwXilg tVhouNT2j6kEitwOk4LmvJ+Vi0M32fHQKrwAQyFrcHrv8kBwYTDd0KaB/ g==; X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="183271854" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 13 Nov 2022 04:12:20 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 13 Nov 2022 04:12:19 -0700 Received: from soft-dev3-1.microsemi.net (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 13 Nov 2022 04:12:17 -0700 From: Horatiu Vultur To: , , CC: , , , , , , , , , , Horatiu Vultur Subject: [PATCH net-next 1/5] net: lan966x: Add XDP_PACKET_HEADROOM Date: Sun, 13 Nov 2022 12:15:55 +0100 Message-ID: <20221113111559.1028030-2-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.38.0 In-Reply-To: <20221113111559.1028030-1-horatiu.vultur@microchip.com> References: <20221113111559.1028030-1-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749379163228814630?= X-GMAIL-MSGID: =?utf-8?q?1749379163228814630?= Update the page_pool params to allocate XDP_PACKET_HEADROOM space as headroom for all received frames. This is needed for when the XDP_TX and XDP_REDIRECT are implemented. Signed-off-by: Horatiu Vultur --- .../ethernet/microchip/lan966x/lan966x_fdma.c | 22 +++++++++++++------ .../ethernet/microchip/lan966x/lan966x_xdp.c | 5 +++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index 5fbbd479cfb06..dc1ac340e1fb3 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -1,5 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ +#include + #include "lan966x_main.h" static int lan966x_fdma_channel_active(struct lan966x *lan966x) @@ -16,7 +18,7 @@ static struct page *lan966x_fdma_rx_alloc_page(struct lan966x_rx *rx, if (unlikely(!page)) return NULL; - db->dataptr = page_pool_get_dma_addr(page); + db->dataptr = page_pool_get_dma_addr(page) + XDP_PACKET_HEADROOM; return page; } @@ -72,7 +74,7 @@ static int lan966x_fdma_rx_alloc_page_pool(struct lan966x_rx *rx) .nid = NUMA_NO_NODE, .dev = lan966x->dev, .dma_dir = DMA_FROM_DEVICE, - .offset = 0, + .offset = XDP_PACKET_HEADROOM, .max_len = rx->max_mtu - SKB_DATA_ALIGN(sizeof(struct skb_shared_info)), }; @@ -432,11 +434,13 @@ static int lan966x_fdma_rx_check_frame(struct lan966x_rx *rx, u64 *src_port) if (unlikely(!page)) return FDMA_ERROR; - dma_sync_single_for_cpu(lan966x->dev, (dma_addr_t)db->dataptr, + dma_sync_single_for_cpu(lan966x->dev, + (dma_addr_t)db->dataptr + XDP_PACKET_HEADROOM, FDMA_DCB_STATUS_BLOCKL(db->status), DMA_FROM_DEVICE); - lan966x_ifh_get_src_port(page_address(page), src_port); + lan966x_ifh_get_src_port(page_address(page) + XDP_PACKET_HEADROOM, + src_port); if (WARN_ON(*src_port >= lan966x->num_phys_ports)) return FDMA_ERROR; @@ -444,7 +448,9 @@ static int lan966x_fdma_rx_check_frame(struct lan966x_rx *rx, u64 *src_port) if (!lan966x_xdp_port_present(port)) return FDMA_PASS; - return lan966x_xdp_run(port, page, FDMA_DCB_STATUS_BLOCKL(db->status)); + return lan966x_xdp_run(port, page, + FDMA_DCB_STATUS_BLOCKL(db->status) + + XDP_PACKET_HEADROOM); } static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx, @@ -466,7 +472,8 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx, skb_mark_for_recycle(skb); - skb_put(skb, FDMA_DCB_STATUS_BLOCKL(db->status)); + skb_put(skb, FDMA_DCB_STATUS_BLOCKL(db->status) + XDP_PACKET_HEADROOM); + skb_pull(skb, XDP_PACKET_HEADROOM); lan966x_ifh_get_timestamp(skb->data, ×tamp); @@ -786,7 +793,8 @@ static int lan966x_fdma_get_max_frame(struct lan966x *lan966x) return lan966x_fdma_get_max_mtu(lan966x) + IFH_LEN_BYTES + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) + - VLAN_HLEN * 2; + VLAN_HLEN * 2 + + XDP_PACKET_HEADROOM; } int lan966x_fdma_change_mtu(struct lan966x *lan966x) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c index e77d9f2aad2b4..bab447e79273f 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c @@ -44,8 +44,9 @@ int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len) xdp_init_buff(&xdp, PAGE_SIZE << lan966x->rx.page_order, &port->xdp_rxq); - xdp_prepare_buff(&xdp, page_address(page), IFH_LEN_BYTES, - data_len - IFH_LEN_BYTES, false); + xdp_prepare_buff(&xdp, page_address(page), + IFH_LEN_BYTES + XDP_PACKET_HEADROOM, + data_len - IFH_LEN_BYTES - XDP_PACKET_HEADROOM, false); act = bpf_prog_run_xdp(xdp_prog, &xdp); switch (act) { case XDP_PASS: From patchwork Sun Nov 13 11:15:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 19342 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1637244wru; Sun, 13 Nov 2022 03:13:09 -0800 (PST) X-Google-Smtp-Source: AA0mqf6VMAvi9Oy5vuDQ+Y8KLyqdIrbhYampQzp+4eBoJk5Ag78C01Mb/hK8xfI/OvP/0maTxlFW X-Received: by 2002:a05:6a00:1f06:b0:56b:f390:36f with SMTP id be6-20020a056a001f0600b0056bf390036fmr10128610pfb.2.1668337989409; Sun, 13 Nov 2022 03:13:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668337989; cv=none; d=google.com; s=arc-20160816; b=y6C9OIaHeCh+nrguRNGQOQG7+LHHD1+mgCJArHWAigAvjQ5paupT+cmgwD+cJpPVzN Jm7OeKFOi6jZvDZRp2k4PG4bH3fiPDSL4QQtuPUjSi+/JNnJN8Ec1rCll5GSaw/nzRJC w43uUFFGjg4DBFymmAYBZ/CAxw2sK5kF4GgsejcjFgnIdsq7JDXYX6vstkef9vL50x2H EC0mI/JCIaK4eB4/DLQimPUYc/Ib/eXCHfoXardfO6Mz+3pU5baUpPkStS1lstP4FP7e nw7f4VIEp51yv4BxdJ5lu/kZw9kfQFPV2OEpvOiAVHRXQXrnNsXk5EQVwPaUFq8JtXz/ vmuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=2tB2g4rQZFSzSil/EAfUnb3HlDbOfMnF4AWM1FB/ngI=; b=P5aUneJdWDVakSmWDeLC306Cu14CEReZctr6z6estr00GXxObUZiMb3x/H6X9A+oSS lNyY2g4KkU4VcoACs+ZEWBkPe2XtrzF8QbUcbbPkDa1lCg/o8pInSaJWZw5YTybBIscO 1JJ41bRvALOpre7yjpusnJddwqExZiac5zD3BBSYKztDZyUu3Fa6yKzd9q0RQWk7ygPI 7BdBPpNAEYSlgWuDb/wc4bW+rSMiy/OHLpG/MLBeCkmURdLVtU+m6EbHExCfv+qS5NB+ 5e3FCxCaxtfVZgf8PaVZrILj7CXyVWXaz+BmAOLsDUiQWbWXhD5YtfnBQrnd+vagBLvi U+CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=prA+r81y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 19-20020a631153000000b0047071cc77f8si4513799pgr.803.2022.11.13.03.12.56; Sun, 13 Nov 2022 03:13:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=prA+r81y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235270AbiKMLM3 (ORCPT + 99 others); Sun, 13 Nov 2022 06:12:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235231AbiKMLMY (ORCPT ); Sun, 13 Nov 2022 06:12:24 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EF9613CCC; Sun, 13 Nov 2022 03:12:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1668337943; x=1699873943; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=V4sihW05AzgWZPFR155JI3WiijsbWSedw+CGkbWMagM=; b=prA+r81ymGZLd6GPW8F424Bic44W+609SD5sY9DEua8mWrIsCuZcnldm 1zGDY/xh/0P34gjPxhnNOLdurGA+nHKnVwxpqBSPLNMTfy1tjlc96+S8X OUPz9iJZj61/CuFG47aYrGziPz6WMAMM68CRQhohypnRd5kHNtxEg731a 4yBt29/BrMSIUiKvu2QYSSZKQlXlZPui7q7pEmHgx38yZAs2pFR7IBYmQ sGww7udJ+9yZWLOyIH9PoUIWtZESs0iIDpE1GpDC2rposNLaGVkwRzK1X XYklrd7Fi0BIEeY2eEbVD2LnQLlEN+AQvVD3RCNwjbnxXEfZvLYrX08S4 A==; X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="123168932" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 13 Nov 2022 04:12:22 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 13 Nov 2022 04:12:22 -0700 Received: from soft-dev3-1.microsemi.net (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 13 Nov 2022 04:12:19 -0700 From: Horatiu Vultur To: , , CC: , , , , , , , , , , Horatiu Vultur Subject: [PATCH net-next 2/5] net: lan966x: Introduce helper functions Date: Sun, 13 Nov 2022 12:15:56 +0100 Message-ID: <20221113111559.1028030-3-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.38.0 In-Reply-To: <20221113111559.1028030-1-horatiu.vultur@microchip.com> References: <20221113111559.1028030-1-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749379175279703915?= X-GMAIL-MSGID: =?utf-8?q?1749379175279703915?= Introduce lan966x_fdma_tx_setup_dcb and lan966x_fdma_tx_start functions and use of them inside lan966x_fdma_xmit. There is no functional change in here. They are introduced to be used when XDP_TX/REDIRECT actions are introduced. Signed-off-by: Horatiu Vultur --- .../ethernet/microchip/lan966x/lan966x_fdma.c | 71 ++++++++++++------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index dc1ac340e1fb3..0dbe620d3093f 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -614,14 +614,53 @@ static int lan966x_fdma_get_next_dcb(struct lan966x_tx *tx) return -1; } +static void lan966x_fdma_tx_setup_dcb(struct lan966x_tx *tx, + int next_to_use, int len, + dma_addr_t dma_addr) +{ + struct lan966x_tx_dcb *next_dcb; + struct lan966x_db *next_db; + + next_dcb = &tx->dcbs[next_to_use]; + next_dcb->nextptr = FDMA_DCB_INVALID_DATA; + + next_db = &next_dcb->db[0]; + next_db->dataptr = dma_addr; + next_db->status = FDMA_DCB_STATUS_SOF | + FDMA_DCB_STATUS_EOF | + FDMA_DCB_STATUS_INTR | + FDMA_DCB_STATUS_BLOCKO(0) | + FDMA_DCB_STATUS_BLOCKL(len); +} + +static void lan966x_fdma_tx_start(struct lan966x_tx *tx, int next_to_use) +{ + struct lan966x *lan966x = tx->lan966x; + struct lan966x_tx_dcb *dcb; + + if (likely(lan966x->tx.activated)) { + /* Connect current dcb to the next db */ + dcb = &tx->dcbs[tx->last_in_use]; + dcb->nextptr = tx->dma + (next_to_use * + sizeof(struct lan966x_tx_dcb)); + + lan966x_fdma_tx_reload(tx); + } else { + /* Because it is first time, then just activate */ + lan966x->tx.activated = true; + lan966x_fdma_tx_activate(tx); + } + + /* Move to next dcb because this last in use */ + tx->last_in_use = next_to_use; +} + int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) { struct lan966x_port *port = netdev_priv(dev); struct lan966x *lan966x = port->lan966x; struct lan966x_tx_dcb_buf *next_dcb_buf; - struct lan966x_tx_dcb *next_dcb, *dcb; struct lan966x_tx *tx = &lan966x->tx; - struct lan966x_db *next_db; int needed_headroom; int needed_tailroom; dma_addr_t dma_addr; @@ -667,16 +706,7 @@ int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) } /* Setup next dcb */ - next_dcb = &tx->dcbs[next_to_use]; - next_dcb->nextptr = FDMA_DCB_INVALID_DATA; - - next_db = &next_dcb->db[0]; - next_db->dataptr = dma_addr; - next_db->status = FDMA_DCB_STATUS_SOF | - FDMA_DCB_STATUS_EOF | - FDMA_DCB_STATUS_INTR | - FDMA_DCB_STATUS_BLOCKO(0) | - FDMA_DCB_STATUS_BLOCKL(skb->len); + lan966x_fdma_tx_setup_dcb(tx, next_to_use, skb->len, dma_addr); /* Fill up the buffer */ next_dcb_buf = &tx->dcbs_buf[next_to_use]; @@ -690,21 +720,8 @@ int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) LAN966X_SKB_CB(skb)->rew_op == IFH_REW_OP_TWO_STEP_PTP) next_dcb_buf->ptp = true; - if (likely(lan966x->tx.activated)) { - /* Connect current dcb to the next db */ - dcb = &tx->dcbs[tx->last_in_use]; - dcb->nextptr = tx->dma + (next_to_use * - sizeof(struct lan966x_tx_dcb)); - - lan966x_fdma_tx_reload(tx); - } else { - /* Because it is first time, then just activate */ - lan966x->tx.activated = true; - lan966x_fdma_tx_activate(tx); - } - - /* Move to next dcb because this last in use */ - tx->last_in_use = next_to_use; + /* Start the transmission */ + lan966x_fdma_tx_start(tx, next_to_use); return NETDEV_TX_OK; From patchwork Sun Nov 13 11:15:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 19343 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1637279wru; Sun, 13 Nov 2022 03:13:14 -0800 (PST) X-Google-Smtp-Source: AA0mqf5CSb6xD8wg7a6qSLp//xn3hQZ3LuiaoS8AqS2N1kLv642kYk98o87ur8f9hOquBHymlI8g X-Received: by 2002:a17:902:9881:b0:186:fe2e:7eb0 with SMTP id s1-20020a170902988100b00186fe2e7eb0mr9785621plp.55.1668337994076; Sun, 13 Nov 2022 03:13:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668337994; cv=none; d=google.com; s=arc-20160816; b=cUNgrectrfkbyBu3iK3AJqD8miM9WctjAWm5b/RF1e1+m17ZZywEemPgZvdZBl6yoD 5Xx8FUHbCcBr63WgfwHVZ6/UpcRUGlDdwqn0ZIB6VRou6tqQSjWWRF4JCNbnU1OkE5q2 i9oPlb7dp3EMvTU/yS04nY5nk0DDgIR8Zbs5cK7DR0+8/+guQKhkmJlEApr2QYHEvjl6 Oj2VAIfb+D7HuafxmlkGFk5bym3icxAGtRFvGg3UNKsUWsVd+la+JPgxnd6BEe1EPOJi ZZr3wTTIJ1FoXXgqkY6g0e9F4HixYzqbd0CUlrv7RVpP56pV19PI60RQToAu+Se7SzpJ uEvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+DJBeyLfOGoFQ7KyNCIOT2K2NkvjqUwddjVEsHUpwac=; b=uy14Vj7h+nJ2Syn1yMP71Y3wwou4TKOXMqdpuyx+0GPRPrr/2G4O+kIsi/ZhXufH4b TBAD0bMsUEKuIUMsJ0QEkwDfW2znC84TQfa3WVakXXfILDSlJFkmRbfoaD/ehBHlLHPZ BA27AOHWGgGppAIG+JLTYRpNVOWZaSz7osOiaCf1pwOBpF2dKbcLyP1lcvmSsnuyIAkc gN1XPN+JQd9Pbs2JbCDT/NVWPo9IgkHRMnLglqEwP3tM7dPanZgqjmUAJ2guVuzQPMNB ptagqvtQvn67SQfkl8RpC87km/BD+24s6mbs/Z+a1sGoG0xFIz0oeBI1bEDF4mVRXhg9 B3wQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=d2OPucxO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c16-20020a656750000000b0046fb0308751si7422042pgu.327.2022.11.13.03.13.01; Sun, 13 Nov 2022 03:13:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=d2OPucxO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235241AbiKMLMm (ORCPT + 99 others); Sun, 13 Nov 2022 06:12:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235207AbiKMLM1 (ORCPT ); Sun, 13 Nov 2022 06:12:27 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E08913CD3; Sun, 13 Nov 2022 03:12:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1668337946; x=1699873946; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Bll0TqhYnoY1M4sg8gSjG9QBEcHQzOV1+03JZymwRBM=; b=d2OPucxO59B6bCeHl2CNEGZvOG1lwTwfJ6knzNZN6mZhNlnPdZNCEb3l EwHKVARj30wyISXYOrw1mentOCdXU/Tuh3cyLkpcy3mCx11B+f45MI8uv oimExKt1LOX4Lyiq/N3fJbGUWTvWJ4nmaDiT+5Mo0WCWZ//1VGgGV3wrX phaFLRcidokb8yzdK1snSo1rVGN4Ma75OsWPzFy4yc61l5lDV0/X84QrH M/u427vq7DsyeAYRGnqbLBp+xAWTXot78e6pCFBW9n6v/cAlPXunJ1s38 Gi74flwErOhOca/SHU+6xbFXLOOj7iWm4Pk3hwXmClVG8Z5FTFHJpu2cW Q==; X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="183271860" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 13 Nov 2022 04:12:26 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 13 Nov 2022 04:12:25 -0700 Received: from soft-dev3-1.microsemi.net (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 13 Nov 2022 04:12:22 -0700 From: Horatiu Vultur To: , , CC: , , , , , , , , , , Horatiu Vultur Subject: [PATCH net-next 3/5] net: lan966x: Add len field to lan966x_tx_dcb_buf Date: Sun, 13 Nov 2022 12:15:57 +0100 Message-ID: <20221113111559.1028030-4-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.38.0 In-Reply-To: <20221113111559.1028030-1-horatiu.vultur@microchip.com> References: <20221113111559.1028030-1-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749379180134804946?= X-GMAIL-MSGID: =?utf-8?q?1749379180134804946?= Currently when a frame was transmitted, it is required to unamp the frame that was transmitted. The length of the frame was taken from the transmitted skb. In the future we might not have an skb, therefore store the length skb directly in the lan966x_tx_dcb_buf and use this one to unamp the frame. Signed-off-by: Horatiu Vultur --- drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c | 5 +++-- drivers/net/ethernet/microchip/lan966x/lan966x_main.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index 0dbe620d3093f..833583f6bbfa6 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -391,12 +391,12 @@ static void lan966x_fdma_tx_clear_buf(struct lan966x *lan966x, int weight) continue; dcb_buf->dev->stats.tx_packets++; - dcb_buf->dev->stats.tx_bytes += dcb_buf->skb->len; + dcb_buf->dev->stats.tx_bytes += dcb_buf->len; dcb_buf->used = false; dma_unmap_single(lan966x->dev, dcb_buf->dma_addr, - dcb_buf->skb->len, + dcb_buf->len, DMA_TO_DEVICE); if (!dcb_buf->ptp) dev_kfree_skb_any(dcb_buf->skb); @@ -711,6 +711,7 @@ int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) /* Fill up the buffer */ next_dcb_buf = &tx->dcbs_buf[next_to_use]; next_dcb_buf->skb = skb; + next_dcb_buf->len = skb->len; next_dcb_buf->dma_addr = dma_addr; next_dcb_buf->used = true; next_dcb_buf->ptp = false; diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h index bc93051aa0798..7bb9098496f60 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h @@ -175,6 +175,7 @@ struct lan966x_rx { struct lan966x_tx_dcb_buf { struct net_device *dev; struct sk_buff *skb; + int len; dma_addr_t dma_addr; bool used; bool ptp; From patchwork Sun Nov 13 11:15:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 19344 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1638269wru; Sun, 13 Nov 2022 03:16:31 -0800 (PST) X-Google-Smtp-Source: AA0mqf4+GAAn2xya1v/rH8ajTf+av4sgAm99GeIxFWooNAyajf9ug5uXJWO5yrE03uSzc0Dckz61 X-Received: by 2002:a05:6402:371:b0:461:f7a7:a792 with SMTP id s17-20020a056402037100b00461f7a7a792mr7775993edw.8.1668338191525; Sun, 13 Nov 2022 03:16:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668338191; cv=none; d=google.com; s=arc-20160816; b=j/+U20dyAXoI358AjJE6JbJmXrZy67ePCxrSgqXlFXe4H2XouZQSp8lCUf7bCI01wA 4jgTNlb6aMehKPjRZAMV4bIlWuqCEOYI1Vr3nIUpaAC0hlTDR/iJlnwJPusaHKpVCh/C 9RdCyb+t6EY5Z2u0/U6ho7Wt0i5H42USge/SQeHwEHGB/YdhbuyB5EYm0aTfoT/zLeoU ryQJc6+kryebUugDkrdePObu7Qq1cBBQbDgzlZkh9KjnImu+gFWl+LXCRLhAWbDy353N R2C5A5rCDRYW6kUCC808viWm7u5YUe+4oG/1NoiXz67kOOUI6XfiajBI3eeQ/iOZQsWG 29Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Zp45zMN4zHlMKFKib//s9MsSal/kthll3OmjuAfW+Ic=; b=hxcDonmPNMZKuaCh+NNs3pGIQsAmZGCHUW+yLD+hqZLpaacOV7gcntPoKrgKjnfaa3 7yHTq4//1vsnYHXV3N/cNaDnckY4KSmPog8Vxkl7wAbwfpnlzkpcP87q2foA20ELEqNB 9H6gu8M6XgoBEEB7w6LDtVn7TEacuDBrHflNF6uNIearExNBGtoBYbDd1jAPLLxpn9Q2 whwOeS2sy94Fz8kxr+ngAMt//pRNrDD8uhRmsw0sSxnqg+bjjhlG0cjY24MDGtIBZlRR ODkJwaNlyiC+V7AKS655AHf6ShZ20flvjTpEivFF8u7X1cz+g38fC2Uc8xu+Ha3VdcTz 3RGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=1vHCGLSE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p27-20020a17090635db00b007aea8f32c85si4920109ejb.390.2022.11.13.03.16.07; Sun, 13 Nov 2022 03:16:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=1vHCGLSE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235321AbiKMLM4 (ORCPT + 99 others); Sun, 13 Nov 2022 06:12:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235229AbiKMLMi (ORCPT ); Sun, 13 Nov 2022 06:12:38 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0308C13D3B; Sun, 13 Nov 2022 03:12:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1668337948; x=1699873948; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wuhyGA6FrjRIi/7CVsrc2hpcv6AGAbJKF+GAwVEiQtM=; b=1vHCGLSERUgEi7ao68iog3K7dAnu4FD4MlOxhB2tYwvNwsOZFsCAqexI yRlE3mHDHTWPF1iAAsfwjuD2a3VyPeIy8QnDLz4j0iaDA7Sso+N4lhAXC kzht9/KJMwumQu8TmOrYGevZXF9ELAYIJ/fs2ptPqcQSI1Xk3z1WUjqXg 3vLEkJWEJ9zYRRYXIZR9zKO5PmnAlghCBbldqw9Vh1pOver3xxmdKn9UR NFxm3w9mxARyqr+/rxGrDNHCBol8ZlDJlc35zX0u3u/Ed2DNVBRB/v5K9 y41oulk2erBxfO8KYRLpTurSdFJO2kbDLZf2gikg+PGV4JbTBD/HwB87z w==; X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="123168938" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 13 Nov 2022 04:12:28 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 13 Nov 2022 04:12:28 -0700 Received: from soft-dev3-1.microsemi.net (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 13 Nov 2022 04:12:25 -0700 From: Horatiu Vultur To: , , CC: , , , , , , , , , , Horatiu Vultur Subject: [PATCH net-next 4/5] net: lan966x: Add support for XDP_TX Date: Sun, 13 Nov 2022 12:15:58 +0100 Message-ID: <20221113111559.1028030-5-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.38.0 In-Reply-To: <20221113111559.1028030-1-horatiu.vultur@microchip.com> References: <20221113111559.1028030-1-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749379387735038560?= X-GMAIL-MSGID: =?utf-8?q?1749379387735038560?= Extend lan966x XDP support with the action XDP_TX. In this case when the received buffer needs to execute XDP_TX, the buffer will be moved to the TX buffers. So a new RX buffer will be allocated. When the TX finish with the frame, it would release completely this buffer. Signed-off-by: Horatiu Vultur --- .../ethernet/microchip/lan966x/lan966x_fdma.c | 78 +++++++++++++++++-- .../ethernet/microchip/lan966x/lan966x_main.c | 4 +- .../ethernet/microchip/lan966x/lan966x_main.h | 8 ++ .../ethernet/microchip/lan966x/lan966x_xdp.c | 8 ++ 4 files changed, 91 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index 833583f6bbfa6..a177ca499db4e 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -394,13 +394,21 @@ static void lan966x_fdma_tx_clear_buf(struct lan966x *lan966x, int weight) dcb_buf->dev->stats.tx_bytes += dcb_buf->len; dcb_buf->used = false; - dma_unmap_single(lan966x->dev, - dcb_buf->dma_addr, - dcb_buf->len, - DMA_TO_DEVICE); - if (!dcb_buf->ptp) + if (dcb_buf->skb) + dma_unmap_single(lan966x->dev, + dcb_buf->dma_addr, + dcb_buf->len, + DMA_TO_DEVICE); + + if (dcb_buf->skb && !dcb_buf->ptp) dev_kfree_skb_any(dcb_buf->skb); + if (dcb_buf->page) { + page_pool_release_page(lan966x->rx.page_pool, + dcb_buf->page); + put_page(dcb_buf->page); + } + clear = true; } @@ -534,6 +542,9 @@ static int lan966x_fdma_napi_poll(struct napi_struct *napi, int weight) lan966x_fdma_rx_free_page(rx); lan966x_fdma_rx_advance_dcb(rx); goto allocate_new; + case FDMA_TX: + lan966x_fdma_rx_advance_dcb(rx); + continue; case FDMA_DROP: lan966x_fdma_rx_free_page(rx); lan966x_fdma_rx_advance_dcb(rx); @@ -655,6 +666,62 @@ static void lan966x_fdma_tx_start(struct lan966x_tx *tx, int next_to_use) tx->last_in_use = next_to_use; } +int lan966x_fdma_xmit_xdpf(struct lan966x_port *port, + struct xdp_frame *xdpf, + struct page *page) +{ + struct lan966x *lan966x = port->lan966x; + struct lan966x_tx_dcb_buf *next_dcb_buf; + struct lan966x_tx *tx = &lan966x->tx; + dma_addr_t dma_addr; + int next_to_use; + __be32 *ifh; + int ret = 0; + + spin_lock(&lan966x->tx_lock); + + /* Get next index */ + next_to_use = lan966x_fdma_get_next_dcb(tx); + if (next_to_use < 0) { + netif_stop_queue(port->dev); + ret = NETDEV_TX_BUSY; + goto out; + } + + /* Generate new IFH */ + ifh = page_address(page) + XDP_PACKET_HEADROOM; + memset(ifh, 0x0, sizeof(__be32) * IFH_LEN); + lan966x_ifh_set_bypass(ifh, 1); + lan966x_ifh_set_port(ifh, BIT_ULL(port->chip_port)); + + dma_addr = page_pool_get_dma_addr(page); + dma_sync_single_for_device(lan966x->dev, dma_addr + XDP_PACKET_HEADROOM, + xdpf->len + IFH_LEN_BYTES, + DMA_TO_DEVICE); + + /* Setup next dcb */ + lan966x_fdma_tx_setup_dcb(tx, next_to_use, xdpf->len + IFH_LEN_BYTES, + dma_addr + XDP_PACKET_HEADROOM); + + /* Fill up the buffer */ + next_dcb_buf = &tx->dcbs_buf[next_to_use]; + next_dcb_buf->skb = NULL; + next_dcb_buf->page = page; + next_dcb_buf->len = xdpf->len + IFH_LEN_BYTES; + next_dcb_buf->dma_addr = dma_addr; + next_dcb_buf->used = true; + next_dcb_buf->ptp = false; + next_dcb_buf->dev = port->dev; + + /* Start the transmission */ + lan966x_fdma_tx_start(tx, next_to_use); + +out: + spin_unlock(&lan966x->tx_lock); + + return ret; +} + int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) { struct lan966x_port *port = netdev_priv(dev); @@ -711,6 +778,7 @@ int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev) /* Fill up the buffer */ next_dcb_buf = &tx->dcbs_buf[next_to_use]; next_dcb_buf->skb = skb; + next_dcb_buf->page = NULL; next_dcb_buf->len = skb->len; next_dcb_buf->dma_addr = dma_addr; next_dcb_buf->used = true; diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c index 42be5d0f1f015..0b7707306da26 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c @@ -302,13 +302,13 @@ static int lan966x_port_ifh_xmit(struct sk_buff *skb, return NETDEV_TX_BUSY; } -static void lan966x_ifh_set_bypass(void *ifh, u64 bypass) +void lan966x_ifh_set_bypass(void *ifh, u64 bypass) { packing(ifh, &bypass, IFH_POS_BYPASS + IFH_WID_BYPASS - 1, IFH_POS_BYPASS, IFH_LEN * 4, PACK, 0); } -static void lan966x_ifh_set_port(void *ifh, u64 bypass) +void lan966x_ifh_set_port(void *ifh, u64 bypass) { packing(ifh, &bypass, IFH_POS_DSTS + IFH_WID_DSTS - 1, IFH_POS_DSTS, IFH_LEN * 4, PACK, 0); diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h index 7bb9098496f60..df7fec361962b 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h @@ -105,11 +105,13 @@ enum macaccess_entry_type { * FDMA_PASS, frame is valid and can be used * FDMA_ERROR, something went wrong, stop getting more frames * FDMA_DROP, frame is dropped, but continue to get more frames + * FDMA_TX, frame is given to TX, but continue to get more frames */ enum lan966x_fdma_action { FDMA_PASS = 0, FDMA_ERROR, FDMA_DROP, + FDMA_TX, }; struct lan966x_port; @@ -175,6 +177,7 @@ struct lan966x_rx { struct lan966x_tx_dcb_buf { struct net_device *dev; struct sk_buff *skb; + struct page *page; int len; dma_addr_t dma_addr; bool used; @@ -360,6 +363,8 @@ bool lan966x_hw_offload(struct lan966x *lan966x, u32 port, struct sk_buff *skb); void lan966x_ifh_get_src_port(void *ifh, u64 *src_port); void lan966x_ifh_get_timestamp(void *ifh, u64 *timestamp); +void lan966x_ifh_set_bypass(void *ifh, u64 bypass); +void lan966x_ifh_set_port(void *ifh, u64 bypass); void lan966x_stats_get(struct net_device *dev, struct rtnl_link_stats64 *stats); @@ -460,6 +465,9 @@ u32 lan966x_ptp_get_period_ps(void); int lan966x_ptp_gettime64(struct ptp_clock_info *ptp, struct timespec64 *ts); int lan966x_fdma_xmit(struct sk_buff *skb, __be32 *ifh, struct net_device *dev); +int lan966x_fdma_xmit_xdpf(struct lan966x_port *port, + struct xdp_frame *frame, + struct page *page); int lan966x_fdma_change_mtu(struct lan966x *lan966x); void lan966x_fdma_netdev_init(struct lan966x *lan966x, struct net_device *dev); void lan966x_fdma_netdev_deinit(struct lan966x *lan966x, struct net_device *dev); diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c index bab447e79273f..c7dcb9d443ffa 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c @@ -39,6 +39,7 @@ int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len) { struct bpf_prog *xdp_prog = port->xdp_prog; struct lan966x *lan966x = port->lan966x; + struct xdp_frame *xdpf; struct xdp_buff xdp; u32 act; @@ -51,6 +52,13 @@ int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len) switch (act) { case XDP_PASS: return FDMA_PASS; + case XDP_TX: + xdpf = xdp_convert_buff_to_frame(&xdp); + if (!xdpf) + return FDMA_DROP; + + return lan966x_fdma_xmit_xdpf(port, xdpf, page) ? + FDMA_DROP : FDMA_TX; default: bpf_warn_invalid_xdp_action(port->dev, xdp_prog, act); fallthrough; From patchwork Sun Nov 13 11:15:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 19345 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1638837wru; Sun, 13 Nov 2022 03:19:00 -0800 (PST) X-Google-Smtp-Source: AA0mqf68cM2nuJmQQTAUwyF35rvjywySzn0hTH19lWpXvtb5xl/qExuNTwyc+YhON1vjtUlj6YJJ X-Received: by 2002:a17:906:7ac6:b0:7ae:6746:f26b with SMTP id k6-20020a1709067ac600b007ae6746f26bmr7321317ejo.171.1668338339889; Sun, 13 Nov 2022 03:18:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668338339; cv=none; d=google.com; s=arc-20160816; b=CIHm1z6xH++9Rz/0G2y6QEKspTVkC98sDwI6qirPa21uw+ji5KJLaUTstMA6y0PLIA xK/pcXZSJnfXAG0764278ScUJwDscEGPag/DlqKiGY6pawO09++RMMjvCFGM842+ZanM IdaFKgDHwiXzyywFfxnFv/gxk1GcQWfEshKxXEGvMBFhEU/Nmm94NnqMVxOEkEu5vJ/e x86huu+MY49P+h/jDlSE7Afm9Wr13b43FYaHaUc8tDagNccJb9sS02dLUQH9OMnVwD98 sMwDyFNXov1HLtg5/nLZrzQasOyF4Zktdq9A1TZG1Rwyb0cYTNpr/KjDTLPc5uRg1mFd PcJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4+gp0RgXS5n4IYmjj7OoZhp1+2rBCD3gvw1LFsaYq0A=; b=BR1VhVY3NObGZeHPCN+XgsigTUeME/7DCeJbAqbGCr3YNRKggC+OPL74RuLU0++c/a ZFwh1GiCKJE3Zngm1xD1OqTBRIN7x0KCjnmf7SZROSh3YJ3CpbTQn34ULwwlcTMrs0zG J9KpgvkvYnM8J/n9S4wcv40MOZyrKnWdxhCXHp1rRD1SZ98XGeaFFR46fbS3MbUvnvat RQK/OpWhjBbLeU9OEJDLz6TMLJI5MsstnDCzWVqiKnL3D/Pj9z3zF/h3P9uaKG5CdUVL mDAVQ1eK/pZB/pNOAJcUryqpQjB2lb0e6gIsOQ0HhggQNn80XZcD5FpMQ7TW12XMZgV7 FaNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=zCIoDD4t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s7-20020a50ab07000000b00447eb58b921si6953920edc.38.2022.11.13.03.18.35; Sun, 13 Nov 2022 03:18:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=zCIoDD4t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232676AbiKMLNA (ORCPT + 99 others); Sun, 13 Nov 2022 06:13:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235326AbiKMLMo (ORCPT ); Sun, 13 Nov 2022 06:12:44 -0500 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA62113DD8; Sun, 13 Nov 2022 03:12:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1668337952; x=1699873952; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=y3OtMKzhRZ8Kbbh523DkZkeqZ1JmNxHeI5Ulg2C2sds=; b=zCIoDD4t7P01MX3nD1k7nTHp8+a7vVmbgE5s1zWjgAwfe2EnffAjTobA RC9UI7kVCUui3ryFF5XB/4V0fv/YEqTP52zrY0aomoF9/QAfOlNOzFnqn MgPrkImGgyI4vHzORDSCAFaroPGKliZPiUVC60wOCccBBEhbMV1nWq7B2 NRGV/TnHLG9H84Gxwqo+ptvSo3cP42MxbD7H67FpttMW6+vLZ5GoUuf90 dX9zMe97iPOQcKjw7Za5mplhaJnTSL5A/Ng8F4S3/mENQ/9jahczH7Qtw bhQYyL4UTBwRvyeQEk9IaO5NLhTuX5HHlYtu2EOufNicZFBO4lTBf3vnl w==; X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="183271868" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 13 Nov 2022 04:12:31 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Sun, 13 Nov 2022 04:12:31 -0700 Received: from soft-dev3-1.microsemi.net (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Sun, 13 Nov 2022 04:12:28 -0700 From: Horatiu Vultur To: , , CC: , , , , , , , , , , Horatiu Vultur Subject: [PATCH net-next 5/5] net: lan966x: Add support for XDP_REDIRECT Date: Sun, 13 Nov 2022 12:15:59 +0100 Message-ID: <20221113111559.1028030-6-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.38.0 In-Reply-To: <20221113111559.1028030-1-horatiu.vultur@microchip.com> References: <20221113111559.1028030-1-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749379543381245884?= X-GMAIL-MSGID: =?utf-8?q?1749379543381245884?= Extend lan966x XDP support with the action XDP_REDIRECT. This is similar with the XDP_TX, so a lot of functionality can be reused. Signed-off-by: Horatiu Vultur --- .../ethernet/microchip/lan966x/lan966x_fdma.c | 9 ++++++ .../ethernet/microchip/lan966x/lan966x_main.c | 1 + .../ethernet/microchip/lan966x/lan966x_main.h | 6 ++++ .../ethernet/microchip/lan966x/lan966x_xdp.c | 28 +++++++++++++++++++ 4 files changed, 44 insertions(+) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index a177ca499db4e..18de2880e202c 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ #include +#include #include "lan966x_main.h" @@ -520,6 +521,7 @@ static int lan966x_fdma_napi_poll(struct napi_struct *napi, int weight) int dcb_reload = rx->dcb_index; struct lan966x_rx_dcb *old_dcb; struct lan966x_db *db; + bool redirect = false; struct sk_buff *skb; struct page *page; int counter = 0; @@ -545,6 +547,10 @@ static int lan966x_fdma_napi_poll(struct napi_struct *napi, int weight) case FDMA_TX: lan966x_fdma_rx_advance_dcb(rx); continue; + case FDMA_REDIRECT: + lan966x_fdma_rx_advance_dcb(rx); + redirect = true; + continue; case FDMA_DROP: lan966x_fdma_rx_free_page(rx); lan966x_fdma_rx_advance_dcb(rx); @@ -581,6 +587,9 @@ static int lan966x_fdma_napi_poll(struct napi_struct *napi, int weight) if (counter < weight && napi_complete_done(napi, counter)) lan_wr(0xff, lan966x, FDMA_INTR_DB_ENA); + if (redirect) + xdp_do_flush(); + return counter; } diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c index 0b7707306da26..0aed244826d39 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c @@ -469,6 +469,7 @@ static const struct net_device_ops lan966x_port_netdev_ops = { .ndo_eth_ioctl = lan966x_port_ioctl, .ndo_setup_tc = lan966x_tc_setup, .ndo_bpf = lan966x_xdp, + .ndo_xdp_xmit = lan966x_xdp_xmit, }; bool lan966x_netdevice_check(const struct net_device *dev) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h index df7fec361962b..b73c5a6cc0beb 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h @@ -106,12 +106,14 @@ enum macaccess_entry_type { * FDMA_ERROR, something went wrong, stop getting more frames * FDMA_DROP, frame is dropped, but continue to get more frames * FDMA_TX, frame is given to TX, but continue to get more frames + * FDMA_REDIRECT, frame is given to TX, but continue to get more frames */ enum lan966x_fdma_action { FDMA_PASS = 0, FDMA_ERROR, FDMA_DROP, FDMA_TX, + FDMA_REDIRECT, }; struct lan966x_port; @@ -564,6 +566,10 @@ int lan966x_xdp(struct net_device *dev, struct netdev_bpf *xdp); int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len); +int lan966x_xdp_xmit(struct net_device *dev, + int n, + struct xdp_frame **frames, + u32 flags); static inline bool lan966x_xdp_port_present(struct lan966x_port *port) { return !!port->xdp_prog; diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c index c7dcb9d443ffa..fbf04a82ef994 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_xdp.c @@ -35,6 +35,29 @@ int lan966x_xdp(struct net_device *dev, struct netdev_bpf *xdp) } } +int lan966x_xdp_xmit(struct net_device *dev, + int n, + struct xdp_frame **frames, + u32 flags) +{ + struct lan966x_port *port = netdev_priv(dev); + int i, nxmit = 0; + + for (i = 0; i < n; ++i) { + struct xdp_frame *xdpf = frames[i]; + int err; + + err = lan966x_fdma_xmit_xdpf(port, xdpf, + virt_to_head_page(xdpf->data)); + if (err) + break; + + nxmit++; + } + + return nxmit; +} + int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len) { struct bpf_prog *xdp_prog = port->xdp_prog; @@ -59,6 +82,11 @@ int lan966x_xdp_run(struct lan966x_port *port, struct page *page, u32 data_len) return lan966x_fdma_xmit_xdpf(port, xdpf, page) ? FDMA_DROP : FDMA_TX; + case XDP_REDIRECT: + if (xdp_do_redirect(port->dev, &xdp, xdp_prog)) + return FDMA_DROP; + + return FDMA_REDIRECT; default: bpf_warn_invalid_xdp_action(port->dev, xdp_prog, act); fallthrough;