[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250929091153.4c769e44.michal.pecio@gmail.com>
Date: Mon, 29 Sep 2025 09:11:53 +0200
From: Michal Pecio <michal.pecio@...il.com>
To: yicongsrfy@....com
Cc: oneukum@...e.com, andrew+netdev@...n.ch, davem@...emloft.net,
edumazet@...gle.com, kuba@...nel.org, marcan@...can.st, pabeni@...hat.com,
linux-usb@...r.kernel.org, netdev@...r.kernel.org, yicong@...inos.cn
Subject: Re: [PATCH v2 2/3] net: usb: support quirks in usbnet
On Mon, 29 Sep 2025 13:31:44 +0800, yicongsrfy@....com wrote:
> From: Yi Cong <yicong@...inos.cn>
>
> Some vendors' USB network interface controllers (NICs) may be compatible
> with multiple drivers.
>
> I consulted with relevant vendors. Taking the AX88179 chip as an example,
> NICs based on this chip may be used across various OS—for instance,
> cdc_ncm is used on macOS, while ax88179_178a.ko is the intended driver
> on Linux (despite a previous patch having disabled it).
> Therefore, the firmware must support multiple protocols.
>
> Currently, both cdc_ncm and ax88179_178a coexist in the Linux kernel.
> Supporting both drivers simultaneously leads to the following issues:
>
> 1. Inconsistent driver loading order during reboot stress testing:
> The order in which drivers are loaded can vary across reboots,
> potentially resulting in the unintended driver being loaded. For
> example:
> [ 4.239893] cdc_ncm 2-1:2.0: MAC-Address: c8:a3:62:ef:99:8e
> [ 4.239897] cdc_ncm 2-1:2.0: setting rx_max = 16384
> [ 4.240149] cdc_ncm 2-1:2.0: setting tx_max = 16384
> [ 4.240583] cdc_ncm 2-1:2.0 usb0: register 'cdc_ncm' at usb-
> xxxxx:00-1, CDC NCM, c8:a3:62:ef:99:8e
> [ 4.240627] usbcore: registered new interface driver cdc_ncm
> [ 4.240908] usbcore: registered new interface driver ax88179_178a
>
> In this case, network connectivity functions, but the cdc_ncm driver is
> loaded instead of the expected ax88179_178a.
>
> 2. Similar issues during cable plug/unplug testing:
> The same race condition can occur when reconnecting the USB device:
> [ 79.879922] usb 4-1: new SuperSpeed USB device number 3 using xhci_hcd
> [ 79.905168] usb 4-1: New USB device found, idVendor=0b95, idProduct=
> 1790, bcdDevice= 2.00
> [ 79.905185] usb 4-1: New USB device strings: Mfr=1, Product=2,
> SerialNumber=3
> [ 79.905191] usb 4-1: Product: AX88179B
> [ 79.905198] usb 4-1: Manufacturer: ASIX
> [ 79.905201] usb 4-1: SerialNumber: 00EF998E
> [ 79.915215] ax88179_probe, bConfigurationValue:2
> [ 79.952638] cdc_ncm 4-1:2.0: MAC-Address: c8:a3:62:ef:99:8e
> [ 79.952654] cdc_ncm 4-1:2.0: setting rx_max = 16384
> [ 79.952919] cdc_ncm 4-1:2.0: setting tx_max = 16384
> [ 79.953598] cdc_ncm 4-1:2.0 eth0: register 'cdc_ncm' at usb-0000:04:
> 00.2-1, CDC NCM (NO ZLP), c8:a3:62:ef:99:8e
> [ 79.954029] cdc_ncm 4-1:2.0 eth0: unregister 'cdc_ncm' usb-0000:04:
> 00.2-1, CDC NCM (NO ZLP)
>
> At this point, the network becomes unusable.
>
> To resolve these issues, introduce a *quirks* mechanism into the usbnet
> module. By adding chip-specific identification within the generic usbnet
> framework, we can skip the usbnet probe process for devices that require a
> dedicated driver.
And if the vendor driver is not available then the device won't work at
all, for a completely artificial reason. We have had such problems.
At the very least, this should check if CONFIG_AX88179 is enabled.
Regards,
Michal
Powered by blists - more mailing lists