forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
1 parent
adddfe5
commit 1f5afba
Showing
2 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
66 changes: 66 additions & 0 deletions
66
target/linux/generic/pending-5.10/730-net-phy-at803x-fix-feature-detection.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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, |
66 changes: 66 additions & 0 deletions
66
target/linux/generic/pending-5.4/730-net-phy-at803x-fix-feature-detection.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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, |