You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.0 KiB
83 lines
3.0 KiB
5 years ago
|
From f18c355c95b64d442e4f0cee4e44f6ef2b3d8905 Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Date: Wed, 2 Oct 2019 18:23:04 -0400
|
||
|
Subject: [PATCH 49/96] [netdrv] bnxt_en: Add hardware GRO setup function for
|
||
|
57500 chips
|
||
|
|
||
|
Message-id: <8e748026e423be248e251a6fb5aa5c7dc5814864.1570027456.git.jtoppins@redhat.com>
|
||
|
Patchwork-id: 276466
|
||
|
O-Subject: [RHEL-8.2 PATCH 42/78] bnxt_en: Add hardware GRO setup function for 57500 chips.
|
||
|
Bugzilla: 1724766
|
||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||
|
|
||
|
Add a more optimized hardware GRO function to setup the SKB on 57500
|
||
|
chips. Some workaround code is no longer needed on 57500 chips and
|
||
|
the pseudo checksum is also calculated in hardware, so no need to
|
||
|
do the software pseudo checksum in the driver.
|
||
|
|
||
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
(cherry picked from commit 67912c366d4bb0a9d108459e7c845cc7ba83f76f)
|
||
|
Bugzilla: 1724766
|
||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||
|
Tested: build, boot, basic ping
|
||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||
|
---
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 33 ++++++++++++++++++++++++++++++-
|
||
|
1 file changed, 32 insertions(+), 1 deletion(-)
|
||
|
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.749503615 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.886502357 +0100
|
||
|
@@ -1361,6 +1361,35 @@
|
||
|
return skb;
|
||
|
}
|
||
|
|
||
|
+static struct sk_buff *bnxt_gro_func_5750x(struct bnxt_tpa_info *tpa_info,
|
||
|
+ int payload_off, int tcp_ts,
|
||
|
+ struct sk_buff *skb)
|
||
|
+{
|
||
|
+#ifdef CONFIG_INET
|
||
|
+ u16 outer_ip_off, inner_ip_off, inner_mac_off;
|
||
|
+ u32 hdr_info = tpa_info->hdr_info;
|
||
|
+ int iphdr_len, nw_off;
|
||
|
+
|
||
|
+ inner_ip_off = BNXT_TPA_INNER_L3_OFF(hdr_info);
|
||
|
+ inner_mac_off = BNXT_TPA_INNER_L2_OFF(hdr_info);
|
||
|
+ outer_ip_off = BNXT_TPA_OUTER_L3_OFF(hdr_info);
|
||
|
+
|
||
|
+ nw_off = inner_ip_off - ETH_HLEN;
|
||
|
+ skb_set_network_header(skb, nw_off);
|
||
|
+ iphdr_len = (tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_IP_TYPE) ?
|
||
|
+ sizeof(struct ipv6hdr) : sizeof(struct iphdr);
|
||
|
+ skb_set_transport_header(skb, nw_off + iphdr_len);
|
||
|
+
|
||
|
+ if (inner_mac_off) { /* tunnel */
|
||
|
+ __be16 proto = *((__be16 *)(skb->data + outer_ip_off -
|
||
|
+ ETH_HLEN - 2));
|
||
|
+
|
||
|
+ bnxt_gro_tunnel(skb, proto);
|
||
|
+ }
|
||
|
+#endif
|
||
|
+ return skb;
|
||
|
+}
|
||
|
+
|
||
|
#define BNXT_IPV4_HDR_SIZE (sizeof(struct iphdr) + sizeof(struct tcphdr))
|
||
|
#define BNXT_IPV6_HDR_SIZE (sizeof(struct ipv6hdr) + sizeof(struct tcphdr))
|
||
|
|
||
|
@@ -10920,8 +10949,10 @@
|
||
|
#endif
|
||
|
if (BNXT_SUPPORTS_TPA(bp)) {
|
||
|
bp->gro_func = bnxt_gro_func_5730x;
|
||
|
- if (BNXT_CHIP_P4_PLUS(bp))
|
||
|
+ if (BNXT_CHIP_P4(bp))
|
||
|
bp->gro_func = bnxt_gro_func_5731x;
|
||
|
+ else if (BNXT_CHIP_P5(bp))
|
||
|
+ bp->gro_func = bnxt_gro_func_5750x;
|
||
|
}
|
||
|
if (!BNXT_CHIP_P4_PLUS(bp))
|
||
|
bp->flags |= BNXT_FLAG_DOUBLE_DB;
|