|
|
@@ -0,0 +1,61 @@
|
|
|
+From: Marko Ratkaj <[email protected]>
|
|
|
+Date: Fri, 7 Apr 2017 13:30:30 +0200
|
|
|
+Subject: [PATCH] fix marvell phy initialization issues
|
|
|
+
|
|
|
+Fix Marvell PHYs initialization issues and optimize
|
|
|
+logic for page changing during init
|
|
|
+
|
|
|
+Board affected with initialization bug:
|
|
|
+ SolidRun ClearFog Base
|
|
|
+
|
|
|
+Signed-off-by: Marko Ratkaj <[email protected]>
|
|
|
+---
|
|
|
+ drivers/net/phy/marvell.c | 9 ++++-----
|
|
|
+ 1 file changed, 4 insertions(+), 5 deletions(-)
|
|
|
+
|
|
|
+--- a/drivers/net/phy/marvell.c
|
|
|
++++ b/drivers/net/phy/marvell.c
|
|
|
+@@ -361,7 +361,7 @@ static int m88e1111_config_aneg(struct p
|
|
|
+ static int marvell_of_reg_init(struct phy_device *phydev)
|
|
|
+ {
|
|
|
+ const __be32 *paddr;
|
|
|
+- int len, i, saved_page, current_page, page_changed, ret;
|
|
|
++ int len, i, saved_page, current_page, ret;
|
|
|
+
|
|
|
+ if (!phydev->mdio.dev.of_node)
|
|
|
+ return 0;
|
|
|
+@@ -374,7 +374,6 @@ static int marvell_of_reg_init(struct ph
|
|
|
+ saved_page = phy_read(phydev, MII_MARVELL_PHY_PAGE);
|
|
|
+ if (saved_page < 0)
|
|
|
+ return saved_page;
|
|
|
+- page_changed = 0;
|
|
|
+ current_page = saved_page;
|
|
|
+
|
|
|
+ ret = 0;
|
|
|
+@@ -388,7 +387,6 @@ static int marvell_of_reg_init(struct ph
|
|
|
+
|
|
|
+ if (reg_page != current_page) {
|
|
|
+ current_page = reg_page;
|
|
|
+- page_changed = 1;
|
|
|
+ ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, reg_page);
|
|
|
+ if (ret < 0)
|
|
|
+ goto err;
|
|
|
+@@ -411,7 +409,7 @@ static int marvell_of_reg_init(struct ph
|
|
|
+
|
|
|
+ }
|
|
|
+ err:
|
|
|
+- if (page_changed) {
|
|
|
++ if (current_page != saved_page) {
|
|
|
+ i = phy_write(phydev, MII_MARVELL_PHY_PAGE, saved_page);
|
|
|
+ if (ret == 0)
|
|
|
+ ret = i;
|
|
|
+@@ -1192,7 +1190,8 @@ static int marvell_read_status(struct ph
|
|
|
+ int err;
|
|
|
+
|
|
|
+ /* Check the fiber mode first */
|
|
|
+- if (phydev->supported & SUPPORTED_FIBRE) {
|
|
|
++ if (phydev->supported & SUPPORTED_FIBRE &&
|
|
|
++ phydev->interface != PHY_INTERFACE_MODE_SGMII) {
|
|
|
+ err = phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_M1111_FIBER);
|
|
|
+ if (err < 0)
|
|
|
+ goto error;
|