From patchwork Thu May 9 07:48:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 13659514 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 384F513C9A9 for ; Thu, 9 May 2024 07:48:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715240926; cv=none; b=aqC8NHs5XVsdf0bFk2gAObFeewg0y7xgucBOtObL4WNnp+sRu+rrzJXxNljr6RtL5JK/wKgTxyoZE2pE9ez9v2styv/NvDmyQG/9CnLD41ZAWpngnSOtX+O4KWlLG7aEdDXoa52RhR4C5S5B2mzLaejUBtT+CEmqO7uo5LPwhsY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715240926; c=relaxed/simple; bh=aI1KNgNfrBB3s3Y16MF1j5IdHikayqnAoLD6uN4hV6c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CtfklTPH8RxA3DVGJPnbmIzMLIscKsn36oJ6Hjxs+p46TJdVD5UhRMLHxnx+yFlzCteQFWS/2MzD4GtKqtbXw45eFJUqXH+SXh79kvNnVH7JnVoIOKv6PWQk1HfrFTuGNiI2SqfPoUVgzGk/nAmuW8cCGzJ9pt4GisVuYy4i5c0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QTyxIQFc; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QTyxIQFc" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-a5a1054cf61so129245466b.1 for ; Thu, 09 May 2024 00:48:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1715240923; x=1715845723; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JjFLWEknfZTex6sXau72gRbfcoZhO2p+qTiMxJZwALc=; b=QTyxIQFcGhqivnZwRryekgSZMlSYVkvTD7NDJq64vX+dPKKHJDII6ZQTCXEl+ENTCj py+/V+u0DZDtvARczRfugPBR18eObtOzKS2KRjng4M2+DJOgjUQ+skxLhAbDYmstYzs9 ltb/iqYXmBG915tbCWPN8dVeFcAgMHnoxf/9x/+Kuev5SEJB0hjGEPqll+bGm8LuZX23 7D5fLiPCcZEu3kyEwA16A7G5/+tyw3gtJIoT27A8tJp/+m0rUwgETVA7y44Dhom6Loud 4uyYhCL6OaWUeh4bsbEA4oVRHf+IBTni5xX9pLkU3G7e5AwvaRb6L0QbVXD049H5eQ7U uZBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715240923; x=1715845723; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JjFLWEknfZTex6sXau72gRbfcoZhO2p+qTiMxJZwALc=; b=BJXUiF5JkjK/H+o8H8dAUMvClHz09Wjd4fhBxJdZdjaE1t7vtEBavR79W5HE6YjKa8 Cg59uJ+mF1pGRRzNVjKMtHAHRTq3risEsPs+sr4BANQPkdFT8RVvHsR5mTbx+Vrg16Dk q65Vav0lLzf+Bo7IrGi2LjgdY/+RgsQC/dyFuvwlGVbzDaEv9p5REyCLal2+FjKuagta 6Y2VNN2lgWkU8Cu0p37ltgdSlu0l244cdswSQb7o3ztLpm92/Kz0ZL4q9JLyefUSG8LT rLLJDCTKEVO5aj+r+n5V1ymaF6XakCib0wsoXIx4dy1eWq9a99FQq8XU4nPNR1SRZskw LWKg== X-Gm-Message-State: AOJu0Yz2xZuQpBclCk3gADb/i5ji5rV9oBg8OOoaQ3eXYqah1Jzh5+YK YU4cFXlJDrkg6GIknnJw6d0PVgMc4Wdx0uclRoz10/v1L/OyTycXHLtCDhWwM/k= X-Google-Smtp-Source: AGHT+IE3X/vKkVPWqKeNstNWckf7S91anMr6a0ABEmyBGfs6a8TDC0oGwp7OzIe/8BMNRo6iId99rw== X-Received: by 2002:a17:906:ae87:b0:a59:c7d9:9d38 with SMTP id a640c23a62f3a-a59fb955e75mr408608966b.36.1715240923375; Thu, 09 May 2024 00:48:43 -0700 (PDT) Received: from [192.168.1.140] ([85.235.12.238]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a179c7d65sm44783366b.126.2024.05.09.00.48.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 May 2024 00:48:43 -0700 (PDT) From: Linus Walleij Date: Thu, 09 May 2024 09:48:37 +0200 Subject: [PATCH net-next 1/2] net: ethernet: cortina: Restore TSO support Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240509-gemini-ethernet-fix-tso-v1-1-10cd07b54d1c@linaro.org> References: <20240509-gemini-ethernet-fix-tso-v1-0-10cd07b54d1c@linaro.org> In-Reply-To: <20240509-gemini-ethernet-fix-tso-v1-0-10cd07b54d1c@linaro.org> To: Hans Ulli Kroll , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Linus Walleij X-Mailer: b4 0.13.0 X-Patchwork-Delegate: kuba@kernel.org An earlier commit deleted the TSO support in the Cortina Gemini driver because the driver was confusing gso_size and MTU, probably because what the Linux kernel calls "gso_size" was called "MTU" in the datasheet. Restore the functionality properly reading the gso_size from the skbuff. Tested with iperf3, running a server on a different machine and client on the device with the cortina gemini ethernet: Connecting to host 192.168.1.2, port 5201 60008000.ethernet-port eth0: segment offloading mss = 05a8 len=1c8a 60008000.ethernet-port eth0: segment offloading mss = 05a8 len=1c8a 60008000.ethernet-port eth0: segment offloading mss = 05a8 len=27da 60008000.ethernet-port eth0: segment offloading mss = 05a8 len=0b92 60008000.ethernet-port eth0: segment offloading mss = 05a8 len=2bda (...) It also performs well: ~268 MBit/s. Fixes: ac631873c9e7 ("net: ethernet: cortina: Drop TSO support") Signed-off-by: Linus Walleij --- drivers/net/ethernet/cortina/gemini.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c index c569e5615ecf..599de7914122 100644 --- a/drivers/net/ethernet/cortina/gemini.c +++ b/drivers/net/ethernet/cortina/gemini.c @@ -79,7 +79,8 @@ MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); #define GMAC0_IRQ4_8 (GMAC0_MIB_INT_BIT | GMAC0_RX_OVERRUN_INT_BIT) #define GMAC_OFFLOAD_FEATURES (NETIF_F_SG | NETIF_F_IP_CSUM | \ - NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM | \ + NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) /** * struct gmac_queue_page - page buffer per-page info @@ -1148,13 +1149,29 @@ static int gmac_map_tx_bufs(struct net_device *netdev, struct sk_buff *skb, skb_frag_t *skb_frag; dma_addr_t mapping; void *buffer; + u16 mss; int ret; - /* TODO: implement proper TSO using MTU in word3 */ word1 = skb->len; word3 = SOF_BIT; - if (skb->len >= ETH_FRAME_LEN) { + mss = skb_shinfo(skb)->gso_size; + if (mss) { + /* skb->len will be all segments in this case */ + netdev_dbg(netdev, "segment offloading mss = %04x len=%04x\n", + mss, skb->len); + word1 |= TSS_MTU_ENABLE_BIT; + word3 |= mss; + } else { + mss = skb->len; + } + + /* Translate to link layer size */ + mss += ETH_HLEN; + if (skb->protocol == htons(ETH_P_8021Q)) + mss += VLAN_HLEN; + + if (mss >= ETH_FRAME_LEN) { /* Hardware offloaded checksumming isn't working on frames * bigger than 1514 bytes. A hypothesis about this is that the * checksum buffer is only 1518 bytes, so when the frames get @@ -1169,7 +1186,9 @@ static int gmac_map_tx_bufs(struct net_device *netdev, struct sk_buff *skb, return ret; } word1 |= TSS_BYPASS_BIT; - } else if (skb->ip_summed == CHECKSUM_PARTIAL) { + } + + if (skb->ip_summed == CHECKSUM_PARTIAL) { int tcp = 0; /* We do not switch off the checksumming on non TCP/UDP From patchwork Thu May 9 07:48:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 13659515 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8D5F149C55 for ; Thu, 9 May 2024 07:48:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715240928; cv=none; b=pNFIjADobbHWdD1ZbZsqTMpXj9Xrz3UdSEWNW5MsMMNGLu3aPhFmK8hE5hjdUF2AsizndBpP7YQPzZHJdOs6ex2lmM9r/t/V9JBEIsDFmt9UKtOO4sX1VidKSsNWAitGY3oCECRiuGusQkbzdC9KD/mJcR01yWme4HWv1g/1FcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715240928; c=relaxed/simple; bh=eKflslt6nLXYdoLlZTqRNOAyKpcKOW3KVGxeAKcDXoE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VtHK8dvVQKogUJxLZR6VMW/+j/mJ8gxxxlP16tFHisfMtVsY7n/wS06lZ5gVqE7a8uUDGVlf8isrfzUvRpOM5GGkl+6Iu3SceLM1tP8M0AfmDdDgFX26FI91BZEzuoxbnYOoUy8XT0IyqXJFqSaSJ++drW10hqZyo7Wm1Rjyx8o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=MBkEUswb; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="MBkEUswb" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-a59b097b202so125528966b.0 for ; Thu, 09 May 2024 00:48:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1715240924; x=1715845724; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8vBzlEdh++Xq9GUTz6TB/P3FoiauMYeqkoCZXeTS91Y=; b=MBkEUswbUpCMnSL0UYzbww4MEQHcBO54/Ww+EoJAmbk7wDPZ8yboca6BAoJMUmM7Og iixWg1UuCt2yREST4hJgqctQueWai60UqPn3QsFymOrCtI7insQF6Srl9aN0xZuv+QV9 LmesDXcb9GgrYIJlqL6q6aIBvvC9pJvUrnS6OCXhAOwOQ8Y4fCfb/8Tp0Yy7yZmK/hoW eU+PsvggFyq0IkW2Ljg9DpEUJjGtP+67i8Acg7OSL79iaO69Vj4oC+MiTMyx5bdbsrHR /lElhf/7Mr87FcCnPWKzOOJ5ZFIi1eEO8pTJwVbIbAhddSK2i35fYGkoZdsy5KsfzY2F Nteg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715240924; x=1715845724; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8vBzlEdh++Xq9GUTz6TB/P3FoiauMYeqkoCZXeTS91Y=; b=xKPEzXoaBiYLwG4S+nEtKbDLIdd4KvLmYNlrVV/O3efSD2XPDoEqDoJLSMIouxFI8t PKdnglH0KYfSYHslsBu8OlfMVsLRoQmmapx8K3KdnAi8cQJGdbX7vnzlNURlZk4hVngp 0p/OpyDN9M1UQatMiODaZB48E2XXdq70eHch/IXgxGsVlyqRDZZ8UPH8PDns7rphF2CV PXe6BhMGVb8lakgo4GDLNLHMiSnPZ+F1z6jCS9zISyb0WLK280b26NnF0uSYUIXH9zt6 bjCi4RVr42Y7giIvUonTaKXI8nct95St0oInYWJCK1ggJ74txHdVAp19AeqYi+JyFwhZ n4Dw== X-Gm-Message-State: AOJu0YwXoXi/ohzNm3vQatRptKWTfVyg+69/fTtwr1C0ZkWWVQ52uSU1 eh+dNQVQvv1oU07Gb+7Z3OsJT79ujRgPOCgpECtpNOMipQ2ieK63jnKsBba4I+k= X-Google-Smtp-Source: AGHT+IFPzoruFCjOL5jl7DhwP12AjWlf4QaNFaQDXT2uqQEJODrkmjGjxZWtPPxYaRx5mCC9GSv5kQ== X-Received: by 2002:a17:906:1688:b0:a59:c9ce:3389 with SMTP id a640c23a62f3a-a59fb9dbc4emr308112966b.67.1715240924408; Thu, 09 May 2024 00:48:44 -0700 (PDT) Received: from [192.168.1.140] ([85.235.12.238]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a179c7d65sm44783366b.126.2024.05.09.00.48.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 May 2024 00:48:44 -0700 (PDT) From: Linus Walleij Date: Thu, 09 May 2024 09:48:38 +0200 Subject: [PATCH net-next 2/2] net: ethernet: cortina: Implement .set_pauseparam() Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240509-gemini-ethernet-fix-tso-v1-2-10cd07b54d1c@linaro.org> References: <20240509-gemini-ethernet-fix-tso-v1-0-10cd07b54d1c@linaro.org> In-Reply-To: <20240509-gemini-ethernet-fix-tso-v1-0-10cd07b54d1c@linaro.org> To: Hans Ulli Kroll , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Linus Walleij X-Mailer: b4 0.13.0 X-Patchwork-Delegate: kuba@kernel.org The Cortina Gemini ethernet can very well set up TX or RX pausing, so add this functionality to the driver in a .set_pauseparam() callback. Signed-off-by: Linus Walleij --- drivers/net/ethernet/cortina/gemini.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c index 599de7914122..c732e985055f 100644 --- a/drivers/net/ethernet/cortina/gemini.c +++ b/drivers/net/ethernet/cortina/gemini.c @@ -2138,6 +2138,28 @@ static void gmac_get_pauseparam(struct net_device *netdev, pparam->autoneg = true; } +static int gmac_set_pauseparam(struct net_device *netdev, + struct ethtool_pauseparam *pparam) +{ + struct gemini_ethernet_port *port = netdev_priv(netdev); + union gmac_config0 config0; + + config0.bits32 = readl(port->gmac_base + GMAC_CONFIG0); + + if (pparam->rx_pause) + config0.bits.rx_fc_en = 1; + if (pparam->tx_pause) + config0.bits.tx_fc_en = 1; + /* We only support autonegotiation */ + if (!pparam->autoneg) + return -EINVAL; + + writel(config0.bits32, port->gmac_base + GMAC_CONFIG0); + + return 0; +} + + static void gmac_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *rp, struct kernel_ethtool_ringparam *kernel_rp, @@ -2258,6 +2280,7 @@ static const struct ethtool_ops gmac_351x_ethtool_ops = { .set_link_ksettings = gmac_set_ksettings, .nway_reset = gmac_nway_reset, .get_pauseparam = gmac_get_pauseparam, + .set_pauseparam = gmac_set_pauseparam, .get_ringparam = gmac_get_ringparam, .set_ringparam = gmac_set_ringparam, .get_coalesce = gmac_get_coalesce,