mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
net: mscc: ocelot: Fix reset of the phys
The function mscc_miim_reset resets all the phys, but it is called for each phy separetely. One consequence of this is that the boot time is increased by 2 seconds. The fix consists for calling the mscc_miim_reset function only once for all phys. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
This commit is contained in:
parent
e515166636
commit
cd424f35ee
1 changed files with 10 additions and 17 deletions
|
@ -142,18 +142,16 @@ static const unsigned long ocelot_regs_ana_table[] = {
|
||||||
|
|
||||||
static struct mscc_miim_dev miim[NUM_PHY];
|
static struct mscc_miim_dev miim[NUM_PHY];
|
||||||
|
|
||||||
static int mscc_miim_reset(struct mii_dev *bus)
|
static void mscc_phy_reset(void)
|
||||||
{
|
{
|
||||||
struct mscc_miim_dev *miim = (struct mscc_miim_dev *)bus->priv;
|
writel(0, miim[INTERNAL].phy_regs + PHY_CFG);
|
||||||
|
writel(PHY_CFG_RST | PHY_CFG_COMMON_RST
|
||||||
if (miim->phy_regs) {
|
| PHY_CFG_ENA, miim[INTERNAL].phy_regs + PHY_CFG);
|
||||||
writel(0, miim->phy_regs + PHY_CFG);
|
if (wait_for_bit_le32(miim[INTERNAL].phy_regs + PHY_STAT,
|
||||||
writel(PHY_CFG_RST | PHY_CFG_COMMON_RST
|
PHY_STAT_SUPERVISOR_COMPLETE,
|
||||||
| PHY_CFG_ENA, miim->phy_regs + PHY_CFG);
|
true, 2000, false)) {
|
||||||
mdelay(500);
|
pr_err("Timeout in phy reset\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For now only setup the internal mdio bus */
|
/* For now only setup the internal mdio bus */
|
||||||
|
@ -194,7 +192,6 @@ static struct mii_dev *ocelot_mdiobus_init(struct udevice *dev)
|
||||||
miim[INTERNAL].phy_regs = ioremap(phy_base[PHY], phy_size[PHY]);
|
miim[INTERNAL].phy_regs = ioremap(phy_base[PHY], phy_size[PHY]);
|
||||||
miim[INTERNAL].regs = ioremap(phy_base[MIIM], phy_size[MIIM]);
|
miim[INTERNAL].regs = ioremap(phy_base[MIIM], phy_size[MIIM]);
|
||||||
bus->priv = &miim[INTERNAL];
|
bus->priv = &miim[INTERNAL];
|
||||||
bus->reset = mscc_miim_reset;
|
|
||||||
bus->read = mscc_miim_read;
|
bus->read = mscc_miim_read;
|
||||||
bus->write = mscc_miim_write;
|
bus->write = mscc_miim_write;
|
||||||
|
|
||||||
|
@ -210,13 +207,8 @@ __weak void mscc_switch_reset(void)
|
||||||
|
|
||||||
static void ocelot_stop(struct udevice *dev)
|
static void ocelot_stop(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct ocelot_private *priv = dev_get_priv(dev);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
mscc_switch_reset();
|
mscc_switch_reset();
|
||||||
for (i = 0; i < NUM_PHY; i++)
|
mscc_phy_reset();
|
||||||
if (priv->bus[i])
|
|
||||||
mscc_miim_reset(priv->bus[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ocelot_cpu_capture_setup(struct ocelot_private *priv)
|
static void ocelot_cpu_capture_setup(struct ocelot_private *priv)
|
||||||
|
@ -473,6 +465,7 @@ static int ocelot_probe(struct udevice *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->bus[INTERNAL] = ocelot_mdiobus_init(dev);
|
priv->bus[INTERNAL] = ocelot_mdiobus_init(dev);
|
||||||
|
mscc_phy_reset();
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
phy_connect(priv->bus[INTERNAL], i, dev,
|
phy_connect(priv->bus[INTERNAL], i, dev,
|
||||||
|
|
Loading…
Add table
Reference in a new issue