kernel: rtl8306: fix port link status
authorMathias Kresin <dev@kresin.me>
Thu, 31 Aug 2017 05:52:00 +0000 (07:52 +0200)
committerMathias Kresin <dev@kresin.me>
Fri, 8 Sep 2017 19:52:38 +0000 (21:52 +0200)
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 <dev@kresin.me>
target/linux/generic/files/drivers/net/phy/rtl8306.c

index 7c70109e633693b657f0c2ff61949cbb208b413e..7bbac40617bc8123d62e6aba2814516560199134 100644 (file)
@@ -592,7 +592,11 @@ rtl_get_port_link(struct switch_dev *dev, int port, struct switch_port_link *lin
        if (port >= RTL8306_NUM_PORTS)
                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));
+       if (!link->link)
+               link->link = rtl_get(dev, RTL_PORT_REG(port, LINK));
+
        if (!link->link)
                return 0;