Lines Matching +full:common +full:- +full:rules
1 // SPDX-License-Identifier: GPL-2.0+
10 #include "phylib-internal.h"
11 #include "phy-caps.h"
14 * phy_speed_to_str - Return a string representing the PHY link speed
61 return "Unsupported (update phy-core.c)"; in phy_speed_to_str()
67 * phy_duplex_to_str - Return string describing the duplex
79 return "Unsupported (update phy-core.c)"; in phy_duplex_to_str()
84 * phy_rate_matching_to_str - Return a string describing the rate matching
98 return "open-loop"; in phy_rate_matching_to_str()
100 return "Unsupported (update phy-core.c)"; in phy_rate_matching_to_str()
105 * phy_interface_num_ports - Return the number of links that can be carried by
106 * a given MAC-PHY physical link. Returns 0 if this is
166 phy_caps_linkmode_max_speed(max_speed, phydev->supported); in __set_phy_supported()
170 * phy_set_max_speed - Set the maximum speed the PHY should support
189 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_supported()
198 if (!of_property_read_u32(node, "max-speed", &max_speed)) in of_set_phy_supported()
204 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_eee_broken()
205 unsigned long *modes = phydev->eee_disabled_modes; in of_set_phy_eee_broken()
212 if (of_property_read_bool(node, "eee-broken-100tx")) in of_set_phy_eee_broken()
214 if (of_property_read_bool(node, "eee-broken-1000t")) in of_set_phy_eee_broken()
216 if (of_property_read_bool(node, "eee-broken-10gt")) in of_set_phy_eee_broken()
218 if (of_property_read_bool(node, "eee-broken-1000kx")) in of_set_phy_eee_broken()
220 if (of_property_read_bool(node, "eee-broken-10gkx4")) in of_set_phy_eee_broken()
222 if (of_property_read_bool(node, "eee-broken-10gkr")) in of_set_phy_eee_broken()
227 * of_set_phy_timing_role - Set the master/slave mode of the PHY
235 struct device_node *node = phydev->mdio.dev.of_node; in of_set_phy_timing_role()
244 if (of_property_read_string(node, "timing-role", &master)) in of_set_phy_timing_role()
247 if (strcmp(master, "forced-master") == 0) in of_set_phy_timing_role()
248 phydev->master_slave_set = MASTER_SLAVE_CFG_MASTER_FORCE; in of_set_phy_timing_role()
249 else if (strcmp(master, "forced-slave") == 0) in of_set_phy_timing_role()
250 phydev->master_slave_set = MASTER_SLAVE_CFG_SLAVE_FORCE; in of_set_phy_timing_role()
251 else if (strcmp(master, "preferred-master") == 0) in of_set_phy_timing_role()
252 phydev->master_slave_set = MASTER_SLAVE_CFG_MASTER_PREFERRED; in of_set_phy_timing_role()
253 else if (strcmp(master, "preferred-slave") == 0) in of_set_phy_timing_role()
254 phydev->master_slave_set = MASTER_SLAVE_CFG_SLAVE_PREFERRED; in of_set_phy_timing_role()
256 phydev_warn(phydev, "Unknown master-slave mode %s\n", master); in of_set_phy_timing_role()
260 * phy_resolve_aneg_pause - Determine pause autoneg results
271 if (phydev->duplex == DUPLEX_FULL) { in phy_resolve_aneg_pause()
272 phydev->pause = linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, in phy_resolve_aneg_pause()
273 phydev->lp_advertising); in phy_resolve_aneg_pause()
274 phydev->asym_pause = linkmode_test_bit( in phy_resolve_aneg_pause()
276 phydev->lp_advertising); in phy_resolve_aneg_pause()
282 * phy_resolve_aneg_linkmode - resolve the advertisements into PHY settings
291 __ETHTOOL_DECLARE_LINK_MODE_MASK(common); in phy_resolve_aneg_linkmode()
294 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_aneg_linkmode()
296 c = phy_caps_lookup_by_linkmode(common); in phy_resolve_aneg_linkmode()
298 phydev->speed = c->speed; in phy_resolve_aneg_linkmode()
299 phydev->duplex = c->duplex; in phy_resolve_aneg_linkmode()
307 * phy_check_downshift - check whether downshift occurred
313 * read_status callback and sets phydev->speed to the actual link speed.
317 __ETHTOOL_DECLARE_LINK_MODE_MASK(common); in phy_check_downshift()
321 phydev->downshifted_rate = 0; in phy_check_downshift()
323 if (phydev->autoneg == AUTONEG_DISABLE || in phy_check_downshift()
324 phydev->speed == SPEED_UNKNOWN) in phy_check_downshift()
327 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_check_downshift()
329 c = phy_caps_lookup_by_linkmode(common); in phy_check_downshift()
331 speed = c->speed; in phy_check_downshift()
333 if (speed == SPEED_UNKNOWN || phydev->speed >= speed) in phy_check_downshift()
337 phy_speed_to_str(speed), phy_speed_to_str(phydev->speed)); in phy_check_downshift()
339 phydev->downshifted_rate = 1; in phy_check_downshift()
344 __ETHTOOL_DECLARE_LINK_MODE_MASK(common); in phy_resolve_min_speed()
347 linkmode_and(common, phydev->lp_advertising, phydev->advertising); in phy_resolve_min_speed()
349 c = phy_caps_lookup_by_linkmode_rev(common, fdx_only); in phy_resolve_min_speed()
351 return c->speed; in phy_resolve_min_speed()
361 return -EINVAL; in phy_speed_down_core()
363 phy_caps_linkmode_max_speed(min_common_speed, phydev->advertising); in phy_speed_down_core()
407 * __phy_read_mmd - Convenience function for reading a register
413 * Same rules as for __phy_read();
418 return -EINVAL; in __phy_read_mmd()
420 if (phydev->drv && phydev->drv->read_mmd) in __phy_read_mmd()
421 return phydev->drv->read_mmd(phydev, devad, regnum); in __phy_read_mmd()
423 return mmd_phy_read(phydev->mdio.bus, phydev->mdio.addr, in __phy_read_mmd()
424 phydev->is_c45, devad, regnum); in __phy_read_mmd()
429 * phy_read_mmd - Convenience function for reading a register
435 * Same rules as for phy_read();
450 * __phy_write_mmd - Convenience function for writing a register
457 * Same rules as for __phy_write();
462 return -EINVAL; in __phy_write_mmd()
464 if (phydev->drv && phydev->drv->write_mmd) in __phy_write_mmd()
465 return phydev->drv->write_mmd(phydev, devad, regnum, val); in __phy_write_mmd()
467 return mmd_phy_write(phydev->mdio.bus, phydev->mdio.addr, in __phy_write_mmd()
468 phydev->is_c45, devad, regnum, val); in __phy_write_mmd()
473 * phy_write_mmd - Convenience function for writing a register
480 * Same rules as for phy_write();
495 * phy_modify_changed - Function for modifying a PHY register
520 * __phy_modify - Convenience function for modifying a PHY register
541 * phy_modify - Convenience function for modifying a given PHY register
564 * __phy_modify_mmd_changed - Function for modifying a register on MMD
596 * phy_modify_mmd_changed - Function for modifying a register on MMD
623 * __phy_modify_mmd - Convenience function for modifying a register on MMD
646 * phy_modify_mmd - Convenience function for modifying a register on MMD
672 …if (WARN_ONCE(!phydev->drv->read_page, "read_page callback not available, PHY driver not loaded?\n… in __phy_read_page()
673 return -EOPNOTSUPP; in __phy_read_page()
675 return phydev->drv->read_page(phydev); in __phy_read_page()
680 …if (WARN_ONCE(!phydev->drv->write_page, "write_page callback not available, PHY driver not loaded?… in __phy_write_page()
681 return -EOPNOTSUPP; in __phy_write_page()
683 return phydev->drv->write_page(phydev, page); in __phy_write_page()
687 * phy_save_page() - take the bus lock and save the current page
702 * phy_select_page() - take the bus lock, save the current page, and set a page
731 * phy_restore_page() - restore the page register and release the bus lock
770 * phy_read_paged() - Convenience function for reading a paged register
775 * Same rules as for phy_read().
790 * phy_write_paged() - Convenience function for writing a paged register
796 * Same rules as for phy_write().
811 * phy_modify_paged_changed() - Function for modifying a paged register
834 * phy_modify_paged() - Convenience function for modifying a paged register
841 * Same rules as for phy_read() and phy_write().