]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: usb: asix: ax88772: re-add usbnet_link_change() in phylink callbacks
authorMarkus Baier <Markus.Baier@soslab.tu-darmstadt.de>
Fri, 1 May 2026 16:39:41 +0000 (18:39 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 5 May 2026 02:04:15 +0000 (19:04 -0700)
Commit e0bffe3e6894 ("net: asix: ax88772: migrate to phylink") replaced
the asix_adjust_link() PHY callback with phylink's mac_link_up() and
mac_link_down() handlers, but did not carry over the usbnet_link_change()
notification that commit 805206e66fab ("net: asix: fix "can't send until
first packet is send" issue") had added.

As a result, the original symptom returns: when the link comes up,
usbnet is never notified, so the RX URB submission stays dormant until
some other event (e.g. a transmitted packet triggering the status
endpoint interrupt) wakes it up.

This is reproducible with the Apple A1277 USB Ethernet Adapter
(05ac:1402, AX88772A based) on a Banana Pro using a static IPv4
configuration. After bringing the interface up, no incoming packets are
received until the first outgoing frame triggers usbnet's RX path.

Restore the link change notification, gated on a carrier transition so
the call remains idempotent if the status endpoint also reports the
change later.

Fixes: e0bffe3e6894 ("net: asix: ax88772: migrate to phylink")
Signed-off-by: Markus Baier <Markus.Baier@soslab.tu-darmstadt.de>
Tested-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20260501163941.107668-1-Markus.Baier@soslab.tu-darmstadt.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/asix_devices.c

index df0bcfedddbc36db5c91a40c4c238ced12f3d9b6..293ef80c4e302e418153791eaa3d1d61d3fdb437 100644 (file)
@@ -756,6 +756,7 @@ static void ax88772_mac_link_down(struct phylink_config *config,
        struct usbnet *dev = netdev_priv(to_net_dev(config->dev));
 
        asix_write_medium_mode(dev, 0, 0);
+       usbnet_link_change(dev, false, false);
 }
 
 static void ax88772_mac_link_up(struct phylink_config *config,
@@ -786,6 +787,7 @@ static void ax88772_mac_link_up(struct phylink_config *config,
                m |= AX_MEDIUM_RFC;
 
        asix_write_medium_mode(dev, m, 0);
+       usbnet_link_change(dev, true, false);
 }
 
 static const struct phylink_mac_ops ax88772_phylink_mac_ops = {