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>
This commit is contained in:
parent
2b7252953c
commit
1416b80de4
1 changed files with 13 additions and 13 deletions
|
@ -337,11 +337,21 @@ static int ksz_port_setup(struct udevice *dev, int port,
|
||||||
return 0;
|
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)
|
static int ksz_port_enable(struct udevice *dev, int port, struct phy_device *phy)
|
||||||
{
|
{
|
||||||
struct dsa_pdata *pdata = dev_get_uclass_plat(dev);
|
struct dsa_pdata *pdata = dev_get_uclass_plat(dev);
|
||||||
struct ksz_dsa_priv *priv = dev_get_priv(dev);
|
struct ksz_dsa_priv *priv = dev_get_priv(dev);
|
||||||
int supported = PHY_GBIT_FEATURES;
|
|
||||||
u8 data8;
|
u8 data8;
|
||||||
int ret;
|
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)
|
if (port == pdata->cpu_port)
|
||||||
return 0;
|
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 */
|
/* start switch */
|
||||||
ksz_read8(priv->dev, REG_SW_OPERATION, &data8);
|
ksz_read8(priv->dev, REG_SW_OPERATION, &data8);
|
||||||
data8 |= SW_START;
|
data8 |= SW_START;
|
||||||
ksz_write8(priv->dev, REG_SW_OPERATION, data8);
|
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)
|
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 = {
|
static const struct dsa_ops ksz_dsa_ops = {
|
||||||
|
.port_probe = ksz_port_probe,
|
||||||
.port_enable = ksz_port_enable,
|
.port_enable = ksz_port_enable,
|
||||||
.port_disable = ksz_port_disable,
|
.port_disable = ksz_port_disable,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue