diff mbox series

net: phy: at803x: mask 1000 Base-X link mode

Message ID 20210627101607.79604-1-mail@david-bauer.net
State New
Headers show
Series net: phy: at803x: mask 1000 Base-X link mode | expand

Commit Message

David Bauer June 27, 2021, 10:16 a.m. UTC
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(-)

Comments

Andrew Lunn June 27, 2021, 5:08 p.m. UTC | #1
On Sun, Jun 27, 2021 at 12:16:07PM +0200, David Bauer wrote:
> 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>

    Andrew
patchwork-bot+netdevbpf@kernel.org June 28, 2021, 10:50 p.m. UTC | #2
Hello:

This patch was applied to netdev/net.git (refs/heads/master):

On Sun, 27 Jun 2021 12:16:07 +0200 you wrote:
> 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.

> 

> [...]


Here is the summary with links:
  - net: phy: at803x: mask 1000 Base-X link mode
    https://git.kernel.org/netdev/net/c/b856150c8098

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
diff mbox series

Patch

diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
index 32af52dd5aed..d797c2c9ae3f 100644
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -610,6 +610,34 @@  static void at803x_remove(struct phy_device *phydev)
 		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_smarteee_config(struct phy_device *phydev)
 {
 	struct at803x_priv *priv = phydev->priv;
@@ -1225,7 +1253,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,
 	.config_intr		= &at803x_config_intr,
 	.handle_interrupt	= at803x_handle_interrupt,