Skip to content

Commit feeef68

Browse files
Michael Chankuba-moo
authored andcommitted
bnxt_en: Add support for UDP GSO on 5760X chips
The new 5760X chips supports UDP GSO. Tested using udpgso_bench_tx. Reviewed-by: Andy Gospodarek <[email protected]> Reviewed-by: Somnath Kotur <[email protected]> Signed-off-by: Michael Chan <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 6ce3062 commit feeef68

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -587,12 +587,21 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
587587

588588
txbd1->tx_bd_hsize_lflags = lflags;
589589
if (skb_is_gso(skb)) {
590+
bool udp_gso = !!(skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4);
590591
u32 hdr_len;
591592

592-
if (skb->encapsulation)
593-
hdr_len = skb_inner_tcp_all_headers(skb);
594-
else
593+
if (skb->encapsulation) {
594+
if (udp_gso)
595+
hdr_len = skb_inner_transport_offset(skb) +
596+
sizeof(struct udphdr);
597+
else
598+
hdr_len = skb_inner_tcp_all_headers(skb);
599+
} else if (udp_gso) {
600+
hdr_len = skb_transport_offset(skb) +
601+
sizeof(struct udphdr);
602+
} else {
595603
hdr_len = skb_tcp_all_headers(skb);
604+
}
596605

597606
txbd1->tx_bd_hsize_lflags |= cpu_to_le32(TX_BD_FLAGS_LSO |
598607
TX_BD_FLAGS_T_IPID |
@@ -8345,6 +8354,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
83458354
flags_ext2 = le32_to_cpu(resp->flags_ext2);
83468355
if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_RX_ALL_PKTS_TIMESTAMPS_SUPPORTED)
83478356
bp->fw_cap |= BNXT_FW_CAP_RX_ALL_PKT_TS;
8357+
if (flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_UDP_GSO_SUPPORTED)
8358+
bp->flags |= BNXT_FLAG_UDP_GSO_CAP;
83488359

83498360
bp->tx_push_thresh = 0;
83508361
if ((flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED) &&
@@ -14351,6 +14362,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1435114362
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
1435214363
NETIF_F_GSO_PARTIAL | NETIF_F_RXHASH |
1435314364
NETIF_F_RXCSUM | NETIF_F_GRO;
14365+
if (bp->flags & BNXT_FLAG_UDP_GSO_CAP)
14366+
dev->hw_features |= NETIF_F_GSO_UDP_L4;
1435414367

1435514368
if (BNXT_SUPPORTS_TPA(bp))
1435614369
dev->hw_features |= NETIF_F_LRO;
@@ -14361,6 +14374,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1436114374
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
1436214375
NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
1436314376
NETIF_F_GSO_IPXIP4 | NETIF_F_GSO_PARTIAL;
14377+
if (bp->flags & BNXT_FLAG_UDP_GSO_CAP)
14378+
dev->hw_enc_features |= NETIF_F_GSO_UDP_L4;
1436414379
if (bp->flags & BNXT_FLAG_CHIP_P7)
1436514380
dev->udp_tunnel_nic_info = &bnxt_udp_tunnels_p7;
1436614381
else

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,6 +2044,7 @@ struct bnxt {
20442044
#define BNXT_FLAG_MULTI_HOST 0x100000
20452045
#define BNXT_FLAG_DSN_VALID 0x200000
20462046
#define BNXT_FLAG_DOUBLE_DB 0x400000
2047+
#define BNXT_FLAG_UDP_GSO_CAP 0x800000
20472048
#define BNXT_FLAG_CHIP_NITRO_A0 0x1000000
20482049
#define BNXT_FLAG_DIM 0x2000000
20492050
#define BNXT_FLAG_ROCE_MIRROR_CAP 0x4000000

0 commit comments

Comments
 (0)