OSDN Git Service

net: phy: adjust qca8081 master/slave seed value if link down
authorLuo Jie <luoj@codeaurora.org>
Sun, 24 Oct 2021 08:27:37 +0000 (16:27 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Oct 2021 13:04:18 +0000 (14:04 +0100)
1. The master/slave seed needs to be updated when the link can't
be created.

2. The case where two qca8081 PHYs are connected each other and
master/slave seed is generated as the same value also needs
to be considered, so adding this code change into read_status
instead of link_change_notify.

Signed-off-by: Luo Jie <luoj@codeaurora.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/at803x.c

index 1418db4..00733ba 100644 (file)
@@ -1655,6 +1655,22 @@ static int qca808x_read_status(struct phy_device *phydev)
        else
                phydev->interface = PHY_INTERFACE_MODE_SMII;
 
+       /* generate seed as a lower random value to make PHY linked as SLAVE easily,
+        * except for master/slave configuration fault detected.
+        * the reason for not putting this code into the function link_change_notify is
+        * the corner case where the link partner is also the qca8081 PHY and the seed
+        * value is configured as the same value, the link can't be up and no link change
+        * occurs.
+        */
+       if (!phydev->link) {
+               if (phydev->master_slave_state == MASTER_SLAVE_STATE_ERR) {
+                       qca808x_phy_ms_seed_enable(phydev, false);
+               } else {
+                       qca808x_phy_ms_random_seed_set(phydev);
+                       qca808x_phy_ms_seed_enable(phydev, true);
+               }
+       }
+
        return 0;
 }