mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 23:42:43 +00:00
90fbec89be
Add downstream DT property to setup the PHY LEDs of the MaxLinear GPY211 PHY in such way that the VDD of the LED is driven by the SoC pin rather than the GND (which is the default). Signed-off-by: Daniel Golle <daniel@makrotopia.org>
64 lines
2.1 KiB
Diff
64 lines
2.1 KiB
Diff
From a969b663c866129ed9eb217785a6574fbe826f1d Mon Sep 17 00:00:00 2001
|
|
From: Daniel Golle <daniel@makrotopia.org>
|
|
Date: Thu, 6 Apr 2023 23:36:50 +0100
|
|
Subject: [PATCH] net: phy: mxl-gpy: don't use SGMII AN if using phylink
|
|
|
|
MAC drivers using phylink expect SGMII in-band-status to be switched off
|
|
when attached to a PHY. Make sure this is the case also for mxl-gpy which
|
|
keeps SGMII in-band-status in case of SGMII interface mode is used.
|
|
|
|
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|
---
|
|
drivers/net/phy/mxl-gpy.c | 19 ++++++++++++++++---
|
|
1 file changed, 16 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/net/phy/mxl-gpy.c
|
|
+++ b/drivers/net/phy/mxl-gpy.c
|
|
@@ -371,8 +371,11 @@ static bool gpy_2500basex_chk(struct phy
|
|
|
|
phydev->speed = SPEED_2500;
|
|
phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
|
|
- phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
|
|
- VSPEC1_SGMII_CTRL_ANEN, 0);
|
|
+
|
|
+ if (!phydev->phylink)
|
|
+ phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
|
|
+ VSPEC1_SGMII_CTRL_ANEN, 0);
|
|
+
|
|
return true;
|
|
}
|
|
|
|
@@ -396,6 +399,14 @@ static int gpy_config_aneg(struct phy_de
|
|
u32 adv;
|
|
int ret;
|
|
|
|
+ /* Disable SGMII auto-negotiation if using phylink */
|
|
+ if (phydev->phylink) {
|
|
+ ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
|
|
+ VSPEC1_SGMII_CTRL_ANEN, 0);
|
|
+ if (ret < 0)
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
if (phydev->autoneg == AUTONEG_DISABLE) {
|
|
/* Configure half duplex with genphy_setup_forced,
|
|
* because genphy_c45_pma_setup_forced does not support.
|
|
@@ -486,6 +497,8 @@ static void gpy_update_interface(struct
|
|
switch (phydev->speed) {
|
|
case SPEED_2500:
|
|
phydev->interface = PHY_INTERFACE_MODE_2500BASEX;
|
|
+ if (phydev->phylink)
|
|
+ break;
|
|
ret = phy_modify_mmd(phydev, MDIO_MMD_VEND1, VSPEC1_SGMII_CTRL,
|
|
VSPEC1_SGMII_CTRL_ANEN, 0);
|
|
if (ret < 0)
|
|
@@ -497,7 +510,7 @@ static void gpy_update_interface(struct
|
|
case SPEED_100:
|
|
case SPEED_10:
|
|
phydev->interface = PHY_INTERFACE_MODE_SGMII;
|
|
- if (gpy_sgmii_aneg_en(phydev))
|
|
+ if (phydev->phylink || gpy_sgmii_aneg_en(phydev))
|
|
break;
|
|
/* Enable and restart SGMII ANEG for 10/100/1000Mbps link speed
|
|
* if ANEG is disabled (in 2500-BaseX mode).
|