Lines Matching refs:phydev
261 static int __set_phy_supported(struct phy_device *phydev, u32 max_speed) in __set_phy_supported() argument
263 return __set_linkmode_max_speed(max_speed, phydev->supported); in __set_phy_supported()
276 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed) in phy_set_max_speed() argument
280 err = __set_phy_supported(phydev, max_speed); in phy_set_max_speed()
284 phy_advertise_supported(phydev); in phy_set_max_speed()
290 void of_set_phy_supported(struct phy_device *phydev) in of_set_phy_supported() argument
292 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_supported()
302 __set_phy_supported(phydev, max_speed); in of_set_phy_supported()
305 void of_set_phy_eee_broken(struct phy_device *phydev) in of_set_phy_eee_broken() argument
307 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_eee_broken()
329 phydev->eee_broken_modes = broken; in of_set_phy_eee_broken()
342 void phy_resolve_aneg_pause(struct phy_device *phydev) in phy_resolve_aneg_pause() argument
344 if (phydev->duplex == DUPLEX_FULL) { in phy_resolve_aneg_pause()
345 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, in phy_resolve_aneg_pause()
346 phydev->lp_advertising); in phy_resolve_aneg_pause()
347 phydev->asym_pause = linkmode_test_bit( in phy_resolve_aneg_pause()
349 phydev->lp_advertising); in phy_resolve_aneg_pause()
362 void phy_resolve_aneg_linkmode(struct phy_device *phydev) in phy_resolve_aneg_linkmode() argument
367 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_aneg_linkmode()
371 phydev->speed = settings[i].speed; in phy_resolve_aneg_linkmode()
372 phydev->duplex = settings[i].duplex; in phy_resolve_aneg_linkmode()
376 phy_resolve_aneg_pause(phydev); in phy_resolve_aneg_linkmode()
389 void phy_check_downshift(struct phy_device *phydev) in phy_check_downshift() argument
394 phydev->downshifted_rate = 0; in phy_check_downshift()
396 if (phydev->autoneg == AUTONEG_DISABLE || in phy_check_downshift()
397 phydev->speed == SPEED_UNKNOWN) in phy_check_downshift()
400 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_check_downshift()
408 if (speed == SPEED_UNKNOWN || phydev->speed >= speed) in phy_check_downshift()
411 …phydev_warn(phydev, "Downshift occurred from negotiated speed %s to actual speed %s, check cabling… in phy_check_downshift()
412 phy_speed_to_str(speed), phy_speed_to_str(phydev->speed)); in phy_check_downshift()
414 phydev->downshifted_rate = 1; in phy_check_downshift()
418 static int phy_resolve_min_speed(struct phy_device *phydev, bool fdx_only) in phy_resolve_min_speed() argument
423 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_min_speed()
436 int phy_speed_down_core(struct phy_device *phydev) in phy_speed_down_core() argument
438 int min_common_speed = phy_resolve_min_speed(phydev, true); in phy_speed_down_core()
443 return __set_linkmode_max_speed(min_common_speed, phydev->advertising); in phy_speed_down_core()
469 int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in __phy_read_mmd() argument
476 if (phydev->drv && phydev->drv->read_mmd) { in __phy_read_mmd()
477 val = phydev->drv->read_mmd(phydev, devad, regnum); in __phy_read_mmd()
478 } else if (phydev->is_c45) { in __phy_read_mmd()
479 val = __mdiobus_c45_read(phydev->mdio.bus, phydev->mdio.addr, in __phy_read_mmd()
482 struct mii_bus *bus = phydev->mdio.bus; in __phy_read_mmd()
483 int phy_addr = phydev->mdio.addr; in __phy_read_mmd()
503 int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in phy_read_mmd() argument
507 phy_lock_mdio_bus(phydev); in phy_read_mmd()
508 ret = __phy_read_mmd(phydev, devad, regnum); in phy_read_mmd()
509 phy_unlock_mdio_bus(phydev); in phy_read_mmd()
525 int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in __phy_write_mmd() argument
532 if (phydev->drv && phydev->drv->write_mmd) { in __phy_write_mmd()
533 ret = phydev->drv->write_mmd(phydev, devad, regnum, val); in __phy_write_mmd()
534 } else if (phydev->is_c45) { in __phy_write_mmd()
535 ret = __mdiobus_c45_write(phydev->mdio.bus, phydev->mdio.addr, in __phy_write_mmd()
538 struct mii_bus *bus = phydev->mdio.bus; in __phy_write_mmd()
539 int phy_addr = phydev->mdio.addr; in __phy_write_mmd()
562 int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in phy_write_mmd() argument
566 phy_lock_mdio_bus(phydev); in phy_write_mmd()
567 ret = __phy_write_mmd(phydev, devad, regnum, val); in phy_write_mmd()
568 phy_unlock_mdio_bus(phydev); in phy_write_mmd()
587 int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify_changed() argument
591 phy_lock_mdio_bus(phydev); in phy_modify_changed()
592 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_changed()
593 phy_unlock_mdio_bus(phydev); in phy_modify_changed()
610 int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in __phy_modify() argument
614 ret = __phy_modify_changed(phydev, regnum, mask, set); in __phy_modify()
631 int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify() argument
635 phy_lock_mdio_bus(phydev); in phy_modify()
636 ret = __phy_modify(phydev, regnum, mask, set); in phy_modify()
637 phy_unlock_mdio_bus(phydev); in phy_modify()
656 int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd_changed() argument
661 ret = __phy_read_mmd(phydev, devad, regnum); in __phy_modify_mmd_changed()
669 ret = __phy_write_mmd(phydev, devad, regnum, new); in __phy_modify_mmd_changed()
689 int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd_changed() argument
694 phy_lock_mdio_bus(phydev); in phy_modify_mmd_changed()
695 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in phy_modify_mmd_changed()
696 phy_unlock_mdio_bus(phydev); in phy_modify_mmd_changed()
714 int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd() argument
719 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in __phy_modify_mmd()
737 int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd() argument
742 phy_lock_mdio_bus(phydev); in phy_modify_mmd()
743 ret = __phy_modify_mmd(phydev, devad, regnum, mask, set); in phy_modify_mmd()
744 phy_unlock_mdio_bus(phydev); in phy_modify_mmd()
750 static int __phy_read_page(struct phy_device *phydev) in __phy_read_page() argument
752 …if (WARN_ONCE(!phydev->drv->read_page, "read_page callback not available, PHY driver not loaded?\n… in __phy_read_page()
755 return phydev->drv->read_page(phydev); in __phy_read_page()
758 static int __phy_write_page(struct phy_device *phydev, int page) in __phy_write_page() argument
760 …if (WARN_ONCE(!phydev->drv->write_page, "write_page callback not available, PHY driver not loaded?… in __phy_write_page()
763 return phydev->drv->write_page(phydev, page); in __phy_write_page()
774 int phy_save_page(struct phy_device *phydev) in phy_save_page() argument
776 phy_lock_mdio_bus(phydev); in phy_save_page()
777 return __phy_read_page(phydev); in phy_save_page()
792 int phy_select_page(struct phy_device *phydev, int page) in phy_select_page() argument
796 oldpage = ret = phy_save_page(phydev); in phy_select_page()
801 ret = __phy_write_page(phydev, page); in phy_select_page()
826 int phy_restore_page(struct phy_device *phydev, int oldpage, int ret) in phy_restore_page() argument
831 r = __phy_write_page(phydev, oldpage); in phy_restore_page()
843 phy_unlock_mdio_bus(phydev); in phy_restore_page()
857 int phy_read_paged(struct phy_device *phydev, int page, u32 regnum) in phy_read_paged() argument
861 oldpage = phy_select_page(phydev, page); in phy_read_paged()
863 ret = __phy_read(phydev, regnum); in phy_read_paged()
865 return phy_restore_page(phydev, oldpage, ret); in phy_read_paged()
878 int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val) in phy_write_paged() argument
882 oldpage = phy_select_page(phydev, page); in phy_write_paged()
884 ret = __phy_write(phydev, regnum, val); in phy_write_paged()
886 return phy_restore_page(phydev, oldpage, ret); in phy_write_paged()
900 int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged_changed() argument
905 oldpage = phy_select_page(phydev, page); in phy_modify_paged_changed()
907 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_paged_changed()
909 return phy_restore_page(phydev, oldpage, ret); in phy_modify_paged_changed()
923 int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged() argument
926 int ret = phy_modify_paged_changed(phydev, page, regnum, mask, set); in phy_modify_paged()