mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH net v3] r8152: Use BMSR to detect the link state
@ 2026-10-26  1:23 Linmao Li
  2026-10-27  5:49 ` Hayes Wang
  0 siblings, 1 reply; 2+ messages in thread
From: Linmao Li @ 2026-10-26  1:23 UTC (permalink / raw)
  To: andrew+netdev, davem, edumazet, kuba, pabeni
  Cc: hayeswang, nic_swsd, hsu.chih.kai, mail, zhangxiangqian,
	linux-usb, netdev, linux-kernel, stable, Linmao Li

r8152 detects carrier from PLA_PHYSTATUS without reading BMSR, so
BMSR_LSTATUS can remain latched low after link up. Since
commit f6f2e946aa4d ("net: mii: Fix the Speed display when the network
cable is not connected"), the first speed query can then report
SPEED_UNKNOWN, which applications such as NetworkManager may cache
until the next carrier change.

Use BMSR_LSTATUS in set_carrier() so a latched link down can turn
carrier off after the link has recovered. If BMSR reports down but
PLA_PHYSTATUS reports up, reschedule the link work to read the current
state without waiting for another notification.

Tested on an RTL8153B: NetworkManager reported 1000 Mb/s after 3 of 3
rebinds, instead of an unknown speed.

Fixes: f6f2e946aa4d ("net: mii: Fix the Speed display when the network cable is not connected")
Cc: stable@vger.kernel.org
Suggested-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: Linmao Li <lilinmao@kylinos.cn>
---
v3:
- Use Hayes's approach: detect carrier from a single BMSR read, so a
  latched link down can turn carrier off even after the link has
  recovered (Andrew), and reschedule the link work while
  PLA_PHYSTATUS still reports up, so carrier up does not depend on
  another notification (Hayes).
- Drop the runtime resume change.
- Tested on a net/main based kernel instead of a 6.6-based one. With
  intr_callback() filtered to pass only link status changes, and the
  first link check delayed until after the down and up notifications
  from ethtool -r, 5 of 5 runs showed NO-CARRIER then LOWER_UP about
  8 ms apart. With the PHY powered down for 10 s, the carrier stayed
  off and the speed was unknown.

v2: https://lore.kernel.org/netdev/20261005105249.1281648-1-lilinmao@kylinos.cn/
v1: https://lore.kernel.org/netdev/20260930113842.2640928-1-lilinmao@kylinos.cn/

 drivers/net/usb/r8152.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index af3d7dcb2f14..ae861eb6d9a9 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -6958,11 +6958,8 @@ static void set_carrier(struct r8152 *tp)
 {
 	struct net_device *netdev = tp->netdev;
 	struct napi_struct *napi = &tp->napi;
-	u16 speed;
-
-	speed = rtl8152_get_speed(tp);
 
-	if (speed & LINK_STATUS) {
+	if (r8152_mdio_read(tp, MII_BMSR) & BMSR_LSTATUS) {
 		if (!netif_carrier_ok(netdev)) {
 			tp->rtl_ops.enable(tp);
 			netif_stop_queue(netdev);
@@ -6988,6 +6985,11 @@ static void set_carrier(struct r8152 *tp)
 			tasklet_enable(&tp->tx_tl);
 			netif_info(tp, link, netdev, "carrier off\n");
 		}
+
+		if (rtl8152_get_speed(tp) & LINK_STATUS) {
+			set_bit(RTL8152_LINK_CHG, &tp->flags);
+			schedule_delayed_work(&tp->schedule, 0);
+		}
 	}
 }
 
-- 
2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* RE: [PATCH net v3] r8152: Use BMSR to detect the link state
  2026-10-26  1:23 [PATCH net v3] r8152: Use BMSR to detect the link state Linmao Li
@ 2026-10-27  5:49 ` Hayes Wang
  0 siblings, 0 replies; 2+ messages in thread
From: Hayes Wang @ 2026-10-27  5:49 UTC (permalink / raw)
  To: Linmao Li, andrew+netdev, davem, edumazet, kuba, pabeni
  Cc: nic_swsd, Chih Kai Hsu, mail, zhangxiangqian, linux-usb, netdev,
	linux-kernel, stable

Linmao Li <lilinmao@kylinos.cn>
> Sent: Monday, October 26, 2026 9:24 AM
> To: andrew+netdev@lunn.ch; davem@davemloft.net; edumazet@kernel.org;
> kuba@kernel.org; pabeni@redhat.com
> Cc: Hayes Wang <hayeswang@realtek.com>; nic_swsd
> <nic_swsd@realtek.com>; Chih Kai Hsu <hsu.chih.kai@realtek.com>;
> mail@birger-koblitz.de; zhangxiangqian@kylinos.cn; linux-usb@vger.kernel.org;
> netdev@vger.kernel.org; linux-kernel@vger.kernel.org; stable@vger.kernel.org;
> Linmao Li <lilinmao@kylinos.cn>
> Subject: [PATCH net v3] r8152: Use BMSR to detect the link state
> 
> 
> External mail : This email originated from outside the organization. Do not
> reply, click links, or open attachments unless you recognize the sender and
> know the content is safe.
> 
> 
> 
> r8152 detects carrier from PLA_PHYSTATUS without reading BMSR, so
> BMSR_LSTATUS can remain latched low after link up. Since
> commit f6f2e946aa4d ("net: mii: Fix the Speed display when the network
> cable is not connected"), the first speed query can then report
> SPEED_UNKNOWN, which applications such as NetworkManager may cache
> until the next carrier change.
> 
> Use BMSR_LSTATUS in set_carrier() so a latched link down can turn
> carrier off after the link has recovered. If BMSR reports down but
> PLA_PHYSTATUS reports up, reschedule the link work to read the current
> state without waiting for another notification.
> 
> Tested on an RTL8153B: NetworkManager reported 1000 Mb/s after 3 of 3
> rebinds, instead of an unknown speed.
> 
> Fixes: f6f2e946aa4d ("net: mii: Fix the Speed display when the network cable is
> not connected")
> Cc: stable@vger.kernel.org
> Suggested-by: Hayes Wang <hayeswang@realtek.com>
> Signed-off-by: Linmao Li <lilinmao@kylinos.cn>

Reviewed-by: Hayes Wang <hayeswang@realtek.com>

Best Regards,
Hayes


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-27  5:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-26  1:23 [PATCH net v3] r8152: Use BMSR to detect the link state Linmao Li
2026-10-27  5:49 ` Hayes Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®