aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTim Harvey <tharvey@gateworks.com>2023-02-07 15:37:18 -0800
committerTom Rini <trini@konsulko.com>2023-05-05 13:41:55 -0400
commit1416b80de46ea6a194ad29a541a075ffba320927 (patch)
treed3e44cea90b4f6c2e6a1463670d22e47293ac61e /drivers
parent2b7252953c502eb64593aebeb65409d268068365 (diff)
downloadu-boot-1416b80de46ea6a194ad29a541a075ffba320927.zip
u-boot-1416b80de46ea6a194ad29a541a075ffba320927.tar.gz
u-boot-1416b80de46ea6a194ad29a541a075ffba320927.tar.bz2
net: ksz9477: add port_probe function to config phy
Add a port_probe function to configure the phy. This leads to earlier link negotiation so the port is more likely to be ready when used. Signed-off-by: Tim Harvey <tharvey@gateworks.com> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ksz9477.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/ksz9477.c b/drivers/net/ksz9477.c
index 5b0ef78..6b59b5f 100644
--- a/drivers/net/ksz9477.c
+++ b/drivers/net/ksz9477.c
@@ -337,11 +337,21 @@ static int ksz_port_setup(struct udevice *dev, int port,
return 0;
}
+static int ksz_port_probe(struct udevice *dev, int port, struct phy_device *phy)
+{
+ int supported = PHY_GBIT_FEATURES;
+
+ /* configure phy */
+ phy->supported &= supported;
+ phy->advertising &= supported;
+
+ return phy_config(phy);
+}
+
static int ksz_port_enable(struct udevice *dev, int port, struct phy_device *phy)
{
struct dsa_pdata *pdata = dev_get_uclass_plat(dev);
struct ksz_dsa_priv *priv = dev_get_priv(dev);
- int supported = PHY_GBIT_FEATURES;
u8 data8;
int ret;
@@ -365,23 +375,12 @@ static int ksz_port_enable(struct udevice *dev, int port, struct phy_device *phy
if (port == pdata->cpu_port)
return 0;
- /* configure phy */
- phy->supported &= supported;
- phy->advertising &= supported;
- ret = phy_config(phy);
- if (ret)
- return ret;
-
- ret = phy_startup(phy);
- if (ret)
- return ret;
-
/* start switch */
ksz_read8(priv->dev, REG_SW_OPERATION, &data8);
data8 |= SW_START;
ksz_write8(priv->dev, REG_SW_OPERATION, data8);
- return 0;
+ return phy_startup(phy);
}
static void ksz_port_disable(struct udevice *dev, int port, struct phy_device *phy)
@@ -410,6 +409,7 @@ static void ksz_port_disable(struct udevice *dev, int port, struct phy_device *p
}
static const struct dsa_ops ksz_dsa_ops = {
+ .port_probe = ksz_port_probe,
.port_enable = ksz_port_enable,
.port_disable = ksz_port_disable,
};