git: 5d8777f3a7ae - main - dwc: add receive checksum offload for IPv6

From: Michael Tuexen <tuexen_at_FreeBSD.org>
Date: Sat, 17 Jan 2026 20:08:35 UTC
The branch main has been updated by tuexen:

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

commit 5d8777f3a7aee04eabbc9f3cf12138f9b56e3ebc
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2026-01-17 20:06:28 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2026-01-17 20:06:28 +0000

    dwc: add receive checksum offload for IPv6
    
    This patch adds support for receive checksum offload for TCP/IPv6
    and UDP/IPv6. Since receive checksum offload can't be configured
    separately for IPv4 and IPv6, IFCAP_RXCSUM and IFCAP_RXCSUM_IPV6
    can't be changed independently.
    
    Reviewed by:            Timo Völker
    MFC after:              3 days
    Differential Revision:  https://reviews.freebsd.org/D54756
---
 sys/dev/dwc/dwc1000_core.c | 2 +-
 sys/dev/dwc/dwc1000_dma.c  | 4 ++--
 sys/dev/dwc/if_dwc.c       | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/sys/dev/dwc/dwc1000_core.c b/sys/dev/dwc/dwc1000_core.c
index ba895f991b50..ab1d50c61150 100644
--- a/sys/dev/dwc/dwc1000_core.c
+++ b/sys/dev/dwc/dwc1000_core.c
@@ -238,7 +238,7 @@ dwc1000_enable_csum_offload(struct dwc_softc *sc)
 
 	DWC_ASSERT_LOCKED(sc);
 	reg = READ4(sc, MAC_CONFIGURATION);
-	if ((if_getcapenable(sc->ifp) & IFCAP_RXCSUM) != 0)
+	if ((if_getcapenable(sc->ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) != 0)
 		reg |= CONF_IPC;
 	else
 		reg &= ~CONF_IPC;
diff --git a/sys/dev/dwc/dwc1000_dma.c b/sys/dev/dwc/dwc1000_dma.c
index a2a6fbc84e58..6457503d2a7f 100644
--- a/sys/dev/dwc/dwc1000_dma.c
+++ b/sys/dev/dwc/dwc1000_dma.c
@@ -390,8 +390,8 @@ dwc_rxfinish_one(struct dwc_softc *sc, struct dwc_hwdesc *desc,
 	m->m_len = len;
 	if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
 
-	if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0 &&
-	  (rdesc0 & RDESC0_FT) != 0) {
+	if ((if_getcapenable(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) != 0 &&
+	    (rdesc0 & RDESC0_FT) != 0) {
 		m->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
 		if ((rdesc0 & RDESC0_ICE) == 0)
 			m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index ac6e440cf95c..5e2ca216b3c0 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -263,8 +263,8 @@ dwc_ioctl(if_t ifp, u_long cmd, caddr_t data)
 			/* No work to do except acknowledge the change took */
 			if_togglecapenable(ifp, IFCAP_VLAN_MTU);
 		}
-		if (mask & IFCAP_RXCSUM)
-			if_togglecapenable(ifp, IFCAP_RXCSUM);
+		if (mask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6))
+			if_togglecapenable(ifp, IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6);
 		if (mask & IFCAP_TXCSUM)
 			if_togglecapenable(ifp, IFCAP_TXCSUM);
 		if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0)
@@ -614,7 +614,7 @@ dwc_attach(device_t dev)
 	if_setsendqlen(ifp, TX_MAP_COUNT - 1);
 	if_setsendqready(sc->ifp);
 	if_sethwassist(sc->ifp, CSUM_IP | CSUM_DELAY_DATA | CSUM_DELAY_DATA_IPV6);
-	if_setcapabilities(sc->ifp, IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_TXCSUM_IPV6);
+	if_setcapabilities(sc->ifp, IFCAP_VLAN_MTU | IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6);
 	if_setcapenable(sc->ifp, if_getcapabilities(sc->ifp));
 
 	/* Attach the mii driver. */