[PATCH net-next v13 00/14] ax88179_178a: Add support for AX88179A-based chips
From: Birger Koblitz <hidden>
Date: 2026-09-27 09:43:45
Also in:
linux-usb, lkml, loongarch
This adds support for the current generation of ASIX network adapter chips, which are based on the AX88179A. This includes the AX88179A/B (1GBit-PHY), AX88772D/E (100MBit) and AX88279 (2.5GBit). The AX179A-based chips all provide both a CDC-NCM compatible USB interface, and a proprietary vendor interface with more features. By default, the proprietary vendor interface is not active and Linux will load the CDC-NCM driver to support the devices. If the ax88179_178a module is configured by the OS to have precedence over CDC-NCM, then this driver will switch the device to use the vendor interface, and the device will be controlled by the ax88179_178a driver when the device is probed again after an automatic reset of the device bringing up the vendor interface. The following hardware was tested: Delock 66046 2.5GBit adapter (AX88279, FW: 1.2.0.0) TP-Link UE306 1GBit adapter (AX88179B, FW: 1.3.0.0) Renkforce RF-4708614 1GBit adapter (AX88179A, FW: 1.0.4.0) UGREEN CR110 100MBit adapter (AX88722E, FW: 1.3.0.0) The driver supports the following features - EEE - TCP segmentation offload - VLAN filtering/tagging offload (NETIF_F_HW_VLAN_CTAG_FILTER, NETIF_F_HW_VLAN_CTAG_RX/TX) - RX/TX checksum offload - FC/Pause configuration - EEPROM read access The code is based on the ASIX 4.1.0 out-of-tree driver published under the GPL,, the aqc111 driver which provides support for the AX88279A, and some tracing of USB-transfers of the Windows-driver. Tested-by: Jianhui Xu <redacted> Signed-off-by: Birger Koblitz <redacted> --- Changes in v13: - Add MODULE_ALIAS to ax88179_178a - Squashed commit adding netdev2data() into the first one needing it - Add wrappers ax88179_write_u8/ax88179_write_u16 - Use FIELD_GET() FIELD_PREP() in fixups. - Add guard for phydev->drv NULL in phy_ethtool_ksettings_set() - Various endianess fixes in fixups - Add error checking for too small packets in ax88179a_rx_fixup - Typo fixed: ax88179_read_cmd -> ax88179_write_cmd setting PHY power - Changed call to usbnet_nway_reset by phy_ethtool_nway_reset - ax88179a_bulkin_config() handles FS USB now for all chip versions - Use phylink versions of calls for get/set_link_ksettings - Add handling of return values of ax88179_read_cmd() in various places - Removed usbnet_link_change(dev, 0, 0); at the end of ax88179a_reset(). - Add RTLN-lock to protect AX_MEDIUM_STATUS_MODE register, WRITE_ONCE/READONCE for rxctl. - Changed to clearing AX_XGMII_EN for all speeds != SPEED_2500 independent of chip-id. - Fix access to AX88179A_MAC_RX_DATA_CDC_CNT by using 2 1-byte writes. - In ax88179a_mac_link_up initialize link_status. - Added setting of AX_GPHY_EEE_CTRL to disabled in ax88179a_reset(), consistent with phylink default. - Various commit messages fixed - Conditionally set AX_VLAN_CONTROL_VFE after loop over the VLAN-entries - Moved code in wrong commits to the right ones (2x). - Fix races around rx_checksum flag setting. - Suspend/resume fixes: correct sequence of WoL settings and usbnet/phylink suspend calls. - Read revision number into the 4th field of software version - Kconfig descriptiona and module description mention 2.5GBit - Fix orphaned defconfigs - Fix EEPROM access settings derived from chip versions - Fix EEPROM read error checking - Return value checking in asix_ax88279_read_status() - Added clearing of ETHTOOL_LINK_MODE_2500baseT_Full_BIT in lp_advertising before modifying the bit. - In asix_ax88279_read_status() add if (!phydev->link) guard - Linkmode cleaning code shortened. - Link to v12: https://lore.kernel.org/r/20260916-ax88179a-v12-0-60c04c9924a2@birger-koblitz.de (local) Changes in v12: - Fix BCD ranges for USB device detection - Free SKB in ax88179a_tx_fixup() when skb_linearize() fails - Use phylink_mii_ioctl instead of usbnet_mii_ioctl - Link to v11: https://lore.kernel.org/r/20260914-ax88179a-v11-0-5ea7a925ba6d@birger-koblitz.de (local) Changes in v11: - Fix sparse warnings - Link to v10: https://lore.kernel.org/r/20260904-ax88179a-v10-0-b5e60eca7690@birger-koblitz.de (local) Changes in v10: - Fix missing variable declaration in ax88179a_status() - Add reviewed-bys - Link to v9: https://lore.kernel.org/r/20260902-ax88179a-v9-0-8e6d7710a2ae@birger-koblitz.de (local) Changes in v9: - Fix ax88179a_status() to not call carrier-related netif or usbnet methods - Use genphy_read_mmd_c45() and genphy_write_mmd_c45() - Link to v8: https://lore.kernel.org/r/20260831-ax88179a-v8-0-de905f2ee426@birger-koblitz.de (local) Changes in v8: - Fix resume sequence as Suggested-by: Jianhui Xu [off-list ref] - Add handling of PHYs with broken forced mode in phylib to handle AX88279 PHY - Multple formatting fixes - Fix transiently unused functions ax88179a_mac_disable_tx_lpi() and ax88179a_mac_enable_tx_lpi() - Removed unnecessary checks for dev initialized - Link to v7: https://lore.kernel.org/r/20260810-ax88179a-v7-0-da633191c129@birger-koblitz.de (local) Changes in v7: - Add phylink_mac_interrupt() function to phylink and stop polling the PHY to prevent a race condition between the controller and phylink when configuring a new link. - Fix typo in ax88179_read_cmd Reported-by: Jianhui Xu [off-list ref] - Return -EOPNOTSUPP in asix_ax88279_config_aneg when autoneg is being disabled - Link to v6: https://lore.kernel.org/r/20260806-ax88179a-v6-0-fde7414619e6@birger-koblitz.de (local) Changes in v6: - Use genphy_read_status() in asix_ax88279_read_status() - Use SGMII and 2500BaseX interfaces for PHY - Fix speed determination of MAC/PHY link - Fix bulk transfer configuration to use enums for bulk configuration types - Link to v5: https://lore.kernel.org/r/20260802-ax88179a-v5-0-dcb9fea4acd4@birger-koblitz.de (local) Changes in v5: - Fixed read_status() and config_aneg() in PHY driver - Introduced netdev2data() as convenience function - netdev_info instances and debugging relicts removed - Several instances of badly written/formatted code that was copy and pasted from the original driver corrected - select PHYLINK added to Kconfig when phylib dependency added - PHYLINK selects PHYLIB, so not needed to specify separately - Link to v4: https://lore.kernel.org/r/20260731-ax88179a-v4-0-2cf1f71b1dd2@birger-koblitz.de (local) Changes in v4: - Split driver into library part and part2 for AX88179 and AX88179A-based controllers - Driver renamed ax88179 - Improved phylink use: use phylink standard functions for speed and EEE-settings, correct MAC capabilities, removed ax88179_status() irq-urb callback - Fixes in PHY driver for AX88179A integrated PHYs - Link to v3: https://lore.kernel.org/r/20260724-ax88179a-v3-0-bdde4f905883@birger-koblitz.de (local) Changes in v3: - Add PHY drivers for the PHYs of the AX88179A-based controllers - Use phylink for the AX88179A-based chips - Link to v2: https://lore.kernel.org/r/20260708-ax88179a-v2-0-0800fedb2e16@birger-koblitz.de (local) Changes in v2: - Correctly use net-next prefix - Fix compilation issue in HW support patch - Split MMD support patch into patches for EEE/new chip support - Do not use ADVERTISE_RESV but private flag definition - Fix pause configuration to keep track of settings when autoneg disabled - Fix issue with unitialized variable reported by kernel test robot [off-list ref] - Avoid white-space changes - Link to v1: https://lore.kernel.org/r/20260701-ax88179a-v1-0-13685df67515@birger-koblitz.de (local) --- Birger Koblitz (14): phylink: Add phylink_mac_interrupt phylib: Add support for PHYs with broken forced mode ax88179_178a: Fix endianness of pause watermark register ax88179_178a: Split driver into library and device specific code ax88179_178a: Add HW support for AX179A-based chips ax88179_178a: Add EEE configuration support for AX88179A MACs ax88179_178a: Add EEE configuration support for AX88179A PHYs ax88179_178a: Add VLAN offload support for AX88179A ax88179_178a: Add AX179A/AX279 multicast configuration ax88179_178a: Add Suspend/resume support for AX88179A/772D/279 ax88179_178a: Add ethtool get_drvinfo ax88179_178a: Update driver name and information ax88179_178a: Add support for AX88179A/772D/279 EEPROM access ax88796b: Add support for AX88772D, AX88179A and AX88279 MAINTAINERS | 6 + arch/loongarch/configs/loongson32_defconfig | 2 +- arch/loongarch/configs/loongson64_defconfig | 2 +- drivers/net/phy/ax88796b.c | 167 ++++ drivers/net/phy/phy.c | 4 + drivers/net/phy/phylink.c | 16 + drivers/net/usb/Kconfig | 10 +- drivers/net/usb/Makefile | 3 +- drivers/net/usb/ax88179_178a.c | 665 +------------- drivers/net/usb/ax88179_lib.c | 530 +++++++++++ drivers/net/usb/ax88179_lib.h | 359 ++++++++ drivers/net/usb/ax88179a_devices.c | 1282 +++++++++++++++++++++++++++ include/linux/phy.h | 1 + include/linux/phylink.h | 1 + 14 files changed, 2422 insertions(+), 626 deletions(-) --- base-commit: f7f619ecda5761bd48578764ef5ff9e8fd97b916 change-id: 20260630-ax88179a-a1d89fe21730 Best regards, -- Birger Koblitz [off-list ref]