Lines Matching full:phydev
31 * @phydev: target phy_device struct
38 static int genphy_config_advert(struct phy_device *phydev) in genphy_config_advert() argument
45 phydev->advertising &= phydev->supported; in genphy_config_advert()
46 advertise = phydev->advertising; in genphy_config_advert()
49 adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE); in genphy_config_advert()
75 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE, adv); in genphy_config_advert()
82 bmsr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_config_advert()
94 adv = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000); in genphy_config_advert()
102 if (phydev->supported & (SUPPORTED_1000baseT_Half | in genphy_config_advert()
113 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, adv); in genphy_config_advert()
122 * genphy_setup_forced - configures/forces speed/duplex from @phydev
123 * @phydev: target phy_device struct
126 * to the values in phydev. Assumes that the values are valid.
128 static int genphy_setup_forced(struct phy_device *phydev) in genphy_setup_forced() argument
133 phydev->pause = phydev->asym_pause = 0; in genphy_setup_forced()
135 if (SPEED_1000 == phydev->speed) in genphy_setup_forced()
137 else if (SPEED_100 == phydev->speed) in genphy_setup_forced()
140 if (DUPLEX_FULL == phydev->duplex) in genphy_setup_forced()
143 err = phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, ctl); in genphy_setup_forced()
151 * @phydev: target phy_device struct
153 int genphy_restart_aneg(struct phy_device *phydev) in genphy_restart_aneg() argument
157 ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_restart_aneg()
167 ctl = phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, ctl); in genphy_restart_aneg()
175 * @phydev: target phy_device struct
181 int genphy_config_aneg(struct phy_device *phydev) in genphy_config_aneg() argument
185 if (AUTONEG_ENABLE != phydev->autoneg) in genphy_config_aneg()
186 return genphy_setup_forced(phydev); in genphy_config_aneg()
188 result = genphy_config_advert(phydev); in genphy_config_aneg()
196 int ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_config_aneg()
208 result = genphy_restart_aneg(phydev); in genphy_config_aneg()
214 * genphy_update_link - update link status in @phydev
215 * @phydev: target phy_device struct
217 * Description: Update the value in phydev->link to reflect the
221 int genphy_update_link(struct phy_device *phydev) in genphy_update_link() argument
229 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
235 if (phydev->link && mii_reg & BMSR_LSTATUS) in genphy_update_link()
238 if ((phydev->autoneg == AUTONEG_ENABLE) && in genphy_update_link()
243 phydev->dev->name); in genphy_update_link()
250 phydev->link = 0; in genphy_update_link()
256 phydev->link = 0; in genphy_update_link()
264 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
267 phydev->link = 1; in genphy_update_link()
270 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_update_link()
273 phydev->link = 1; in genphy_update_link()
275 phydev->link = 0; in genphy_update_link()
290 int genphy_parse_link(struct phy_device *phydev) in genphy_parse_link() argument
292 int mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_parse_link()
295 if (phydev->autoneg == AUTONEG_ENABLE) { in genphy_parse_link()
301 if (phydev->supported & (SUPPORTED_1000baseT_Full | in genphy_parse_link()
306 gblpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_STAT1000); in genphy_parse_link()
311 gblpa &= phy_read(phydev, in genphy_parse_link()
318 phydev->speed = SPEED_10; in genphy_parse_link()
319 phydev->duplex = DUPLEX_HALF; in genphy_parse_link()
323 phydev->speed = SPEED_1000; in genphy_parse_link()
326 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
332 lpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE); in genphy_parse_link()
333 lpa &= phy_read(phydev, MDIO_DEVAD_NONE, MII_LPA); in genphy_parse_link()
336 phydev->speed = SPEED_100; in genphy_parse_link()
339 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
342 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
353 estatus = phy_read(phydev, MDIO_DEVAD_NONE, in genphy_parse_link()
358 phydev->speed = SPEED_1000; in genphy_parse_link()
360 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
364 u32 bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); in genphy_parse_link()
366 phydev->speed = SPEED_10; in genphy_parse_link()
367 phydev->duplex = DUPLEX_HALF; in genphy_parse_link()
370 phydev->duplex = DUPLEX_FULL; in genphy_parse_link()
373 phydev->speed = SPEED_1000; in genphy_parse_link()
375 phydev->speed = SPEED_100; in genphy_parse_link()
381 int genphy_config(struct phy_device *phydev) in genphy_config() argument
391 val = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); in genphy_config()
409 val = phy_read(phydev, MDIO_DEVAD_NONE, MII_ESTATUS); in genphy_config()
424 phydev->supported &= features; in genphy_config()
425 phydev->advertising &= features; in genphy_config()
427 genphy_config_aneg(phydev); in genphy_config()
432 int genphy_startup(struct phy_device *phydev) in genphy_startup() argument
436 ret = genphy_update_link(phydev); in genphy_startup()
440 return genphy_parse_link(phydev); in genphy_startup()
443 int genphy_shutdown(struct phy_device *phydev) in genphy_shutdown() argument
556 int phy_set_supported(struct phy_device *phydev, u32 max_speed) in phy_set_supported() argument
558 /* The default values for phydev->supported are provided by the PHY in phy_set_supported()
562 phydev->supported &= PHY_DEFAULT_FEATURES; in phy_set_supported()
568 phydev->supported |= PHY_1000BT_FEATURES; in phy_set_supported()
571 phydev->supported |= PHY_100BT_FEATURES; in phy_set_supported()
574 phydev->supported |= PHY_10BT_FEATURES; in phy_set_supported()
580 static int phy_probe(struct phy_device *phydev) in phy_probe() argument
584 phydev->advertising = phydev->supported = phydev->drv->features; in phy_probe()
585 phydev->mmds = phydev->drv->mmds; in phy_probe()
587 if (phydev->drv->probe) in phy_probe()
588 err = phydev->drv->probe(phydev); in phy_probe()
603 static struct phy_driver *get_phy_driver(struct phy_device *phydev, in get_phy_driver() argument
607 int phy_id = phydev->phy_id; in get_phy_driver()
733 struct phy_device *phydev; in get_phy_device_by_mask() local
735 phydev = search_for_existing_phy(bus, phy_mask, interface); in get_phy_device_by_mask()
736 if (phydev) in get_phy_device_by_mask()
737 return phydev; in get_phy_device_by_mask()
741 phydev = create_phy_by_mask(bus, phy_mask, in get_phy_device_by_mask()
743 if (IS_ERR(phydev)) in get_phy_device_by_mask()
745 if (phydev) in get_phy_device_by_mask()
746 return phydev; in get_phy_device_by_mask()
774 int phy_reset(struct phy_device *phydev) in phy_reset() argument
780 if (phydev->flags & PHY_FLAG_BROKEN_RESET) in phy_reset()
785 if (is_10g_interface(phydev->interface)) { in phy_reset()
786 if (!phydev->mmds) in phy_reset()
787 gen10g_discover_mmds(phydev); in phy_reset()
789 devad = ffs(phydev->mmds) - 1; in phy_reset()
793 if (phy_write(phydev, devad, MII_BMCR, BMCR_RESET) < 0) { in phy_reset()
806 reg = phy_read(phydev, devad, MII_BMCR); in phy_reset()
808 reg = phy_read(phydev, devad, MII_BMCR); in phy_reset()
828 struct phy_device *phydev; in miiphy_reset() local
835 phydev = get_phy_device(bus, addr, PHY_INTERFACE_MODE_MII); in miiphy_reset()
837 return phy_reset(phydev); in miiphy_reset()
855 void phy_connect_dev(struct phy_device *phydev, struct udevice *dev) in phy_connect_dev() argument
857 void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev) in phy_connect_dev()
861 phy_reset(phydev); in phy_connect_dev()
862 if (phydev->dev && phydev->dev != dev) { in phy_connect_dev()
864 phydev->bus->name, phydev->addr, in phy_connect_dev()
865 phydev->dev->name, dev->name); in phy_connect_dev()
867 phydev->dev = dev; in phy_connect_dev()
868 debug("%s connected to %s\n", dev->name, phydev->drv->name); in phy_connect_dev()
879 struct phy_device *phydev = NULL; in phy_connect() local
887 phydev = phy_device_create(bus, sn, PHY_FIXED_ID, false, in phy_connect()
894 if (phydev == NULL) in phy_connect()
895 phydev = phy_find_by_mask(bus, 1 << addr, interface); in phy_connect()
897 if (phydev) in phy_connect()
898 phy_connect_dev(phydev, dev); in phy_connect()
901 return phydev; in phy_connect()
907 int phy_startup(struct phy_device *phydev) in phy_startup() argument
909 if (phydev->drv->startup) in phy_startup()
910 return phydev->drv->startup(phydev); in phy_startup()
915 __weak int board_phy_config(struct phy_device *phydev) in board_phy_config() argument
917 if (phydev->drv->config) in board_phy_config()
918 return phydev->drv->config(phydev); in board_phy_config()
922 int phy_config(struct phy_device *phydev) in phy_config() argument
925 return board_phy_config(phydev); in phy_config()
928 int phy_shutdown(struct phy_device *phydev) in phy_shutdown() argument
930 if (phydev->drv->shutdown) in phy_shutdown()
931 phydev->drv->shutdown(phydev); in phy_shutdown()