Index | Thread | Search

From:
Kevin Lo <kevlo@kevlo.org>
Subject:
axen: add support for ax88772d
To:
tech@openbsd.org
Date:
Mon, 7 Oct 2024 13:05:46 +0800

Download raw body.

Thread
Hi,

AX88772D is a USB 2.0 device.  It is very similar to AX88192A overall.
The most significant difference is that AX88192A supports 1000Mbps speeds
while AX88772D does not.

Tested on:
axen0 at uhub0 port 1 configuration 1 interface 0 "ASIX AX88772D" rev 2.10/3.00 addr 2
axen0: USB_SPEED_HIGHaxen0: AX88772D, address 20:7b:d2:xx:xx:xx
ukphy0 at axen0 phy 3: Generic IEEE 802.3u media interface, rev. 1: OUI 0x00070b, model 0x0006

ok?

Index: share/man/man4/axen.4
===================================================================
RCS file: /cvs/src/share/man/man4/axen.4,v
diff -u -p -u -p -r1.10 axen.4
--- share/man/man4/axen.4	4 Jan 2024 08:41:59 -0000	1.10
+++ share/man/man4/axen.4	7 Oct 2024 02:31:09 -0000
@@ -19,7 +19,7 @@
 .Os
 .Sh NAME
 .Nm axen
-.Nd ASIX Electronics AX88179/AX88179A 10/100/1Gb USB Ethernet device
+.Nd ASIX Electronics AX88179/AX88179A/AX88772D 10/100/1Gb USB Ethernet device
 .Sh SYNOPSIS
 .Cd "axen*   at uhub?"
 .Cd "rgephy* at mii?"
@@ -28,7 +28,7 @@
 The
 .Nm
 driver provides support for USB Ethernet adapters based on the ASIX
-Electronics AX88179/AX88179A USB 3.0 chipset, including the following:
+Electronics AX88179/AX88179A/AX88772D chipset, including the following:
 .Pp
 .Bl -tag -width Ds -offset indent -compact
 .It D-Link DUB-1312
@@ -38,7 +38,13 @@ Electronics AX88179/AX88179A USB 3.0 chi
 .It StarTech USB31000S
 .It TP-LINK UE300C v2
 .It TP-Link UE306
+.It Ugreen CM650-15632
 .El
+.Pp
+The AX88772D is USB 2.0 device which supports both
+10 and 100Mbps speeds in either full or half duplex.
+The AX88179 and AX88179A are USB 3.0 devices, which contain
+a 10/100/1Gb Ethernet MAC with a GMII/MII interface.
 .Pp
 The
 .Nm
Index: share/man/man4/usb.4
===================================================================
RCS file: /cvs/src/share/man/man4/usb.4,v
diff -u -p -u -p -r1.219 usb.4
--- share/man/man4/usb.4	15 May 2024 01:41:18 -0000	1.219
+++ share/man/man4/usb.4	7 Oct 2024 02:31:09 -0000
@@ -112,7 +112,7 @@ ADMtek AN986/ADM8511 Pegasus family 10/1
 .It Xr axe 4
 ASIX Electronics AX88172/AX88178/AX88772 10/100/1Gb USB Ethernet device
 .It Xr axen 4
-ASIX Electronics AX88179/AX88179A 10/100/1Gb USB Ethernet device
+ASIX Electronics AX88179/AX88179A/AX88772D 10/100/1Gb USB Ethernet device
 .It Xr cdce 4
 USB Communication Device Class Ethernet device
 .It Xr cue 4
Index: sys/dev/usb/if_axen.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_axen.c,v
diff -u -p -u -p -r1.33 if_axen.c
--- sys/dev/usb/if_axen.c	23 May 2024 03:21:08 -0000	1.33
+++ sys/dev/usb/if_axen.c	7 Oct 2024 02:31:11 -0000
@@ -17,7 +17,7 @@
  */

 /*
- * ASIX Electronics AX88178a USB 2.0 ethernet and
+ * ASIX Electronics AX88178a/AX88772d USB 2.0 ethernet and
  * AX88179/AX88179a USB 3.0 Ethernet driver.
  */

@@ -251,6 +251,8 @@ axen_miibus_statchg(struct device *dev)
 			sc->axen_link++;
 			break;
 		    case IFM_1000_T:
+			if ((sc->axen_flags & AX772D) != 0)
+				break;
 			sc->axen_link++;
 			break;
 		    default:
@@ -658,8 +660,14 @@ axen_attach(struct device *parent, struc
 	}

 	dd = usbd_get_device_descriptor(sc->axen_udev);
-	if (UGETW(dd->bcdDevice) == 0x200)
+	switch (UGETW(dd->bcdDevice)) {
+	case 0x200:
 		sc->axen_flags = AX179A;
+		break;
+	case 0x300:
+		sc->axen_flags = AX772D;
+		break;
+	}

 	s = splnet();

@@ -683,6 +691,8 @@ axen_attach(struct device *parent, struc
 		printf(" AX88178a");
 	else if (sc->axen_flags & AX179)
 		printf(" AX88179");
+	else if (sc->axen_flags & AX772D)
+		printf(" AX88772D");
 	else
 		printf(" AX88179A");
 	printf(", address %s\n", ether_sprintf(eaddr));
@@ -968,7 +978,7 @@ axen_rxeof(struct usbd_xfer *xfer, void
 	/* skip pseudo header (2byte) */
 	padlen = 2;
 	/* skip trailer padding (4Byte) for ax88179 */
-	if (!(sc->axen_flags & AX179A))
+	if (!(sc->axen_flags & (AX179A | AX772D)))
 		padlen += 4;

 	do {
Index: sys/dev/usb/if_axenreg.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_axenreg.h,v
diff -u -p -u -p -r1.7 if_axenreg.h
--- sys/dev/usb/if_axenreg.h	4 Jan 2024 08:41:59 -0000	1.7
+++ sys/dev/usb/if_axenreg.h	7 Oct 2024 02:31:11 -0000
@@ -228,6 +228,7 @@ struct axen_type {
 #define AX178A	0x0001		/* AX88178a */
 #define AX179	0x0002		/* AX88179 */
 #define AX179A	0x0004		/* AX88179a */
+#define AX772D	0x0008		/* AX88772d */
 };

 struct axen_softc;