From patchwork Fri Dec 22 21:56:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 135531 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1785F43762; Fri, 22 Dec 2023 22:57:15 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 097F34067C; Fri, 22 Dec 2023 22:57:09 +0100 (CET) Received: from mail-il1-f181.google.com (mail-il1-f181.google.com [209.85.166.181]) by mails.dpdk.org (Postfix) with ESMTP id 9442E402A6 for ; Fri, 22 Dec 2023 22:57:06 +0100 (CET) Received: by mail-il1-f181.google.com with SMTP id e9e14a558f8ab-35f56f06142so13798205ab.1 for ; Fri, 22 Dec 2023 13:57:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1703282225; x=1703887025; darn=dpdk.org; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=SBIJZMV2sj9H76nYr0LjkXUSfqEmMDhAxTwTt4ASNIE=; b=KLCVqIOTlXLuSbwjkUgoOHVbJz5nVxO3JUrCtlxMkORzHeHGk1zDgWQmiDOl/qvP0x iaxBQrIJuEdgdkMD4/JHatcmGMpDyHnGnkVLmCPSkyzSnmEiPktOolpc2Onikpxncdo6 yFN78tl42C3FFEfWMCDDBgnJlCOVJ3wxIjxOE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703282225; x=1703887025; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SBIJZMV2sj9H76nYr0LjkXUSfqEmMDhAxTwTt4ASNIE=; b=VEB1JeEFBGcCuoXAfRmCfjv5Q2ms37EYmLxh2xV3NoTU71/Iz9VSkGbdvmIy5LloVX tYmSJbU4HDZewob1zubIxBG3SzOYwonMIRlvwjqK2ekMVkxATnQEjDwj4rJNDWwJxaq4 n8XQi4LMSHesrSGs/uG3BmCwCFBIOqyeXaB43hNJEEwwq8NR4eMOGMoDz+YSEo438xJc YI184ggaHVOdQAxlH6VFOSZ8r3Tzo7MZdLTYb5hGFv0SHqHNLrNc9TF8UF7WqMqy73CZ OX7o/ojISQ9Ee4LrWo8PBP7RiqmxWJCsTc++d4muOqRwLvipLXomFYognnq2+AYNbIyc ls+Q== X-Gm-Message-State: AOJu0Ywb6TvqkoSmWZ0FYpjbO0JH08+hiw/2vJhn59b6YHjeRbIf4Cel 2gPsZptXb/PnTh5Xz2YCFc2IvS/2mAWqXR24qBiR28ufsh5ycKc2jCFY9m45P7Ox7agQQTdvCZR TiwMQJ2s9t9iK7MktCKm4kCmXAbDIP/y29o8doZCqa7Ro7osJVcFz3wL8mNnYvVTMeh3CQyAIrY k= X-Google-Smtp-Source: AGHT+IEsLEVfp7cgmDGxvIWUrfXUrOotjEKtD4+azUYe3gAzLR+bx/EHLMkWf4TJikWjmStPUSyg9A== X-Received: by 2002:a05:6e02:1a02:b0:35f:eb24:bb54 with SMTP id s2-20020a056e021a0200b0035feb24bb54mr32955ild.99.1703282225523; Fri, 22 Dec 2023 13:57:05 -0800 (PST) Received: from C02GC2QQMD6T.wifi.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id sr5-20020a17090b4e8500b0028afd8b1e0bsm3540700pjb.57.2023.12.22.13.57.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 13:57:04 -0800 (PST) From: Ajit Khaparde To: dev@dpdk.org Cc: Damodharam Ammepalli Subject: [PATCH v2 01/18] net/bnxt: add support for UDP GSO Date: Fri, 22 Dec 2023 13:56:42 -0800 Message-Id: <20231222215659.64993-2-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) In-Reply-To: <20231222215659.64993-1-ajit.khaparde@broadcom.com> References: <20231222215659.64993-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org UDP GSO aka UDP Fragmentation Offload allows an application or stack to provide a data payload larger than the MTU. The application then updates the mbuf ol_flags and sets the PKT_TX_UDP_SEG flag. Then based on the tso_segs and tso_mss fields in the mbuf the PMD can indicate the UDP GSO transmit request to the hardware. This feature is supported on Thor2 and will be enabled when the firmware sets the UDP GSO support via the HWRM_FUNC_QCAPS. Signed-off-by: Ajit Khaparde Reviewed-by: Damodharam Ammepalli --- drivers/net/bnxt/bnxt.h | 1 + drivers/net/bnxt/bnxt_hwrm.c | 2 ++ drivers/net/bnxt/bnxt_txq.c | 2 ++ drivers/net/bnxt/bnxt_txr.c | 7 ++++++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 7aed4c3da3..4b5c2c4b8f 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -801,6 +801,7 @@ struct bnxt { (BNXT_CHIP_P5_P7((bp)) && \ (bp)->hwrm_spec_code >= HWRM_VERSION_1_9_2 && \ !BNXT_VF((bp))) +#define BNXT_FW_CAP_UDP_GSO BIT(13) #define BNXT_TRUFLOW_EN(bp) ((bp)->fw_cap & BNXT_FW_CAP_TRUFLOW_EN &&\ (bp)->app_id != 0xFF) diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index e56f7693af..37cf179938 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -950,6 +950,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) flags_ext2 = rte_le_to_cpu_32(resp->flags_ext2); if (flags_ext2 & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT2_RX_ALL_PKTS_TIMESTAMPS_SUPPORTED) bp->fw_cap |= BNXT_FW_CAP_RX_ALL_PKT_TS; + if (flags_ext2 & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_EXT2_UDP_GSO_SUPPORTED) + bp->fw_cap |= BNXT_FW_CAP_UDP_GSO; unlock: HWRM_UNLOCK(); diff --git a/drivers/net/bnxt/bnxt_txq.c b/drivers/net/bnxt/bnxt_txq.c index 4df4604975..f99ad211db 100644 --- a/drivers/net/bnxt/bnxt_txq.c +++ b/drivers/net/bnxt/bnxt_txq.c @@ -42,6 +42,8 @@ uint64_t bnxt_get_tx_port_offloads(struct bnxt *bp) tx_offload_capa |= RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO; if (BNXT_TUNNELED_OFFLOADS_CAP_IPINIP_EN(bp)) tx_offload_capa |= RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO; + if (bp->fw_cap & BNXT_FW_CAP_UDP_GSO) + tx_offload_capa |= RTE_ETH_TX_OFFLOAD_UDP_TSO; return tx_offload_capa; } diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index 899986764f..38da2d2829 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -123,6 +123,10 @@ bnxt_xmit_need_long_bd(struct rte_mbuf *tx_pkt, struct bnxt_tx_queue *txq) return false; } +/* Used for verifying TSO segments during TCP Segmentation Offload or + * UDP Fragmentation Offload. tx_pkt->tso_segsz stores the number of + * segments or fragments in those cases. + */ static bool bnxt_zero_data_len_tso_segsz(struct rte_mbuf *tx_pkt, uint8_t data_len_chk) { @@ -308,7 +312,8 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, else txbd1->cfa_action = txq->bp->tx_cfa_action; - if (tx_pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG) { + if (tx_pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG || + tx_pkt->ol_flags & RTE_MBUF_F_TX_UDP_SEG) { uint16_t hdr_size; /* TSO */