Lines Matching refs:priv
34 struct net_device *dev = bus->priv; in bcmgenet_mii_read()
35 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_read() local
38 bcmgenet_umac_writel(priv, (MDIO_RD | (phy_id << MDIO_PMD_SHIFT) | in bcmgenet_mii_read()
41 reg = bcmgenet_umac_readl(priv, UMAC_MDIO_CMD); in bcmgenet_mii_read()
43 bcmgenet_umac_writel(priv, reg, UMAC_MDIO_CMD); in bcmgenet_mii_read()
44 wait_event_timeout(priv->wq, in bcmgenet_mii_read()
45 !(bcmgenet_umac_readl(priv, UMAC_MDIO_CMD) in bcmgenet_mii_read()
48 ret = bcmgenet_umac_readl(priv, UMAC_MDIO_CMD); in bcmgenet_mii_read()
60 struct net_device *dev = bus->priv; in bcmgenet_mii_write()
61 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_write() local
64 bcmgenet_umac_writel(priv, (MDIO_WR | (phy_id << MDIO_PMD_SHIFT) | in bcmgenet_mii_write()
67 reg = bcmgenet_umac_readl(priv, UMAC_MDIO_CMD); in bcmgenet_mii_write()
69 bcmgenet_umac_writel(priv, reg, UMAC_MDIO_CMD); in bcmgenet_mii_write()
70 wait_event_timeout(priv->wq, in bcmgenet_mii_write()
71 !(bcmgenet_umac_readl(priv, UMAC_MDIO_CMD) & in bcmgenet_mii_write()
83 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_setup() local
84 struct phy_device *phydev = priv->phydev; in bcmgenet_mii_setup()
88 if (priv->old_link != phydev->link) { in bcmgenet_mii_setup()
90 priv->old_link = phydev->link; in bcmgenet_mii_setup()
95 if (priv->old_speed != phydev->speed) { in bcmgenet_mii_setup()
97 priv->old_speed = phydev->speed; in bcmgenet_mii_setup()
100 if (priv->old_duplex != phydev->duplex) { in bcmgenet_mii_setup()
102 priv->old_duplex = phydev->duplex; in bcmgenet_mii_setup()
105 if (priv->old_pause != phydev->pause) { in bcmgenet_mii_setup()
107 priv->old_pause = phydev->pause; in bcmgenet_mii_setup()
138 reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); in bcmgenet_mii_setup()
141 bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); in bcmgenet_mii_setup()
143 reg = bcmgenet_umac_readl(priv, UMAC_CMD); in bcmgenet_mii_setup()
148 bcmgenet_umac_writel(priv, reg, UMAC_CMD); in bcmgenet_mii_setup()
163 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_reset() local
165 if (priv->phydev) { in bcmgenet_mii_reset()
166 phy_init_hw(priv->phydev); in bcmgenet_mii_reset()
167 phy_start_aneg(priv->phydev); in bcmgenet_mii_reset()
173 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_phy_power_set() local
177 if (!GENET_IS_V4(priv)) in bcmgenet_phy_power_set()
180 reg = bcmgenet_ext_readl(priv, EXT_GPHY_CTRL); in bcmgenet_phy_power_set()
183 bcmgenet_ext_writel(priv, reg, EXT_GPHY_CTRL); in bcmgenet_phy_power_set()
188 bcmgenet_ext_writel(priv, reg, EXT_GPHY_CTRL); in bcmgenet_phy_power_set()
194 bcmgenet_ext_writel(priv, reg, EXT_GPHY_CTRL); in bcmgenet_phy_power_set()
198 bcmgenet_ext_writel(priv, reg, EXT_GPHY_CTRL); in bcmgenet_phy_power_set()
204 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_internal_phy_setup() local
210 reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT); in bcmgenet_internal_phy_setup()
212 bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT); in bcmgenet_internal_phy_setup()
216 static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) in bcmgenet_moca_phy_setup() argument
221 reg = bcmgenet_sys_readl(priv, SYS_PORT_CTRL); in bcmgenet_moca_phy_setup()
223 bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL); in bcmgenet_moca_phy_setup()
228 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_config() local
229 struct phy_device *phydev = priv->phydev; in bcmgenet_mii_config()
230 struct device *kdev = &priv->pdev->dev; in bcmgenet_mii_config()
236 priv->ext_phy = !phy_is_internal(priv->phydev) && in bcmgenet_mii_config()
237 (priv->phy_interface != PHY_INTERFACE_MODE_MOCA); in bcmgenet_mii_config()
239 if (phy_is_internal(priv->phydev)) in bcmgenet_mii_config()
240 priv->phy_interface = PHY_INTERFACE_MODE_NA; in bcmgenet_mii_config()
242 switch (priv->phy_interface) { in bcmgenet_mii_config()
250 if (GENET_IS_V4(priv)) in bcmgenet_mii_config()
255 bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL); in bcmgenet_mii_config()
257 if (phy_is_internal(priv->phydev)) { in bcmgenet_mii_config()
260 } else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) { in bcmgenet_mii_config()
262 bcmgenet_moca_phy_setup(priv); in bcmgenet_mii_config()
269 bcmgenet_sys_writel(priv, in bcmgenet_mii_config()
280 if ((priv->phydev->supported & PHY_BASIC_FEATURES) == in bcmgenet_mii_config()
285 bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL); in bcmgenet_mii_config()
302 bcmgenet_sys_writel(priv, in bcmgenet_mii_config()
306 dev_err(kdev, "unknown phy mode: %d\n", priv->phy_interface); in bcmgenet_mii_config()
313 if (priv->ext_phy) { in bcmgenet_mii_config()
314 reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL); in bcmgenet_mii_config()
316 bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL); in bcmgenet_mii_config()
327 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_probe() local
328 struct device_node *dn = priv->pdev->dev.of_node; in bcmgenet_mii_probe()
334 phy_flags = priv->gphy_rev; in bcmgenet_mii_probe()
337 priv->old_link = -1; in bcmgenet_mii_probe()
338 priv->old_speed = -1; in bcmgenet_mii_probe()
339 priv->old_duplex = -1; in bcmgenet_mii_probe()
340 priv->old_pause = -1; in bcmgenet_mii_probe()
343 if (priv->phydev) { in bcmgenet_mii_probe()
351 if (!priv->phy_dn && of_phy_is_fixed_link(dn)) { in bcmgenet_mii_probe()
356 priv->phy_dn = of_node_get(dn); in bcmgenet_mii_probe()
359 phydev = of_phy_connect(dev, priv->phy_dn, bcmgenet_mii_setup, in bcmgenet_mii_probe()
360 phy_flags, priv->phy_interface); in bcmgenet_mii_probe()
366 phydev = priv->phydev; in bcmgenet_mii_probe()
370 priv->phy_interface); in bcmgenet_mii_probe()
377 priv->phydev = phydev; in bcmgenet_mii_probe()
386 phy_disconnect(priv->phydev); in bcmgenet_mii_probe()
395 if (phy_is_internal(priv->phydev)) in bcmgenet_mii_probe()
396 priv->mii_bus->irq[phydev->addr] = PHY_IGNORE_INTERRUPT; in bcmgenet_mii_probe()
398 priv->mii_bus->irq[phydev->addr] = PHY_POLL; in bcmgenet_mii_probe()
406 static int bcmgenet_mii_alloc(struct bcmgenet_priv *priv) in bcmgenet_mii_alloc() argument
410 if (priv->mii_bus) in bcmgenet_mii_alloc()
413 priv->mii_bus = mdiobus_alloc(); in bcmgenet_mii_alloc()
414 if (!priv->mii_bus) { in bcmgenet_mii_alloc()
419 bus = priv->mii_bus; in bcmgenet_mii_alloc()
420 bus->priv = priv->dev; in bcmgenet_mii_alloc()
422 bus->parent = &priv->pdev->dev; in bcmgenet_mii_alloc()
426 priv->pdev->name, priv->pdev->id); in bcmgenet_mii_alloc()
430 mdiobus_free(priv->mii_bus); in bcmgenet_mii_alloc()
437 static int bcmgenet_mii_of_init(struct bcmgenet_priv *priv) in bcmgenet_mii_of_init() argument
439 struct device_node *dn = priv->pdev->dev.of_node; in bcmgenet_mii_of_init()
440 struct device *kdev = &priv->pdev->dev; in bcmgenet_mii_of_init()
445 compat = kasprintf(GFP_KERNEL, "brcm,genet-mdio-v%d", priv->version); in bcmgenet_mii_of_init()
456 ret = of_mdiobus_register(priv->mii_bus, mdio_dn); in bcmgenet_mii_of_init()
463 priv->phy_dn = of_parse_phandle(dn, "phy-handle", 0); in bcmgenet_mii_of_init()
466 priv->phy_interface = of_get_phy_mode(dn); in bcmgenet_mii_of_init()
480 static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv) in bcmgenet_mii_pd_init() argument
482 struct device *kdev = &priv->pdev->dev; in bcmgenet_mii_pd_init()
484 struct mii_bus *mdio = priv->mii_bus; in bcmgenet_mii_pd_init()
532 if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET) { in bcmgenet_mii_pd_init()
540 priv->phydev = phydev; in bcmgenet_mii_pd_init()
541 priv->phy_interface = pd->phy_interface; in bcmgenet_mii_pd_init()
546 static int bcmgenet_mii_bus_init(struct bcmgenet_priv *priv) in bcmgenet_mii_bus_init() argument
548 struct device_node *dn = priv->pdev->dev.of_node; in bcmgenet_mii_bus_init()
551 return bcmgenet_mii_of_init(priv); in bcmgenet_mii_bus_init()
553 return bcmgenet_mii_pd_init(priv); in bcmgenet_mii_bus_init()
558 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_init() local
561 ret = bcmgenet_mii_alloc(priv); in bcmgenet_mii_init()
565 ret = bcmgenet_mii_bus_init(priv); in bcmgenet_mii_init()
576 of_node_put(priv->phy_dn); in bcmgenet_mii_init()
577 mdiobus_unregister(priv->mii_bus); in bcmgenet_mii_init()
579 kfree(priv->mii_bus->irq); in bcmgenet_mii_init()
580 mdiobus_free(priv->mii_bus); in bcmgenet_mii_init()
586 struct bcmgenet_priv *priv = netdev_priv(dev); in bcmgenet_mii_exit() local
588 of_node_put(priv->phy_dn); in bcmgenet_mii_exit()
589 mdiobus_unregister(priv->mii_bus); in bcmgenet_mii_exit()
590 kfree(priv->mii_bus->irq); in bcmgenet_mii_exit()
591 mdiobus_free(priv->mii_bus); in bcmgenet_mii_exit()