Received: by 2002:a05:6358:51dd:b0:131:369:b2a3 with SMTP id 29csp1246595rwl; Thu, 10 Aug 2023 08:26:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFlLHUoqbBjVOy9qkCM9sbxoCy1ZYfWmJVBHHkPm7pKoLj7dthSJY22tuTTOGDewhrK0N94 X-Received: by 2002:a17:907:7809:b0:99b:f3ef:f084 with SMTP id la9-20020a170907780900b0099bf3eff084mr2664094ejc.66.1691681181444; Thu, 10 Aug 2023 08:26:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691681181; cv=none; d=google.com; s=arc-20160816; b=0ooo2hffiMXnJKgM4lWxY3ZLQf51a7pxUuM8SQhFkHIdxgqE2Cf1mYUwvdOnwt2ZEm LPoJThFbVMzAENUMPyrUz6gg5l/rUdw1hQtu8nRD+D1gXsK5om8LvFNYhcjgr5V+fFTy GStwNiL6hqVYB9iSVHjCYKrdyUB6TkRAGff1Ns8foewQ0MvAJodby1E8oDopZuKcKz93 CS5waRP1DzQsG1FzfeaXex4ZMzJps0G75P+iTsxi40TUVkBvh21ZiNNvJz07l+KxKiKv VjTwQ5tFkQtxOKUUnJ30lRC5GclDg6iUZB94UgQyqEQnEOyp96MsyxBNtbihVSITDYUh IQUw== 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=GUmtU+K6N7Dbe9Vf8uOVaLJBqLAcoIL5uQ7uaL35Eg4=; fh=sffvnmpTf39j8lhAczxsttbfALxQIS7wZ7XvIwegTiw=; b=xiigjLGAZ/t0Z5CBuoMkiVjIXLotmF/dORKu+tkq7TsvXB5NxCf+EEGcknp2x7q4s6 m4rUE8mv3ZQFB3l4mLvsZvrHXZpEfA1CjJC+ADJaI4uMD110H2azE07ubVpIV/j34QDd r+eR+r0ptE6wXmPn99wMuiFH14AVCo6AdJJcwOzalRyMMQCmD5LwfXS7sf5oYOoBBKBf rZL83Vita2VPj4VUiunQdQO/1DN6LoEsozP4Zxu3wfCnO4kvqRuwWPKJMWrQBjwzK9n1 +vpcyLq9L4a+X6TlVzijDuikXDsii1/vZnzlEOv1n8O/+pAX6CeIcP4a9/HlsUwHn9Kx aIYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=go7UncKm; 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=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e14-20020a1709062c0e00b0099bcde0f1b1si1739778ejh.152.2023.08.10.08.25.56; Thu, 10 Aug 2023 08:26:21 -0700 (PDT) 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=@intel.com header.s=Intel header.b=go7UncKm; 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=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236018AbjHJPGH (ORCPT + 99 others); Thu, 10 Aug 2023 11:06:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236022AbjHJPGE (ORCPT ); Thu, 10 Aug 2023 11:06:04 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35391270B; Thu, 10 Aug 2023 08:06:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691679963; x=1723215963; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=S8YzG04gocUZ9R3udkExKMtCGsxlemTcewQ0cbLcHDw=; b=go7UncKmK5OIsb+eR8hj/A1kn1uPEZmvuwMCfC0Jr/+oug3h9vvnPvVk CT04F0OwJ4S/bHewhyGIY0WwAFncyvSvNx3BujvcfpFcpn/kV4cPXk77W WIWsjUZqaX/QpQrBhrF9PTej9gl4xlge4ZvJVAefneQFaC8gwc61aLfMb 78W8iuE7yYi22FVBcVGnNHo0gzjJr0R6Wk2j9qDswl3Lou8Gu8Z/si4SF 0ljABbIJGfquHQqrt3xcTxjvjWpjLSXlskd4Nuul+MOdkUli9AhWVF9Pe fINIJtFQ/dVthwbSmsIMhmy743s379+YXviFQkEylF4l16Ut3nfpHI0GA Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10798"; a="368901759" X-IronPort-AV: E=Sophos;i="6.01,162,1684825200"; d="scan'208";a="368901759" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Aug 2023 08:03:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10798"; a="978821689" X-IronPort-AV: E=Sophos;i="6.01,162,1684825200"; d="scan'208";a="978821689" Received: from pglc00052.png.intel.com ([10.221.207.72]) by fmsmga006.fm.intel.com with ESMTP; 10 Aug 2023 08:03:51 -0700 From: Rohan G Thomas To: "David S . Miller" , Alexandre Torgue , Jose Abreu , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Rohan G Thomas Subject: [PATCH net-next 2/2] net: stmmac: Tx coe sw fallback Date: Thu, 10 Aug 2023 23:03:28 +0800 Message-Id: <20230810150328.19704-3-rohan.g.thomas@intel.com> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20230810150328.19704-1-rohan.g.thomas@intel.com> References: <20230810150328.19704-1-rohan.g.thomas@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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_NONE,SPF_NONE 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 Add sw fallback of tx checksum calculation for those tx queues that doesn't support tx checksum offloading. Because, some DWMAC IPs support tx checksum offloading only for few initial tx queues, starting from tx queue 0. Signed-off-by: Rohan G Thomas --- drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 ++ .../net/ethernet/stmicro/stmmac/stmmac_main.c | 19 +++++++++++++++++++ .../ethernet/stmicro/stmmac/stmmac_platform.c | 4 ++++ include/linux/stmmac.h | 1 + 4 files changed, 26 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h index 3401e888a9f6..f526bcaaaf64 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h @@ -219,6 +219,8 @@ struct stmmac_priv { int hwts_tx_en; bool tx_path_in_lpi_mode; bool tso; + bool tx_q_coe_lmt; + u32 tx_q_with_coe; int sph; int sph_cap; u32 sarc_type; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index fcab363d8dfa..e095a9bd93b1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -4409,6 +4409,17 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) WARN_ON(tx_q->tx_skbuff[first_entry]); csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL); + /* Some DWMAC IPs support tx coe only for a few initial tx queues, + * starting from tx queue 0. So checksum offloading for those queues + * that doesn't support tx coe need to fallback to software checksum + * calculation. + */ + if (csum_insertion && priv->tx_q_coe_lmt && + queue >= priv->tx_q_with_coe) { + if (unlikely(skb_checksum_help(skb))) + goto dma_map_err; + csum_insertion = !csum_insertion; + } if (likely(priv->extend_desc)) desc = (struct dma_desc *)(tx_q->dma_etx + entry); @@ -7386,6 +7397,14 @@ int stmmac_dvr_probe(struct device *device, dev_info(priv->device, "SPH feature enabled\n"); } + if (priv->plat->tx_coe && + priv->plat->tx_queues_with_coe < priv->plat->tx_queues_to_use) { + priv->tx_q_coe_lmt = true; + priv->tx_q_with_coe = priv->plat->tx_queues_with_coe; + dev_info(priv->device, "TX COE limited to %u tx queues\n", + priv->tx_q_with_coe); + } + /* Ideally our host DMA address width is the same as for the * device. However, it may differ and then we have to use our * host DMA width for allocation and the device DMA width for diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index be8e79c7aa34..0138b7c9c7ab 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c @@ -225,6 +225,10 @@ static int stmmac_mtl_setup(struct platform_device *pdev, &plat->tx_queues_to_use)) plat->tx_queues_to_use = 1; + if (of_property_read_u32(tx_node, "snps,tx-queues-with-coe", + &plat->tx_queues_with_coe)) + plat->tx_queues_with_coe = plat->tx_queues_to_use; + if (of_property_read_bool(tx_node, "snps,tx-sched-wrr")) plat->tx_sched_algorithm = MTL_TX_ALGORITHM_WRR; else if (of_property_read_bool(tx_node, "snps,tx-sched-wfq")) diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 652404c03944..795c10d19c1c 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -252,6 +252,7 @@ struct plat_stmmacenet_data { u32 host_dma_width; u32 rx_queues_to_use; u32 tx_queues_to_use; + u32 tx_queues_with_coe; u8 rx_sched_algorithm; u8 tx_sched_algorithm; struct stmmac_rxq_cfg rx_queues_cfg[MTL_MAX_RX_QUEUES]; -- 2.26.2