Lines Matching +full:3 +full:- +full:c45
1 // SPDX-License-Identifier: GPL-2.0-only
31 unsigned long fin_time = jiffies + 3 * HZ; /* 3 seconds */ in sxgbe_mdio_busy_wait()
39 return -EBUSY; in sxgbe_mdio_busy_wait()
48 ((sp->clk_csr & 0x7) << 19) | SXGBE_MII_BUSY; in sxgbe_mdio_ctrl_data()
49 writel(reg, sp->ioaddr + sp->hw->mii.data); in sxgbe_mdio_ctrl_data()
60 writel(reg, sp->ioaddr + sp->hw->mii.addr); in sxgbe_mdio_c45()
70 writel(1 << phyaddr, sp->ioaddr + SXGBE_MDIO_CLAUSE22_PORT_REG); in sxgbe_mdio_c22()
74 writel(reg, sp->ioaddr + sp->hw->mii.addr); in sxgbe_mdio_c22()
82 const struct mii_regs *mii = &sp->hw->mii; in sxgbe_mdio_access()
85 rc = sxgbe_mdio_busy_wait(sp->ioaddr, mii->data); in sxgbe_mdio_access()
92 /* Ports 0-3 only support C22. */ in sxgbe_mdio_access()
94 return -ENODEV; in sxgbe_mdio_access()
99 return sxgbe_mdio_busy_wait(sp->ioaddr, mii->data); in sxgbe_mdio_access()
107 * Description: this function used for C45 and C22 MDIO Read
111 struct net_device *ndev = bus->priv; in sxgbe_mdio_read()
119 return readl(priv->ioaddr + priv->hw->mii.data) & 0xffff; in sxgbe_mdio_read()
128 * Description: this function is used for C45 and C22 MDIO write
133 struct net_device *ndev = bus->priv; in sxgbe_mdio_write()
144 struct sxgbe_mdio_bus_data *mdio_data = priv->plat->mdio_bus_data; in sxgbe_mdio_register()
154 return -ENOMEM; in sxgbe_mdio_register()
157 if (mdio_data->irqs) in sxgbe_mdio_register()
158 irqlist = mdio_data->irqs; in sxgbe_mdio_register()
160 irqlist = priv->mii_irq; in sxgbe_mdio_register()
163 mdio_bus->name = "sxgbe"; in sxgbe_mdio_register()
164 mdio_bus->read = &sxgbe_mdio_read; in sxgbe_mdio_register()
165 mdio_bus->write = &sxgbe_mdio_write; in sxgbe_mdio_register()
166 snprintf(mdio_bus->id, MII_BUS_ID_SIZE, "%s-%x", in sxgbe_mdio_register()
167 mdio_bus->name, priv->plat->bus_id); in sxgbe_mdio_register()
168 mdio_bus->priv = ndev; in sxgbe_mdio_register()
169 mdio_bus->phy_mask = mdio_data->phy_mask; in sxgbe_mdio_register()
170 mdio_bus->parent = priv->device; in sxgbe_mdio_register()
188 if ((mdio_data->irqs == NULL) && in sxgbe_mdio_register()
189 (mdio_data->probed_phy_irq > 0)) { in sxgbe_mdio_register()
190 irqlist[phy_addr] = mdio_data->probed_phy_irq; in sxgbe_mdio_register()
191 phy->irq = mdio_data->probed_phy_irq; in sxgbe_mdio_register()
198 if (priv->plat->phy_addr == -1) in sxgbe_mdio_register()
199 priv->plat->phy_addr = phy_addr; in sxgbe_mdio_register()
201 act = (priv->plat->phy_addr == phy_addr); in sxgbe_mdio_register()
202 switch (phy->irq) { in sxgbe_mdio_register()
210 sprintf(irq_num, "%d", phy->irq); in sxgbe_mdio_register()
215 phy->phy_id, phy_addr, irq_str, in sxgbe_mdio_register()
226 priv->mii = mdio_bus; in sxgbe_mdio_register()
231 err = -ENODEV; in sxgbe_mdio_register()
242 if (!priv->mii) in sxgbe_mdio_unregister()
245 mdiobus_unregister(priv->mii); in sxgbe_mdio_unregister()
246 priv->mii->priv = NULL; in sxgbe_mdio_unregister()
247 mdiobus_free(priv->mii); in sxgbe_mdio_unregister()
248 priv->mii = NULL; in sxgbe_mdio_unregister()