git: f31336b3e314 - main - dpnaa2: announce transmit checksum support

From: Michael Tuexen <tuexen_at_FreeBSD.org>
Date: Fri, 23 Jan 2026 08:00:09 UTC
The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=f31336b3e3146fed9cc517fef8e877c17496f9e0

commit f31336b3e3146fed9cc517fef8e877c17496f9e0
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2026-01-23 07:59:57 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2026-01-23 07:59:57 +0000

    dpnaa2: announce transmit checksum support
    
    Let the network stack know that the NIC supports checksum offloading
    for the IPv4 header checksum and the TCP and UDP transport checksum.
    This avoids the computation in software and therefore provides the
    expected performance gain.
    
    PR:                     292006
    Reviewed by:            dsl, Timo Völker
    MFC after:              3 days
    Differential Revision:  https://reviews.freebsd.org/D54809
---
 sys/dev/dpaa2/dpaa2_ni.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/dev/dpaa2/dpaa2_ni.c b/sys/dev/dpaa2/dpaa2_ni.c
index eda5bab78bde..5f796e6e472b 100644
--- a/sys/dev/dpaa2/dpaa2_ni.c
+++ b/sys/dev/dpaa2/dpaa2_ni.c
@@ -220,6 +220,9 @@ MALLOC_DEFINE(M_DPAA2_TXB, "dpaa2_txb", "DPAA2 DMA-mapped buffer (Tx)");
 #define	RXH_L4_B_2_3		(1 << 7) /* dst port in case of TCP/UDP/SCTP */
 #define	RXH_DISCARD		(1 << 31)
 
+/* Transmit checksum offload */
+#define DPAA2_CSUM_TX_OFFLOAD	(CSUM_IP | CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6)
+
 /* Default Rx hash options, set during attaching. */
 #define DPAA2_RXH_DEFAULT	(RXH_IP_SRC | RXH_IP_DST | RXH_L4_B_0_1 | RXH_L4_B_2_3)
 
@@ -559,6 +562,7 @@ dpaa2_ni_attach(device_t dev)
 	if_settransmitfn(ifp, dpaa2_ni_transmit);
 	if_setqflushfn(ifp, dpaa2_ni_qflush);
 
+	if_sethwassist(sc->ifp, DPAA2_CSUM_TX_OFFLOAD);
 	if_setcapabilities(ifp, IFCAP_VLAN_MTU | IFCAP_HWCSUM |
 	    IFCAP_HWCSUM_IPV6 | IFCAP_JUMBO_MTU);
 	if_setcapenable(ifp, if_getcapabilities(ifp));
@@ -2600,8 +2604,10 @@ dpaa2_ni_ioctl(if_t ifp, u_long c, caddr_t data)
 		changed = if_getcapenable(ifp) ^ ifr->ifr_reqcap;
 		if ((changed & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) != 0)
 			if_togglecapenable(ifp, IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6);
-		if ((changed & (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6)) != 0)
-                        if_togglecapenable(ifp, IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6);
+		if ((changed & (IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6)) != 0) {
+			if_togglecapenable(ifp, IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6);
+			if_togglehwassist(ifp, DPAA2_CSUM_TX_OFFLOAD);
+		}
 
 		rc = dpaa2_ni_setup_if_caps(sc);
 		if (rc) {