mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 14:37:57 +00:00
aa8ba5166e
Replace pending 730-net-phy-at803x-fix-feature-detection.patch with upstream version and move it to backport. Refresh other related patch while moving it. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
69 lines
2.1 KiB
Diff
69 lines
2.1 KiB
Diff
From b856150c8098f12996ee81c3ab2a65adbaeeb3ec Mon Sep 17 00:00:00 2001
|
|
From: David Bauer <mail@david-bauer.net>
|
|
Date: Sun, 27 Jun 2021 12:16:07 +0200
|
|
Subject: [PATCH] net: phy: at803x: mask 1000 Base-X link mode
|
|
|
|
AR8031/AR8033 have different status registers for copper
|
|
and fiber operation. However, the extended status register
|
|
is the same for both operation modes.
|
|
|
|
As a result of that, ESTATUS_1000_XFULL is set to 1 even when
|
|
operating in copper TP mode.
|
|
|
|
Remove this mode from the supported link modes, as this driver
|
|
currently only supports copper operation.
|
|
|
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 30 +++++++++++++++++++++++++++++-
|
|
1 file changed, 29 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -583,6 +583,34 @@ static void at803x_remove(struct phy_dev
|
|
regulator_disable(priv->vddio);
|
|
}
|
|
|
|
+static int at803x_get_features(struct phy_device *phydev)
|
|
+{
|
|
+ int err;
|
|
+
|
|
+ err = genphy_read_abilities(phydev);
|
|
+ if (err)
|
|
+ return err;
|
|
+
|
|
+ if (!at803x_match_phy_id(phydev, ATH8031_PHY_ID))
|
|
+ return 0;
|
|
+
|
|
+ /* AR8031/AR8033 have different status registers
|
|
+ * for copper and fiber operation. However, the
|
|
+ * extended status register is the same for both
|
|
+ * operation modes.
|
|
+ *
|
|
+ * As a result of that, ESTATUS_1000_XFULL is set
|
|
+ * to 1 even when operating in copper TP mode.
|
|
+ *
|
|
+ * Remove this mode from the supported link modes,
|
|
+ * as this driver currently only supports copper
|
|
+ * operation.
|
|
+ */
|
|
+ linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
|
|
+ phydev->supported);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
static int at803x_clk_out_config(struct phy_device *phydev)
|
|
{
|
|
struct at803x_priv *priv = phydev->priv;
|
|
@@ -1156,7 +1184,7 @@ static struct phy_driver at803x_driver[]
|
|
.resume = at803x_resume,
|
|
.read_page = at803x_read_page,
|
|
.write_page = at803x_write_page,
|
|
- /* PHY_GBIT_FEATURES */
|
|
+ .get_features = at803x_get_features,
|
|
.read_status = at803x_read_status,
|
|
.aneg_done = at803x_aneg_done,
|
|
.ack_interrupt = &at803x_ack_interrupt,
|