mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 10:39:04 +00:00
85b2f213c5
A patch was added in kernel 5.4 to support the fiber operation of AR8033 with ramips devices. In kernel 5.18 similar enhancements were added to the kernel. Those patches are required for other fiber based devices but when added, build fails for ramips targets. This commit removes the ramips patch and adds the kernel 5.18 ones. Signed-off-by: Daniel Kestrel <kestrel1974@t-online.de> [ split commit, refresh patch and improve commit title ] Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
82 lines
2.3 KiB
Diff
82 lines
2.3 KiB
Diff
From 4f3a00c7f5b2cfe4e127fd3fe49b55e1b318c01f Mon Sep 17 00:00:00 2001
|
|
From: Robert Hancock <robert.hancock@calian.com>
|
|
Date: Tue, 25 Jan 2022 10:54:08 -0600
|
|
Subject: [PATCH] net: phy: at803x: move page selection fix to config_init
|
|
|
|
The fix to select the copper page on AR8031 was being done in the probe
|
|
function rather than config_init, so it would not be redone after resume
|
|
from suspend. Move this to config_init so it is always redone when
|
|
needed.
|
|
|
|
Fixes: c329e5afb42f ("net: phy: at803x: select correct page on config init")
|
|
Signed-off-by: Robert Hancock <robert.hancock@calian.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 40 ++++++++++++++++------------------------
|
|
1 file changed, 16 insertions(+), 24 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -651,25 +651,7 @@ static int at803x_probe(struct phy_devic
|
|
return ret;
|
|
}
|
|
|
|
- /* Some bootloaders leave the fiber page selected.
|
|
- * Switch to the copper page, as otherwise we read
|
|
- * the PHY capabilities from the fiber side.
|
|
- */
|
|
- if (at803x_match_phy_id(phydev, ATH8031_PHY_ID)) {
|
|
- phy_lock_mdio_bus(phydev);
|
|
- ret = at803x_write_page(phydev, AT803X_PAGE_COPPER);
|
|
- phy_unlock_mdio_bus(phydev);
|
|
- if (ret)
|
|
- goto err;
|
|
- }
|
|
-
|
|
return 0;
|
|
-
|
|
-err:
|
|
- if (priv->vddio)
|
|
- regulator_disable(priv->vddio);
|
|
-
|
|
- return ret;
|
|
}
|
|
|
|
static void at803x_remove(struct phy_device *phydev)
|
|
@@ -745,6 +727,22 @@ static int at803x_config_init(struct phy
|
|
{
|
|
int ret;
|
|
|
|
+ if (phydev->drv->phy_id == ATH8031_PHY_ID) {
|
|
+ /* Some bootloaders leave the fiber page selected.
|
|
+ * Switch to the copper page, as otherwise we read
|
|
+ * the PHY capabilities from the fiber side.
|
|
+ */
|
|
+ phy_lock_mdio_bus(phydev);
|
|
+ ret = at803x_write_page(phydev, AT803X_PAGE_COPPER);
|
|
+ phy_unlock_mdio_bus(phydev);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = at8031_pll_config(phydev);
|
|
+ if (ret < 0)
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
/* The RX and TX delay default is:
|
|
* after HW reset: RX delay enabled and TX delay disabled
|
|
* after SW reset: RX delay enabled, while TX delay retains the
|
|
@@ -770,12 +768,6 @@ static int at803x_config_init(struct phy
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
- if (at803x_match_phy_id(phydev, ATH8031_PHY_ID)) {
|
|
- ret = at8031_pll_config(phydev);
|
|
- if (ret < 0)
|
|
- return ret;
|
|
- }
|
|
-
|
|
return 0;
|
|
}
|
|
|