Date: Thu, 23 Jun 2022 18:00:09 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 264855] axe: axe usb driver, AX88772, fails to perform autoselect when the axe interface is changed from forced mode to autoselect mode Message-ID: <bug-264855-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D264855 Bug ID: 264855 Summary: axe: axe usb driver, AX88772, fails to perform autoselect when the axe interface is changed from forced mode to autoselect mode Product: Base System Version: CURRENT Hardware: arm64 OS: Any Status: New Severity: Affects Some People Priority: --- Component: bin Assignee: bugs@FreeBSD.org Reporter: jiahali@blackberry.com Created attachment 234897 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D234897&action= =3Dedit Preliminary fix patch for restarting autoselect mode in AX88772 Test is based on the current release of Freebsd. root@generic:~ # uname -a FreeBSD generic 14.0-CURRENT FreeBSD 14.0-CURRENT #0 main-n254961-b91a48693= a5: Thu Apr 21 09:35:51 UTC 2022=20=20=20=20 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC arm= 64 I use RockPro64 LPDDR4:4G to perform the following test. The axe interface = is directly connected to a Linux host interface, enp0s31f6. 1. The axe interface and enp0s31f6 are set to their highest speed and full duplex mode when autonegotiation is enable in both interface after booting = up root@generic:~ # ifconfig -m ue0 ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=3D80008<VLAN_MTU,LINKSTATE> capabilities=3D80008<VLAN_MTU,LINKSTATE> ether 00:80:c8:3a:ba:f1 inet 192.168.3.76 netmask 0xffffff00 broadcast 192.168.3.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active supported media: media autoselect media 100baseTX mediaopt full-duplex media 100baseTX media 10baseT/UTP mediaopt full-duplex media 10baseT/UTP nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> $ sudo ethtool enp0s31f6 [sudo] password for jiahali:=20 Settings for enp0s31f6: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes 2. Changing the axe interface to a forced mode. The enp0s31f6 is set as same speed but half-duplex mode root@generic:~ # ifconfig -m ue0 media 10baseT/UTP mediaopt full-duplex root@generic:~ # ifconfig -m ue0 ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=3D80008<VLAN_MTU,LINKSTATE> capabilities=3D80008<VLAN_MTU,LINKSTATE> ether 00:80:c8:3a:ba:f1 inet 192.168.3.76 netmask 0xffffff00 broadcast 192.168.3.255 media: Ethernet 10baseT/UTP <full-duplex> status: active supported media: media autoselect media 100baseTX mediaopt full-duplex media 100baseTX media 10baseT/UTP mediaopt full-duplex media 10baseT/UTP nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> $ sudo ethtool enp0s31f6 Settings for enp0s31f6: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 10Mb/s Duplex: Half Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes 3. Changing the axe interface back to autoselect mode. The axe interface and enp0s31f6 fail to perform autoselect to configure both interfaces to their highest speed and best duplex mode, 100Mb/s and full-duplex in this case. root@generic:~ # ifconfig -m ue0 media autoselect root@generic:~ # ifconfig -m ue0 ue0: flags=3D8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=3D80008<VLAN_MTU,LINKSTATE> capabilities=3D80008<VLAN_MTU,LINKSTATE> ether 00:80:c8:3a:ba:f1 inet 192.168.3.76 netmask 0xffffff00 broadcast 192.168.3.255 media: Ethernet autoselect (10baseT/UTP <full-duplex>) status: active supported media: media autoselect media 100baseTX mediaopt full-duplex media 100baseTX media 10baseT/UTP mediaopt full-duplex media 10baseT/UTP nd6 options=3D29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> $ sudo ethtool enp0s31f6 Settings for enp0s31f6: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Supported pause frame use: No Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full=20 100baseT/Half 100baseT/Full=20 1000baseT/Full=20 Advertised pause frame use: No Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 10Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes Analysis: I tried to fix this issue in my target, where my developemnt environment is based on FreeBSD 13.0-RELEASE-p11. The fix patch is attached. The AX88772 usb ethernet controller in axe interface uses rlphy as its phy interface in rockpro64. The rlphy will use the common subroutines, mii_physubr.c, in io-sock to set its media's type. The AX88772 in axe shows that it supports media autoselect mode. But, in mii_physubr.c/mii_phy_setmedia(), the mii device should be tagged with MIIF_DOPAUSE or MIIF_FORCEANEG to enable autoselct mode when the autonegotiation is enabled in rlphy's control register. In if_axe.c, AX88772 is tagged with neither the MIIF_DOPAUSE nor MIIF_FORCE= ANEG now. According to the source code commit in Freebsd, commit id cdc2a5ec78b4a8b1520351def4a6e7280502ec89, the author does not want to enable flow control in AX88772 because of the lack of test. Thus, MIIF_FORCEANEG should be used to turn on the autoselect mode when the bit of enabling auto-negotiation in rlphy's control register is turned on. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-264855-227>