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:
		@@ -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,
 | 
				
			||||||
		Reference in New Issue
	
	Block a user