Pārlūkot izejas kodu

kernel: rtl8306: fix port link status

In case the link changes from down to up, the register is only updated
on read. If the link failed/was down, this bit will be 0 until after
reading this bit again.

Fixes a reported link down by swconfig alebit the link is up (query for
the link again will show the correct link status)

Signed-off-by: Mathias Kresin <[email protected]>
Mathias Kresin 8 gadi atpakaļ
vecāks
revīzija
096dff8fcd

+ 4 - 0
target/linux/generic/files/drivers/net/phy/rtl8306.c

@@ -592,7 +592,11 @@ rtl_get_port_link(struct switch_dev *dev, int port, struct switch_port_link *lin
 	if (port >= RTL8306_NUM_PORTS)
 	if (port >= RTL8306_NUM_PORTS)
 		return -EINVAL;
 		return -EINVAL;
 
 
+	/* in case the link changes from down to up, the register is only updated on read */
 	link->link = rtl_get(dev, RTL_PORT_REG(port, LINK));
 	link->link = rtl_get(dev, RTL_PORT_REG(port, LINK));
+	if (!link->link)
+		link->link = rtl_get(dev, RTL_PORT_REG(port, LINK));
+
 	if (!link->link)
 	if (!link->link)
 		return 0;
 		return 0;