From: Birger Koblitz <mail@birger-koblitz.de>
To: Jianhui Xu <neuromoments@gmail.com>
Cc: andrew+netdev@lunn.ch, andrew@lunn.ch, davem@davemloft.net,
edumazet@google.com, hkallweit1@gmail.com, kuba@kernel.org,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
linux@armlinux.org.uk, netdev@vger.kernel.org, pabeni@redhat.com
Subject: Re: [PATCH net-next v6 00/13] ax88179_178a: Add support for AX88179A-based chips
Date: Mon, 10 Aug 2026 12:43:16 +0200 [thread overview]
Message-ID: <5b2c4498-2e3c-4ae6-b078-deeccf8b7a5c@birger-koblitz.de> (raw)
In-Reply-To: <20260810013549.2510969-1-neuromoments@gmail.com>
On 8/10/26 03:35, Jianhui Xu wrote:
>> The only way this could be coming from the driver that I see is via a call
>> to ax88179a_stop(), which would clear exactly that bit.
>> Have you traced this and can exclude that this function is called somehow?
>
> Yes. I added a dynamic kprobe on ax88179_write_cmd(), filtered to
> AX_MEDIUM_STATUS_MODE writes, and recorded the value and caller stack.
>
> During 30 100baseT/Full-to-1000baseT/Full cycles, four transitions to
> 100baseT/Full lost RX. In all four cases:
>
> - ax88179a_mac_link_up() first wrote 0x0102;
> - there was no intervening Linux write to AX_MEDIUM_STATUS_MODE;
> - about one second later the delayed worker read the register with
> AX_MEDIUM_RECEIVE_EN clear and restored 0x0102.
>
> All 71 traced writes to AX_MEDIUM_STATUS_MODE had
> AX_MEDIUM_RECEIVE_EN set. The complete 1,209-entry trace contained no
> ax88179a_stop() or ax88179_change_mtu() caller.
>
[...]
> I do not think this proves an unconditional device-side bug, though. The v6
> driver failed four times in 30 cycles after writing 0x0102, while the vendor
> driver had no failures after writing 0x0132.
I have finally understood what is happening: There is a race condition between
the controller of the AX88179A trying to set up and optimize the link and
phylink trying to configure the link on the mac-side. When a link change
is requested by phylink triggering re-configuring the PHY, the PHY is continued
to be polled by phylink. At this point, the PHY may report that the link is up
before the controller is actually finished configuring it. mac_link_up() is called
by phylink, but the controller overwrites the AX_MEDIUM_RECEIVE_EN
bit that is set by mac_link_up() when it continues with its configuration.
The solution is simple: do not poll the PHY with phylink, but wait until the
controller decides the link is completely configured, at which point an interrupt
USB-URB is sent. Then handle this interrupt in phylink in order to read the final PHY
configuration and only then call mac_link_up().
I will provide a v7 with an additional phylink function phylink_mac_interrupt()
being introduced as suggested by Andrew, which is called by ax88179a_status()
in response to usbnet receiving the link change interrupt. I tested changing
the link a couple of dozen times and it always worked, now.
Birger
next prev parent reply other threads:[~2026-08-10 10:43 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 19:35 [PATCH net-next v6 00/13] ax88179_178a: Add support for AX88179A-based chips Birger Koblitz
2026-08-06 19:35 ` [PATCH net-next v6 01/13] ax88179_178a: Fix endianness of pause watermark register Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 02/13] ax88179_178a: Split driver into library and device specific code Birger Koblitz
2026-08-09 0:57 ` Jianhui Xu
2026-08-09 3:39 ` Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 03/13] ax88179_178a: Add netdev2data() convenience function Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 04/13] ax88179_178a: Add HW support for AX179A-based chips Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 05/13] ax88179_178a: Add EEE configuration support for AX88179A MACs Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 06/13] ax88179_178a: Add EEE configuration support for AX88179A PHYs Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 07/13] ax88179_178a: Add VLAN offload support for AX88179A Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 08/13] ax88179_178a: Add AX179A/AX279 multicast configuration Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 09/13] ax88179_178a: Add Suspend/resume support for AX88179A/772D/279 Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 10/13] ax88179_178a: Add ethtool get_drvinfo Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 11/13] ax88179_178a: Update driver name and information Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 12/13] ax88179_178a: Add support for AX88179A/772D/279 EEPROM access Birger Koblitz
2026-08-06 19:36 ` [PATCH net-next v6 13/13] ax88796b: Add support for AX88772D, AX88179A and AX88279 Birger Koblitz
2026-08-09 1:36 ` [PATCH net-next v6 00/13] ax88179_178a: Add support for AX88179A-based chips Jianhui Xu
2026-08-09 4:33 ` Birger Koblitz
2026-08-10 1:35 ` Jianhui Xu
2026-08-10 10:43 ` Birger Koblitz [this message]
2026-08-10 13:25 ` Andrew Lunn
2026-08-10 16:17 ` Birger Koblitz
2026-08-10 17:35 ` Andrew Lunn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5b2c4498-2e3c-4ae6-b078-deeccf8b7a5c@birger-koblitz.de \
--to=mail@birger-koblitz.de \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=neuromoments@gmail.com \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox