Lines Matching refs:phydev
37 static int genphy_config_advert(struct phy_device *phydev) in genphy_config_advert() argument
44 phydev->advertising &= phydev->supported; in genphy_config_advert()
45 advertise = phydev->advertising; in genphy_config_advert()
48 adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE); in genphy_config_advert()
74 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE, adv); in genphy_config_advert()
81 bmsr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_config_advert()
93 adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000); in genphy_config_advert()
101 if (phydev->supported & (SUPPORTED_1000baseT_Half | in genphy_config_advert()
112 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, adv); in genphy_config_advert()
126 static int genphy_setup_forced(struct phy_device *phydev) in genphy_setup_forced() argument
131 phydev->pause = 0; in genphy_setup_forced()
132 phydev->asym_pause = 0; in genphy_setup_forced()
134 if (phydev->speed == SPEED_1000) in genphy_setup_forced()
136 else if (phydev->speed == SPEED_100) in genphy_setup_forced()
139 if (phydev->duplex == DUPLEX_FULL) in genphy_setup_forced()
142 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, ctl); in genphy_setup_forced()
151 int genphy_restart_aneg(struct phy_device *phydev) in genphy_restart_aneg() argument
155 ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_restart_aneg()
165 ctl = phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, ctl); in genphy_restart_aneg()
178 int genphy_config_aneg(struct phy_device *phydev) in genphy_config_aneg() argument
182 if (phydev->autoneg != AUTONEG_ENABLE) in genphy_config_aneg()
183 return genphy_setup_forced(phydev); in genphy_config_aneg()
185 result = genphy_config_advert(phydev); in genphy_config_aneg()
195 int ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_config_aneg()
209 result = genphy_restart_aneg(phydev); in genphy_config_aneg()
222 int genphy_update_link(struct phy_device *phydev) in genphy_update_link() argument
230 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
236 if (phydev->link && mii_reg & BMSR_LSTATUS) in genphy_update_link()
239 if ((phydev->autoneg == AUTONEG_ENABLE) && in genphy_update_link()
244 phydev->dev->name); in genphy_update_link()
251 phydev->link = 0; in genphy_update_link()
257 phydev->link = 0; in genphy_update_link()
265 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
268 phydev->link = 1; in genphy_update_link()
271 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
274 phydev->link = 1; in genphy_update_link()
276 phydev->link = 0; in genphy_update_link()
291 int genphy_parse_link(struct phy_device *phydev) in genphy_parse_link() argument
293 int mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_parse_link()
296 if (phydev->autoneg == AUTONEG_ENABLE) { in genphy_parse_link()
302 if (phydev->supported & (SUPPORTED_1000baseT_Full | in genphy_parse_link()
307 gblpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_STAT1000); in genphy_parse_link()
313 gblpa &= phy_read(phydev, in genphy_parse_link()
320 phydev->speed = SPEED_10; in genphy_parse_link()
321 phydev->duplex = DUPLEX_HALF; in genphy_parse_link()
325 phydev->speed = SPEED_1000; in genphy_parse_link()
328 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
334 lpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE); in genphy_parse_link()
335 lpa &= phy_read(phydev, MDIO_DEVAD_NONE, MII_LPA); in genphy_parse_link()
338 phydev->speed = SPEED_100; in genphy_parse_link()
341 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
344 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
356 estatus = phy_read(phydev, MDIO_DEVAD_NONE, in genphy_parse_link()
361 phydev->speed = SPEED_1000; in genphy_parse_link()
363 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
367 u32 bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_parse_link()
369 phydev->speed = SPEED_10; in genphy_parse_link()
370 phydev->duplex = DUPLEX_HALF; in genphy_parse_link()
373 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
376 phydev->speed = SPEED_1000; in genphy_parse_link()
378 phydev->speed = SPEED_100; in genphy_parse_link()
384 int genphy_config(struct phy_device *phydev) in genphy_config() argument
394 val = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_config()
412 val = phy_read(phydev, MDIO_DEVAD_NONE, MII_ESTATUS); in genphy_config()
427 phydev->supported &= features; in genphy_config()
428 phydev->advertising &= features; in genphy_config()
430 genphy_config_aneg(phydev); in genphy_config()
435 int genphy_startup(struct phy_device *phydev) in genphy_startup() argument
439 ret = genphy_update_link(phydev); in genphy_startup()
443 return genphy_parse_link(phydev); in genphy_startup()
446 int genphy_shutdown(struct phy_device *phydev) in genphy_shutdown() argument
558 int phy_set_supported(struct phy_device *phydev, u32 max_speed) in phy_set_supported() argument
564 phydev->supported &= PHY_DEFAULT_FEATURES; in phy_set_supported()
570 phydev->supported |= PHY_1000BT_FEATURES; in phy_set_supported()
573 phydev->supported |= PHY_100BT_FEATURES; in phy_set_supported()
576 phydev->supported |= PHY_10BT_FEATURES; in phy_set_supported()
582 static int phy_probe(struct phy_device *phydev) in phy_probe() argument
586 phydev->advertising = phydev->drv->features; in phy_probe()
587 phydev->supported = phydev->drv->features; in phy_probe()
589 phydev->mmds = phydev->drv->mmds; in phy_probe()
591 if (phydev->drv->probe) in phy_probe()
592 err = phydev->drv->probe(phydev); in phy_probe()
607 static struct phy_driver *get_phy_driver(struct phy_device *phydev, in get_phy_driver() argument
611 int phy_id = phydev->phy_id; in get_phy_driver()
736 struct phy_device *phydev; in get_phy_device_by_mask() local
738 phydev = search_for_existing_phy(bus, phy_mask, interface); in get_phy_device_by_mask()
739 if (phydev) in get_phy_device_by_mask()
740 return phydev; in get_phy_device_by_mask()
744 phydev = create_phy_by_mask(bus, phy_mask, in get_phy_device_by_mask()
746 if (IS_ERR(phydev)) in get_phy_device_by_mask()
748 if (phydev) in get_phy_device_by_mask()
749 return phydev; in get_phy_device_by_mask()
779 int phy_reset(struct phy_device *phydev) in phy_reset() argument
785 if (phydev->flags & PHY_FLAG_BROKEN_RESET) in phy_reset()
790 if (is_10g_interface(phydev->interface)) { in phy_reset()
791 if (!phydev->mmds) in phy_reset()
792 gen10g_discover_mmds(phydev); in phy_reset()
794 devad = ffs(phydev->mmds) - 1; in phy_reset()
798 if (phy_write(phydev, devad, MII_BMCR, BMCR_RESET) < 0) { in phy_reset()
811 reg = phy_read(phydev, devad, MII_BMCR); in phy_reset()
813 reg = phy_read(phydev, devad, MII_BMCR); in phy_reset()
833 struct phy_device *phydev; in miiphy_reset() local
840 phydev = get_phy_device(bus, addr, PHY_INTERFACE_MODE_MII); in miiphy_reset()
842 return phy_reset(phydev); in miiphy_reset()
860 void phy_connect_dev(struct phy_device *phydev, struct udevice *dev) in phy_connect_dev() argument
862 void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev) in phy_connect_dev()
866 phy_reset(phydev); in phy_connect_dev()
867 if (phydev->dev && phydev->dev != dev) { in phy_connect_dev()
869 phydev->bus->name, phydev->addr, in phy_connect_dev()
870 phydev->dev->name, dev->name); in phy_connect_dev()
872 phydev->dev = dev; in phy_connect_dev()
873 debug("%s connected to %s\n", dev->name, phydev->drv->name); in phy_connect_dev()
886 struct phy_device *phydev = NULL; in phy_connect() local
895 phydev = phy_device_create(bus, in phy_connect()
902 if (!phydev) in phy_connect()
903 phydev = phy_find_by_mask(bus, 1 << addr, interface); in phy_connect()
905 if (phydev) in phy_connect()
906 phy_connect_dev(phydev, dev); in phy_connect()
909 return phydev; in phy_connect()
915 int phy_startup(struct phy_device *phydev) in phy_startup() argument
917 if (phydev->drv->startup) in phy_startup()
918 return phydev->drv->startup(phydev); in phy_startup()
923 __weak int board_phy_config(struct phy_device *phydev) in board_phy_config() argument
925 if (phydev->drv->config) in board_phy_config()
926 return phydev->drv->config(phydev); in board_phy_config()
930 int phy_config(struct phy_device *phydev) in phy_config() argument
933 return board_phy_config(phydev); in phy_config()
936 int phy_shutdown(struct phy_device *phydev) in phy_shutdown() argument
938 if (phydev->drv->shutdown) in phy_shutdown()
939 phydev->drv->shutdown(phydev); in phy_shutdown()