mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-12 18:05:15 +00:00
generic: 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>
This commit is contained in:
parent
adddfe5787
commit
1f5afbab5b
@ -0,0 +1,66 @@
|
||||
From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Sun, 13 Jun 2021 12:19:36 +0200
|
||||
Subject: [PATCH] net: phy: at803x: fix feature detection
|
||||
|
||||
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>
|
||||
---
|
||||
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
|
||||
@@ -935,6 +935,34 @@ static int at803x_set_tunable(struct phy
|
||||
}
|
||||
}
|
||||
|
||||
+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_cable_test_result_trans(u16 status)
|
||||
{
|
||||
switch (FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status)) {
|
||||
@@ -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,
|
@ -0,0 +1,66 @@
|
||||
From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
|
||||
From: David Bauer <mail@david-bauer.net>
|
||||
Date: Sun, 13 Jun 2021 12:19:36 +0200
|
||||
Subject: [PATCH] net: phy: at803x: fix feature detection
|
||||
|
||||
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>
|
||||
---
|
||||
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
|
||||
@@ -411,6 +411,34 @@ static int at803x_aneg_done(struct phy_d
|
||||
return aneg_done;
|
||||
}
|
||||
|
||||
+static int at803x_get_features(struct phy_device *phydev)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ err = genphy_read_abilities(phydev);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ if (!(phydev->phy_id & phydev->drv->phy_id_mask) == (ATH8031_PHY_ID & phydev->drv->phy_id_mask))
|
||||
+ 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_read_status(struct phy_device *phydev)
|
||||
{
|
||||
int ss, err, old_link = phydev->link;
|
||||
@@ -513,7 +541,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,
|
Loading…
Reference in New Issue
Block a user