Lines Matching refs:phydev

260 static int __set_phy_supported(struct phy_device *phydev, u32 max_speed)  in __set_phy_supported()  argument
262 return __set_linkmode_max_speed(max_speed, phydev->supported); in __set_phy_supported()
275 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed) in phy_set_max_speed() argument
279 err = __set_phy_supported(phydev, max_speed); in phy_set_max_speed()
283 phy_advertise_supported(phydev); in phy_set_max_speed()
289 void of_set_phy_supported(struct phy_device *phydev) in of_set_phy_supported() argument
291 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_supported()
301 __set_phy_supported(phydev, max_speed); in of_set_phy_supported()
304 void of_set_phy_eee_broken(struct phy_device *phydev) in of_set_phy_eee_broken() argument
306 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_eee_broken()
328 phydev->eee_broken_modes = broken; in of_set_phy_eee_broken()
341 void phy_resolve_aneg_pause(struct phy_device *phydev) in phy_resolve_aneg_pause() argument
343 if (phydev->duplex == DUPLEX_FULL) { in phy_resolve_aneg_pause()
344 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, in phy_resolve_aneg_pause()
345 phydev->lp_advertising); in phy_resolve_aneg_pause()
346 phydev->asym_pause = linkmode_test_bit( in phy_resolve_aneg_pause()
348 phydev->lp_advertising); in phy_resolve_aneg_pause()
361 void phy_resolve_aneg_linkmode(struct phy_device *phydev) in phy_resolve_aneg_linkmode() argument
366 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_aneg_linkmode()
370 phydev->speed = settings[i].speed; in phy_resolve_aneg_linkmode()
371 phydev->duplex = settings[i].duplex; in phy_resolve_aneg_linkmode()
375 phy_resolve_aneg_pause(phydev); in phy_resolve_aneg_linkmode()
388 void phy_check_downshift(struct phy_device *phydev) in phy_check_downshift() argument
393 phydev->downshifted_rate = 0; in phy_check_downshift()
395 if (phydev->autoneg == AUTONEG_DISABLE || in phy_check_downshift()
396 phydev->speed == SPEED_UNKNOWN) in phy_check_downshift()
399 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_check_downshift()
407 if (speed == SPEED_UNKNOWN || phydev->speed >= speed) in phy_check_downshift()
410 …phydev_warn(phydev, "Downshift occurred from negotiated speed %s to actual speed %s, check cabling… in phy_check_downshift()
411 phy_speed_to_str(speed), phy_speed_to_str(phydev->speed)); in phy_check_downshift()
413 phydev->downshifted_rate = 1; in phy_check_downshift()
417 static int phy_resolve_min_speed(struct phy_device *phydev, bool fdx_only) in phy_resolve_min_speed() argument
422 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_min_speed()
435 int phy_speed_down_core(struct phy_device *phydev) in phy_speed_down_core() argument
437 int min_common_speed = phy_resolve_min_speed(phydev, true); in phy_speed_down_core()
442 return __set_linkmode_max_speed(min_common_speed, phydev->advertising); in phy_speed_down_core()
468 int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in __phy_read_mmd() argument
475 if (phydev->drv && phydev->drv->read_mmd) { in __phy_read_mmd()
476 val = phydev->drv->read_mmd(phydev, devad, regnum); in __phy_read_mmd()
477 } else if (phydev->is_c45) { in __phy_read_mmd()
478 val = __mdiobus_c45_read(phydev->mdio.bus, phydev->mdio.addr, in __phy_read_mmd()
481 struct mii_bus *bus = phydev->mdio.bus; in __phy_read_mmd()
482 int phy_addr = phydev->mdio.addr; in __phy_read_mmd()
502 int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) in phy_read_mmd() argument
506 phy_lock_mdio_bus(phydev); in phy_read_mmd()
507 ret = __phy_read_mmd(phydev, devad, regnum); in phy_read_mmd()
508 phy_unlock_mdio_bus(phydev); in phy_read_mmd()
524 int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in __phy_write_mmd() argument
531 if (phydev->drv && phydev->drv->write_mmd) { in __phy_write_mmd()
532 ret = phydev->drv->write_mmd(phydev, devad, regnum, val); in __phy_write_mmd()
533 } else if (phydev->is_c45) { in __phy_write_mmd()
534 ret = __mdiobus_c45_write(phydev->mdio.bus, phydev->mdio.addr, in __phy_write_mmd()
537 struct mii_bus *bus = phydev->mdio.bus; in __phy_write_mmd()
538 int phy_addr = phydev->mdio.addr; in __phy_write_mmd()
561 int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) in phy_write_mmd() argument
565 phy_lock_mdio_bus(phydev); in phy_write_mmd()
566 ret = __phy_write_mmd(phydev, devad, regnum, val); in phy_write_mmd()
567 phy_unlock_mdio_bus(phydev); in phy_write_mmd()
586 int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify_changed() argument
590 phy_lock_mdio_bus(phydev); in phy_modify_changed()
591 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_changed()
592 phy_unlock_mdio_bus(phydev); in phy_modify_changed()
609 int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in __phy_modify() argument
613 ret = __phy_modify_changed(phydev, regnum, mask, set); in __phy_modify()
630 int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) in phy_modify() argument
634 phy_lock_mdio_bus(phydev); in phy_modify()
635 ret = __phy_modify(phydev, regnum, mask, set); in phy_modify()
636 phy_unlock_mdio_bus(phydev); in phy_modify()
655 int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd_changed() argument
660 ret = __phy_read_mmd(phydev, devad, regnum); in __phy_modify_mmd_changed()
668 ret = __phy_write_mmd(phydev, devad, regnum, new); in __phy_modify_mmd_changed()
688 int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd_changed() argument
693 phy_lock_mdio_bus(phydev); in phy_modify_mmd_changed()
694 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in phy_modify_mmd_changed()
695 phy_unlock_mdio_bus(phydev); in phy_modify_mmd_changed()
713 int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in __phy_modify_mmd() argument
718 ret = __phy_modify_mmd_changed(phydev, devad, regnum, mask, set); in __phy_modify_mmd()
736 int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, in phy_modify_mmd() argument
741 phy_lock_mdio_bus(phydev); in phy_modify_mmd()
742 ret = __phy_modify_mmd(phydev, devad, regnum, mask, set); in phy_modify_mmd()
743 phy_unlock_mdio_bus(phydev); in phy_modify_mmd()
749 static int __phy_read_page(struct phy_device *phydev) in __phy_read_page() argument
751 …if (WARN_ONCE(!phydev->drv->read_page, "read_page callback not available, PHY driver not loaded?\n… in __phy_read_page()
754 return phydev->drv->read_page(phydev); in __phy_read_page()
757 static int __phy_write_page(struct phy_device *phydev, int page) in __phy_write_page() argument
759 …if (WARN_ONCE(!phydev->drv->write_page, "write_page callback not available, PHY driver not loaded?… in __phy_write_page()
762 return phydev->drv->write_page(phydev, page); in __phy_write_page()
773 int phy_save_page(struct phy_device *phydev) in phy_save_page() argument
775 phy_lock_mdio_bus(phydev); in phy_save_page()
776 return __phy_read_page(phydev); in phy_save_page()
791 int phy_select_page(struct phy_device *phydev, int page) in phy_select_page() argument
795 oldpage = ret = phy_save_page(phydev); in phy_select_page()
800 ret = __phy_write_page(phydev, page); in phy_select_page()
825 int phy_restore_page(struct phy_device *phydev, int oldpage, int ret) in phy_restore_page() argument
830 r = __phy_write_page(phydev, oldpage); in phy_restore_page()
842 phy_unlock_mdio_bus(phydev); in phy_restore_page()
856 int phy_read_paged(struct phy_device *phydev, int page, u32 regnum) in phy_read_paged() argument
860 oldpage = phy_select_page(phydev, page); in phy_read_paged()
862 ret = __phy_read(phydev, regnum); in phy_read_paged()
864 return phy_restore_page(phydev, oldpage, ret); in phy_read_paged()
877 int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val) in phy_write_paged() argument
881 oldpage = phy_select_page(phydev, page); in phy_write_paged()
883 ret = __phy_write(phydev, regnum, val); in phy_write_paged()
885 return phy_restore_page(phydev, oldpage, ret); in phy_write_paged()
899 int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged_changed() argument
904 oldpage = phy_select_page(phydev, page); in phy_modify_paged_changed()
906 ret = __phy_modify_changed(phydev, regnum, mask, set); in phy_modify_paged_changed()
908 return phy_restore_page(phydev, oldpage, ret); in phy_modify_paged_changed()
922 int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum, in phy_modify_paged() argument
925 int ret = phy_modify_paged_changed(phydev, page, regnum, mask, set); in phy_modify_paged()