* [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®