[openwrt/openwrt] generic: at803x: mask 1000 Base-X link mode

LEDE Commits lede-commits at lists.infradead.org
Sun Jun 27 04:19:32 PDT 2021


blocktrron pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/1f5afbab5bbd33c5eff607a26699f64d3f4c11b1

commit 1f5afbab5bbd33c5eff607a26699f64d3f4c11b1
Author: David Bauer <mail at david-bauer.net>
AuthorDate: Mon Jun 14 23:53:38 2021 +0200

    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 at david-bauer.net>
---
 .../730-net-phy-at803x-fix-feature-detection.patch | 66 ++++++++++++++++++++++
 .../730-net-phy-at803x-fix-feature-detection.patch | 66 ++++++++++++++++++++++
 2 files changed, 132 insertions(+)

diff --git a/target/linux/generic/pending-5.10/730-net-phy-at803x-fix-feature-detection.patch b/target/linux/generic/pending-5.10/730-net-phy-at803x-fix-feature-detection.patch
new file mode 100644
index 0000000000..1d4783e382
--- /dev/null
+++ b/target/linux/generic/pending-5.10/730-net-phy-at803x-fix-feature-detection.patch
@@ -0,0 +1,66 @@
+From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail at 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 at 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,
diff --git a/target/linux/generic/pending-5.4/730-net-phy-at803x-fix-feature-detection.patch b/target/linux/generic/pending-5.4/730-net-phy-at803x-fix-feature-detection.patch
new file mode 100644
index 0000000000..f25952a2cc
--- /dev/null
+++ b/target/linux/generic/pending-5.4/730-net-phy-at803x-fix-feature-detection.patch
@@ -0,0 +1,66 @@
+From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
+From: David Bauer <mail at 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 at 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,



More information about the lede-commits mailing list