Lines Matching defs:pl
96 #define phylink_printk(level, pl, fmt, ...) \
98 if ((pl)->config->type == PHYLINK_NETDEV) \
99 netdev_printk(level, (pl)->netdev, fmt, ##__VA_ARGS__); \
100 else if ((pl)->config->type == PHYLINK_DEV) \
101 dev_printk(level, (pl)->dev, fmt, ##__VA_ARGS__); \
104 #define phylink_err(pl, fmt, ...) \
105 phylink_printk(KERN_ERR, pl, fmt, ##__VA_ARGS__)
106 #define phylink_warn(pl, fmt, ...) \
107 phylink_printk(KERN_WARNING, pl, fmt, ##__VA_ARGS__)
108 #define phylink_info(pl, fmt, ...) \
109 phylink_printk(KERN_INFO, pl, fmt, ##__VA_ARGS__)
111 #define phylink_dbg(pl, fmt, ...) \
113 if ((pl)->config->type == PHYLINK_NETDEV) \
114 netdev_dbg((pl)->netdev, fmt, ##__VA_ARGS__); \
115 else if ((pl)->config->type == PHYLINK_DEV) \
116 dev_dbg((pl)->dev, fmt, ##__VA_ARGS__); \
119 #define phylink_dbg(pl, fmt, ...) \
120 phylink_printk(KERN_DEBUG, pl, fmt, ##__VA_ARGS__)
122 #define phylink_dbg(pl, fmt, ...) \
125 phylink_printk(KERN_DEBUG, pl, fmt, ##__VA_ARGS__); \
508 static int phylink_validate_mac_and_pcs(struct phylink *pl,
517 if (pl->mac_ops->mac_select_pcs) {
518 pcs = pl->mac_ops->mac_select_pcs(pl->config, state->interface);
529 phylink_err(pl, "interface %s: uninitialised PCS\n",
541 phylink_err(pl, "MAC returned PCS which does not support %s\n",
561 if (pl->mac_ops->mac_get_caps)
562 capabilities = pl->mac_ops->mac_get_caps(pl->config,
565 capabilities = pl->config->mac_capabilities;
572 static void phylink_validate_one(struct phylink *pl, struct phy_device *phy,
590 if (!phylink_validate_mac_and_pcs(pl, tmp_supported, &tmp_state)) {
591 phylink_dbg(pl, " interface %u (%s) rate match %s supports %*pbl\n",
602 static int phylink_validate_mask(struct phylink *pl, struct phy_device *phy,
612 phylink_validate_one(pl, phy, supported, state, interface,
621 static int phylink_validate(struct phylink *pl, unsigned long *supported,
624 const unsigned long *interfaces = pl->config->supported_interfaces;
627 return phylink_validate_mask(pl, NULL, supported, state,
633 return phylink_validate_mac_and_pcs(pl, supported, state);
649 static int phylink_parse_fixedlink(struct phylink *pl,
664 pl->link_config.speed = speed;
665 pl->link_config.duplex = DUPLEX_HALF;
668 pl->link_config.duplex = DUPLEX_FULL;
675 pl->link_config.lp_advertising);
678 pl->link_config.lp_advertising);
685 pl->link_gpio = desc;
699 phylink_err(pl, "broken fixed-link?\n");
706 pl->link_config.duplex = prop[1] ?
708 pl->link_config.speed = prop[2];
711 pl->link_config.lp_advertising);
714 pl->link_config.lp_advertising);
718 if (pl->link_config.speed > SPEED_1000 &&
719 pl->link_config.duplex != DUPLEX_FULL)
720 phylink_warn(pl, "fixed link specifies half duplex for %dMbps link?\n",
721 pl->link_config.speed);
723 linkmode_zero(pl->supported);
724 phylink_fill_fixedlink_supported(pl->supported);
726 linkmode_copy(pl->link_config.advertising, pl->supported);
727 phylink_validate(pl, pl->supported, &pl->link_config);
729 c = phy_caps_lookup(pl->link_config.speed, pl->link_config.duplex,
730 pl->supported, true);
732 linkmode_and(match, pl->supported, c->linkmodes);
737 linkmode_and(pl->supported, pl->supported, mask);
739 phylink_set(pl->supported, MII);
742 linkmode_or(pl->supported, pl->supported, match);
743 linkmode_or(pl->link_config.lp_advertising,
744 pl->link_config.lp_advertising, match);
746 phylink_warn(pl, "fixed link %s duplex %dMbps not recognised\n",
747 pl->link_config.duplex == DUPLEX_FULL ? "full" : "half",
748 pl->link_config.speed);
751 linkmode_and(pl->link_config.advertising, pl->link_config.advertising,
752 pl->supported);
754 pl->link_config.link = 1;
755 pl->link_config.an_complete = 1;
760 static int phylink_parse_mode(struct phylink *pl,
767 if (pl->config->default_an_inband)
768 pl->cfg_link_an_mode = MLO_AN_INBAND;
772 pl->cfg_link_an_mode = MLO_AN_FIXED;
777 if (pl->cfg_link_an_mode == MLO_AN_FIXED) {
778 phylink_err(pl,
783 pl->cfg_link_an_mode = MLO_AN_INBAND;
786 if (pl->cfg_link_an_mode == MLO_AN_INBAND) {
787 linkmode_zero(pl->supported);
788 phylink_set(pl->supported, MII);
789 phylink_set(pl->supported, Autoneg);
790 phylink_set(pl->supported, Asym_Pause);
791 phylink_set(pl->supported, Pause);
793 switch (pl->link_config.interface) {
816 caps = phylink_get_capabilities(pl->link_config.interface, caps,
818 phylink_caps_to_linkmodes(pl->supported, caps);
822 phylink_err(pl,
824 phy_modes(pl->link_config.interface));
828 linkmode_copy(pl->link_config.advertising, pl->supported);
830 if (phylink_validate(pl, pl->supported, &pl->link_config)) {
831 phylink_err(pl,
840 static void phylink_apply_manual_flow(struct phylink *pl,
849 if (!(pl->link_config.pause & MLO_PAUSE_AN))
850 state->pause = pl->link_config.pause;
945 static unsigned int phylink_inband_caps(struct phylink *pl,
950 if (!pl->mac_ops->mac_select_pcs)
953 pcs = pl->mac_ops->mac_select_pcs(pl->config, interface);
960 static void phylink_pcs_poll_stop(struct phylink *pl)
962 if (pl->cfg_link_an_mode == MLO_AN_INBAND)
963 timer_delete(&pl->link_poll);
966 static void phylink_pcs_poll_start(struct phylink *pl)
968 if (pl->pcs && pl->pcs->poll && pl->cfg_link_an_mode == MLO_AN_INBAND)
969 mod_timer(&pl->link_poll, jiffies + HZ);
972 int phylink_pcs_pre_init(struct phylink *pl, struct phylink_pcs *pcs)
977 if (pl->config->mac_requires_rxc)
987 static void phylink_mac_config(struct phylink *pl,
999 phylink_dbg(pl,
1001 __func__, phylink_an_mode_str(pl->act_link_an_mode),
1007 pl->mac_ops->mac_config(pl->config, pl->act_link_an_mode, &st);
1010 static void phylink_pcs_an_restart(struct phylink *pl)
1012 if (pl->pcs && linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
1013 pl->link_config.advertising) &&
1014 phy_interface_mode_is_8023z(pl->link_config.interface) &&
1015 phylink_autoneg_inband(pl->act_link_an_mode))
1016 pl->pcs->ops->pcs_an_restart(pl->pcs);
1021 * @pl: a pointer to a &struct phylink returned from phylink_create()
1039 static void phylink_pcs_neg_mode(struct phylink *pl, struct phylink_pcs *pcs,
1051 mode = pl->req_link_an_mode;
1053 pl->phy_ib_mode = 0;
1081 pl->pcs_neg_mode = PHYLINK_PCS_NEG_NONE;
1082 pl->act_link_an_mode = mode;
1089 if (pl->phydev)
1090 phy_ib_caps = phy_inband_caps(pl->phydev, interface);
1092 phylink_dbg(pl, "interface %s inband modes: pcs=%02x phy=%02x\n",
1114 pl->phy_ib_mode = LINK_INBAND_DISABLE;
1116 pl->phy_ib_mode = LINK_INBAND_BYPASS;
1126 phylink_warn(pl,
1134 } else if (type == INBAND_CISCO_SGMII || pl->phydev) {
1169 pl->phy_ib_mode = LINK_INBAND_ENABLE;
1171 pl->phy_ib_mode = LINK_INBAND_BYPASS;
1180 pl->phy_ib_mode = LINK_INBAND_DISABLE;
1182 pl->phy_ib_mode = LINK_INBAND_BYPASS;
1185 if (pl->phydev)
1189 phylink_warn(pl, "%s: incompatible in-band capabilities, trying in-band",
1212 pl->pcs_neg_mode = neg_mode;
1213 pl->act_link_an_mode = mode;
1216 static void phylink_major_config(struct phylink *pl, bool restart,
1224 phylink_dbg(pl, "major config, requested %s/%s\n",
1225 phylink_an_mode_str(pl->req_link_an_mode),
1228 pl->major_config_failed = false;
1230 if (pl->mac_ops->mac_select_pcs) {
1231 pcs = pl->mac_ops->mac_select_pcs(pl->config, state->interface);
1233 phylink_err(pl,
1237 pl->major_config_failed = true;
1241 pcs_changed = pl->pcs != pcs;
1244 phylink_pcs_neg_mode(pl, pcs, state->interface, state->advertising);
1246 phylink_dbg(pl, "major config, active %s/%s/%s\n",
1247 phylink_an_mode_str(pl->act_link_an_mode),
1248 phylink_pcs_mode_str(pl->pcs_neg_mode),
1251 phylink_pcs_poll_stop(pl);
1253 if (pl->mac_ops->mac_prepare) {
1254 err = pl->mac_ops->mac_prepare(pl->config, pl->act_link_an_mode,
1257 phylink_err(pl, "mac_prepare failed: %pe\n",
1259 pl->major_config_failed = true;
1268 phylink_pcs_disable(pl->pcs);
1270 if (pl->pcs)
1271 pl->pcs->phylink = NULL;
1273 pcs->phylink = pl;
1275 pl->pcs = pcs;
1278 if (pl->pcs)
1279 phylink_pcs_pre_config(pl->pcs, state->interface);
1281 phylink_mac_config(pl, state);
1283 if (pl->pcs) {
1284 err = phylink_pcs_post_config(pl->pcs, state->interface);
1286 phylink_err(pl, "pcs_post_config failed: %pe\n",
1289 pl->major_config_failed = true;
1293 if (pl->pcs_state == PCS_STATE_STARTING || pcs_changed)
1294 phylink_pcs_enable(pl->pcs);
1296 err = phylink_pcs_config(pl->pcs, pl->pcs_neg_mode, state,
1297 !!(pl->link_config.pause & MLO_PAUSE_AN));
1299 phylink_err(pl, "pcs_config failed: %pe\n", ERR_PTR(err));
1300 pl->major_config_failed = true;
1306 phylink_pcs_an_restart(pl);
1308 if (pl->mac_ops->mac_finish) {
1309 err = pl->mac_ops->mac_finish(pl->config, pl->act_link_an_mode,
1312 phylink_err(pl, "mac_finish failed: %pe\n",
1315 pl->major_config_failed = true;
1319 if (pl->phydev && pl->phy_ib_mode) {
1320 err = phy_config_inband(pl->phydev, pl->phy_ib_mode);
1322 phylink_err(pl, "phy_config_inband: %pe\n",
1325 pl->major_config_failed = true;
1329 if (pl->sfp_bus) {
1332 sfp_upstream_set_signal_rate(pl->sfp_bus, rate_kbd);
1335 phylink_pcs_poll_start(pl);
1344 static int phylink_change_inband_advert(struct phylink *pl)
1348 if (test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state))
1351 phylink_dbg(pl, "%s: mode=%s/%s adv=%*pb pause=%02x\n", __func__,
1352 phylink_an_mode_str(pl->req_link_an_mode),
1353 phy_modes(pl->link_config.interface),
1354 __ETHTOOL_LINK_MODE_MASK_NBITS, pl->link_config.advertising,
1355 pl->link_config.pause);
1358 phylink_pcs_neg_mode(pl, pl->pcs, pl->link_config.interface,
1359 pl->link_config.advertising);
1365 ret = phylink_pcs_config(pl->pcs, pl->pcs_neg_mode, &pl->link_config,
1366 !!(pl->link_config.pause & MLO_PAUSE_AN));
1371 phylink_pcs_an_restart(pl);
1376 static void phylink_mac_pcs_get_state(struct phylink *pl,
1382 linkmode_copy(state->advertising, pl->link_config.advertising);
1384 state->interface = pl->link_config.interface;
1385 state->rate_matching = pl->link_config.rate_matching;
1389 autoneg = pl->pcs_neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED;
1395 state->speed = pl->link_config.speed;
1396 state->duplex = pl->link_config.duplex;
1397 state->pause = pl->link_config.pause;
1400 pcs = pl->pcs;
1402 pcs->ops->pcs_get_state(pcs, pl->pcs_neg_mode, state);
1410 static void phylink_get_fixed_state(struct phylink *pl,
1413 *state = pl->link_config;
1414 if (pl->config->get_fixed_state)
1415 pl->config->get_fixed_state(pl->config, state);
1416 else if (pl->link_gpio)
1417 state->link = !!gpiod_get_value_cansleep(pl->link_gpio);
1423 static void phylink_mac_initial_config(struct phylink *pl, bool force_restart)
1427 switch (pl->req_link_an_mode) {
1429 link_state = pl->phy_state;
1433 phylink_get_fixed_state(pl, &link_state);
1437 link_state = pl->link_config;
1448 phylink_apply_manual_flow(pl, &link_state);
1449 phylink_major_config(pl, force_restart, &link_state);
1466 static void phylink_deactivate_lpi(struct phylink *pl)
1468 if (pl->mac_enable_tx_lpi) {
1469 pl->mac_enable_tx_lpi = false;
1471 phylink_dbg(pl, "disabling LPI\n");
1473 pl->mac_ops->mac_disable_tx_lpi(pl->config);
1475 phylink_pcs_disable_eee(pl->pcs);
1479 static void phylink_activate_lpi(struct phylink *pl)
1483 if (!test_bit(pl->cur_interface, pl->config->lpi_interfaces)) {
1484 phylink_dbg(pl, "MAC does not support LPI with %s\n",
1485 phy_modes(pl->cur_interface));
1489 phylink_dbg(pl, "LPI timer %uus, tx clock stop %u\n",
1490 pl->mac_tx_lpi_timer, pl->mac_tx_clk_stop);
1492 phylink_pcs_enable_eee(pl->pcs);
1494 err = pl->mac_ops->mac_enable_tx_lpi(pl->config, pl->mac_tx_lpi_timer,
1495 pl->mac_tx_clk_stop);
1497 phylink_pcs_disable_eee(pl->pcs);
1498 phylink_err(pl, "%ps() failed: %pe\n",
1499 pl->mac_ops->mac_enable_tx_lpi, ERR_PTR(err));
1503 pl->mac_enable_tx_lpi = true;
1506 static void phylink_link_up(struct phylink *pl,
1509 struct net_device *ndev = pl->netdev;
1538 pl->cur_interface = link_state.interface;
1540 phylink_pcs_link_up(pl->pcs, pl->pcs_neg_mode, pl->cur_interface, speed,
1543 pl->mac_ops->mac_link_up(pl->config, pl->phydev, pl->act_link_an_mode,
1544 pl->cur_interface, speed, duplex,
1547 if (pl->mac_supports_eee && pl->phy_enable_tx_lpi)
1548 phylink_activate_lpi(pl);
1553 phylink_info(pl,
1560 static void phylink_link_down(struct phylink *pl)
1562 struct net_device *ndev = pl->netdev;
1567 phylink_deactivate_lpi(pl);
1569 pl->mac_ops->mac_link_down(pl->config, pl->act_link_an_mode,
1570 pl->cur_interface);
1571 phylink_info(pl, "Link is Down\n");
1574 static bool phylink_link_is_up(struct phylink *pl)
1576 return pl->netdev ? netif_carrier_ok(pl->netdev) : pl->old_link_state;
1581 struct phylink *pl = container_of(w, struct phylink, resolve);
1587 mutex_lock(&pl->state_mutex);
1588 cur_link_state = phylink_link_is_up(pl);
1590 if (pl->phylink_disable_state) {
1591 pl->link_failed = false;
1593 } else if (pl->link_failed) {
1596 } else if (pl->act_link_an_mode == MLO_AN_FIXED) {
1597 phylink_get_fixed_state(pl, &link_state);
1599 } else if (pl->act_link_an_mode == MLO_AN_PHY) {
1600 link_state = pl->phy_state;
1603 phylink_mac_pcs_get_state(pl, &link_state);
1614 phylink_mac_pcs_get_state(pl, &link_state);
1620 if (pl->phydev)
1621 link_state.link &= pl->phy_state.link;
1624 if (pl->phydev && pl->phy_state.link) {
1628 if (link_state.interface != pl->phy_state.interface) {
1633 link_state.interface = pl->phy_state.interface;
1638 if (pl->phy_state.rate_matching) {
1640 pl->phy_state.rate_matching;
1641 link_state.speed = pl->phy_state.speed;
1642 link_state.duplex = pl->phy_state.duplex;
1648 link_state.pause = pl->phy_state.pause;
1653 if (pl->act_link_an_mode != MLO_AN_FIXED)
1654 phylink_apply_manual_flow(pl, &link_state);
1657 if (link_state.interface != pl->link_config.interface) {
1662 phylink_link_down(pl);
1665 phylink_major_config(pl, false, &link_state);
1666 pl->link_config.interface = link_state.interface;
1673 if (pl->major_config_failed)
1677 pl->old_link_state = link_state.link;
1679 phylink_link_down(pl);
1681 phylink_link_up(pl, link_state);
1684 pl->link_failed = false;
1685 queue_work(system_power_efficient_wq, &pl->resolve);
1687 mutex_unlock(&pl->state_mutex);
1690 static void phylink_run_resolve(struct phylink *pl)
1692 if (!pl->phylink_disable_state)
1693 queue_work(system_power_efficient_wq, &pl->resolve);
1696 static void phylink_run_resolve_and_disable(struct phylink *pl, int bit)
1698 unsigned long state = pl->phylink_disable_state;
1700 set_bit(bit, &pl->phylink_disable_state);
1702 queue_work(system_power_efficient_wq, &pl->resolve);
1703 flush_work(&pl->resolve);
1707 static void phylink_enable_and_run_resolve(struct phylink *pl, int bit)
1709 clear_bit(bit, &pl->phylink_disable_state);
1710 phylink_run_resolve(pl);
1715 struct phylink *pl = container_of(t, struct phylink, link_poll);
1719 phylink_run_resolve(pl);
1724 static int phylink_register_sfp(struct phylink *pl,
1735 phylink_err(pl, "unable to attach SFP bus: %pe\n", bus);
1739 pl->sfp_bus = bus;
1741 ret = sfp_bus_add_upstream(bus, pl, &sfp_phylink_ops);
1749 * @pl: a pointer to a &struct phylink returned from phylink_create()
1757 int phylink_set_fixed_link(struct phylink *pl,
1763 if (pl->cfg_link_an_mode != MLO_AN_PHY || !state ||
1764 !test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state))
1768 pl->supported, true);
1772 adv = pl->link_config.advertising;
1773 linkmode_and(adv, pl->supported, c->linkmodes);
1776 pl->link_config.speed = state->speed;
1777 pl->link_config.duplex = state->duplex;
1778 pl->link_config.link = 1;
1779 pl->link_config.an_complete = 1;
1781 pl->cfg_link_an_mode = MLO_AN_FIXED;
1782 pl->req_link_an_mode = pl->cfg_link_an_mode;
1809 struct phylink *pl;
1819 pl = kzalloc(sizeof(*pl), GFP_KERNEL);
1820 if (!pl)
1823 mutex_init(&pl->state_mutex);
1824 INIT_WORK(&pl->resolve, phylink_resolve);
1826 pl->config = config;
1828 pl->netdev = to_net_dev(config->dev);
1829 netif_carrier_off(pl->netdev);
1831 pl->dev = config->dev;
1833 kfree(pl);
1837 pl->mac_supports_eee_ops = phylink_mac_implements_lpi(mac_ops);
1838 pl->mac_supports_eee = pl->mac_supports_eee_ops &&
1839 pl->config->lpi_capabilities &&
1840 !phy_interface_empty(pl->config->lpi_interfaces);
1843 pl->eee_cfg.eee_enabled = pl->config->eee_enabled_default;
1844 pl->eee_cfg.tx_lpi_enabled = pl->eee_cfg.eee_enabled;
1845 pl->eee_cfg.tx_lpi_timer = pl->config->lpi_timer_default;
1847 pl->phy_state.interface = iface;
1848 pl->link_interface = iface;
1850 pl->link_port = PORT_BNC;
1852 pl->link_port = PORT_MII;
1853 pl->link_config.interface = iface;
1854 pl->link_config.pause = MLO_PAUSE_AN;
1855 pl->link_config.speed = SPEED_UNKNOWN;
1856 pl->link_config.duplex = DUPLEX_UNKNOWN;
1857 pl->pcs_state = PCS_STATE_DOWN;
1858 pl->mac_ops = mac_ops;
1859 __set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
1860 timer_setup(&pl->link_poll, phylink_fixed_poll, 0);
1862 linkmode_fill(pl->supported);
1863 linkmode_copy(pl->link_config.advertising, pl->supported);
1864 phylink_validate(pl, pl->supported, &pl->link_config);
1866 ret = phylink_parse_mode(pl, fwnode);
1868 kfree(pl);
1872 if (pl->cfg_link_an_mode == MLO_AN_FIXED) {
1873 ret = phylink_parse_fixedlink(pl, fwnode);
1875 kfree(pl);
1880 pl->req_link_an_mode = pl->cfg_link_an_mode;
1882 ret = phylink_register_sfp(pl, fwnode);
1884 kfree(pl);
1888 return pl;
1894 * @pl: a pointer to a &struct phylink returned from phylink_create()
1901 void phylink_destroy(struct phylink *pl)
1903 sfp_bus_del_upstream(pl->sfp_bus);
1904 if (pl->link_gpio)
1905 gpiod_put(pl->link_gpio);
1907 cancel_work_sync(&pl->resolve);
1908 kfree(pl);
1914 * @pl: a pointer to a &struct phylink returned from phylink_create()
1921 bool phylink_expects_phy(struct phylink *pl)
1923 if (pl->cfg_link_an_mode == MLO_AN_FIXED ||
1924 (pl->cfg_link_an_mode == MLO_AN_INBAND &&
1925 phy_interface_mode_is_8023z(pl->link_interface)))
1933 struct phylink *pl = phydev->phylink;
1938 mutex_lock(&pl->state_mutex);
1939 pl->phy_state.speed = phydev->speed;
1940 pl->phy_state.duplex = phydev->duplex;
1941 pl->phy_state.rate_matching = phydev->rate_matching;
1942 pl->phy_state.pause = MLO_PAUSE_NONE;
1944 pl->phy_state.pause |= MLO_PAUSE_TX;
1946 pl->phy_state.pause |= MLO_PAUSE_RX;
1947 pl->phy_state.interface = phydev->interface;
1948 pl->phy_state.link = up;
1950 pl->link_failed = true;
1953 pl->phy_enable_tx_lpi = phydev->enable_tx_lpi;
1954 pl->mac_tx_lpi_timer = phydev->eee_cfg.tx_lpi_timer;
1955 mutex_unlock(&pl->state_mutex);
1957 phylink_run_resolve(pl);
1959 phylink_dbg(pl, "phy link %s %s/%s/%s/%s/%s/%slpi\n",
1965 phylink_pause_to_str(pl->phy_state.pause),
1969 static int phylink_validate_phy(struct phylink *pl, struct phy_device *phy,
1984 pl->config->supported_interfaces);
1987 phylink_err(pl, "PHY has no common interfaces\n");
1999 phylink_err(pl, "SFP PHY's possible interfaces becomes empty\n");
2004 phylink_dbg(pl, "PHY %s uses interfaces %*pbl, validating %*pbl\n",
2010 return phylink_validate_mask(pl, phy, supported, state,
2014 phylink_dbg(pl, "PHY %s doesn't supply possible interfaces\n",
2039 return phylink_validate(pl, supported, state);
2042 static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy,
2064 ret = phylink_validate_phy(pl, phy, supported, &config);
2066 phylink_warn(pl, "validation of %s with support %*pb and advertisement %*pb failed: %pe\n",
2074 phy->phylink = pl;
2078 phylink_info(pl,
2084 mutex_lock(&pl->state_mutex);
2085 pl->phydev = phy;
2086 pl->phy_state.interface = interface;
2087 pl->phy_state.pause = MLO_PAUSE_NONE;
2088 pl->phy_state.speed = SPEED_UNKNOWN;
2089 pl->phy_state.duplex = DUPLEX_UNKNOWN;
2090 pl->phy_state.rate_matching = RATE_MATCH_NONE;
2091 linkmode_copy(pl->supported, supported);
2092 linkmode_copy(pl->link_config.advertising, config.advertising);
2100 if (pl->mac_supports_eee) {
2105 if (pl->eee_cfg.eee_enabled)
2108 phy->eee_cfg.tx_lpi_enabled = pl->eee_cfg.tx_lpi_enabled;
2109 phy->eee_cfg.tx_lpi_timer = pl->eee_cfg.tx_lpi_timer;
2112 linkmode_zero(pl->supported_lpi);
2113 phylink_caps_to_linkmodes(pl->supported_lpi,
2114 pl->config->lpi_capabilities);
2120 pl->supported_lpi);
2121 } else if (pl->mac_supports_eee_ops) {
2126 mutex_unlock(&pl->state_mutex);
2129 phylink_dbg(pl,
2132 __ETHTOOL_LINK_MODE_MASK_NBITS, pl->supported,
2138 if (pl->config->mac_managed_pm)
2142 pl->mac_tx_clk_stop = phy_eee_tx_clock_stop_capable(phy) > 0;
2144 if (pl->mac_supports_eee_ops) {
2149 pl->config->eee_rx_clk_stop_enable);
2157 static int phylink_attach_phy(struct phylink *pl, struct phy_device *phy,
2162 if (WARN_ON(pl->cfg_link_an_mode == MLO_AN_FIXED ||
2163 (pl->cfg_link_an_mode == MLO_AN_INBAND &&
2164 phy_interface_mode_is_8023z(interface) && !pl->sfp_bus)))
2167 if (pl->phydev)
2170 if (pl->config->mac_requires_rxc)
2173 return phy_attach_direct(pl->netdev, phy, flags, interface);
2178 * @pl: a pointer to a &struct phylink returned from phylink_create()
2181 * Connect @phy to the phylink instance specified by @pl by calling
2191 int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
2196 if (pl->link_interface == PHY_INTERFACE_MODE_NA) {
2197 pl->link_interface = phy->interface;
2198 pl->link_config.interface = pl->link_interface;
2201 ret = phylink_attach_phy(pl, phy, pl->link_interface);
2205 ret = phylink_bringup_phy(pl, phy, pl->link_config.interface);
2215 * @pl: a pointer to a &struct phylink returned from phylink_create()
2220 * specified by @pl. Actions specified in phylink_connect_phy() will be
2225 int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn,
2228 return phylink_fwnode_phy_connect(pl, of_fwnode_handle(dn), flags);
2234 * @pl: a pointer to a &struct phylink returned from phylink_create()
2239 * by @pl.
2243 int phylink_fwnode_phy_connect(struct phylink *pl,
2252 if (pl->cfg_link_an_mode == MLO_AN_FIXED ||
2253 (pl->cfg_link_an_mode == MLO_AN_INBAND &&
2254 phy_interface_mode_is_8023z(pl->link_interface)))
2259 if (pl->cfg_link_an_mode == MLO_AN_PHY)
2271 if (pl->link_interface == PHY_INTERFACE_MODE_NA) {
2272 pl->link_interface = phy_dev->interface;
2273 pl->link_config.interface = pl->link_interface;
2276 if (pl->config->mac_requires_rxc)
2279 ret = phy_attach_direct(pl->netdev, phy_dev, flags,
2280 pl->link_interface);
2285 ret = phylink_bringup_phy(pl, phy_dev, pl->link_config.interface);
2296 * @pl: a pointer to a &struct phylink returned from phylink_create()
2298 * Disconnect any current PHY from the phylink instance described by @pl.
2300 void phylink_disconnect_phy(struct phylink *pl)
2306 phy = pl->phydev;
2309 mutex_lock(&pl->state_mutex);
2310 pl->phydev = NULL;
2311 pl->phy_enable_tx_lpi = false;
2312 pl->mac_tx_clk_stop = false;
2313 mutex_unlock(&pl->state_mutex);
2315 flush_work(&pl->resolve);
2322 static void phylink_link_changed(struct phylink *pl, bool up, const char *what)
2325 pl->link_failed = true;
2326 phylink_run_resolve(pl);
2327 phylink_dbg(pl, "%s link %s\n", what, up ? "up" : "down");
2332 * @pl: a pointer to a &struct phylink returned from phylink_create()
2338 void phylink_mac_change(struct phylink *pl, bool up)
2340 phylink_link_changed(pl, up, "mac");
2357 struct phylink *pl = pcs->phylink;
2359 if (pl)
2360 phylink_link_changed(pl, up, "pcs");
2366 struct phylink *pl = data;
2368 phylink_run_resolve(pl);
2375 * @pl: a pointer to a &struct phylink returned from phylink_create()
2377 * Start the phylink instance specified by @pl, configuring the MAC for the
2381 void phylink_start(struct phylink *pl)
2387 phylink_info(pl, "configuring for %s/%s link mode\n",
2388 phylink_an_mode_str(pl->req_link_an_mode),
2389 phy_modes(pl->link_config.interface));
2392 if (pl->netdev)
2393 netif_carrier_off(pl->netdev);
2395 pl->pcs_state = PCS_STATE_STARTING;
2405 phylink_mac_initial_config(pl, true);
2407 pl->pcs_state = PCS_STATE_STARTED;
2409 phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_STOPPED);
2411 if (pl->cfg_link_an_mode == MLO_AN_FIXED && pl->link_gpio) {
2412 int irq = gpiod_to_irq(pl->link_gpio);
2418 "netdev link", pl))
2419 pl->link_irq = irq;
2427 if (pl->cfg_link_an_mode == MLO_AN_FIXED)
2428 poll |= pl->config->poll_fixed_state;
2431 mod_timer(&pl->link_poll, jiffies + HZ);
2432 if (pl->phydev)
2433 phy_start(pl->phydev);
2434 if (pl->sfp_bus)
2435 sfp_upstream_start(pl->sfp_bus);
2441 * @pl: a pointer to a &struct phylink returned from phylink_create()
2443 * Stop the phylink instance specified by @pl. This should be called from the
2451 void phylink_stop(struct phylink *pl)
2455 if (pl->sfp_bus)
2456 sfp_upstream_stop(pl->sfp_bus);
2457 if (pl->phydev)
2458 phy_stop(pl->phydev);
2459 timer_delete_sync(&pl->link_poll);
2460 if (pl->link_irq) {
2461 free_irq(pl->link_irq, pl);
2462 pl->link_irq = 0;
2465 phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_STOPPED);
2467 pl->pcs_state = PCS_STATE_DOWN;
2469 phylink_pcs_disable(pl->pcs);
2475 * @pl: a pointer to a &struct phylink returned from phylink_create()
2481 void phylink_rx_clk_stop_block(struct phylink *pl)
2485 if (pl->mac_rx_clk_stop_blocked == U8_MAX) {
2486 phylink_warn(pl, "%s called too many times - ignoring\n",
2495 if (pl->mac_rx_clk_stop_blocked++ == 0 &&
2496 pl->mac_supports_eee_ops && pl->phydev &&
2497 pl->config->eee_rx_clk_stop_enable)
2498 phy_eee_rx_clock_stop(pl->phydev, false);
2504 * @pl: a pointer to a &struct phylink returned from phylink_create()
2510 void phylink_rx_clk_stop_unblock(struct phylink *pl)
2514 if (pl->mac_rx_clk_stop_blocked == 0) {
2515 phylink_warn(pl, "%s called too many times - ignoring\n",
2524 if (--pl->mac_rx_clk_stop_blocked == 0 &&
2525 pl->mac_supports_eee_ops && pl->phydev &&
2526 pl->config->eee_rx_clk_stop_enable)
2527 phy_eee_rx_clock_stop(pl->phydev, true);
2533 * @pl: a pointer to a &struct phylink returned from phylink_create()
2545 void phylink_suspend(struct phylink *pl, bool mac_wol)
2549 if (mac_wol && (!pl->netdev || pl->netdev->ethtool->wol_enabled)) {
2551 mutex_lock(&pl->state_mutex);
2554 __set_bit(PHYLINK_DISABLE_MAC_WOL, &pl->phylink_disable_state);
2556 pl->suspend_link_up = phylink_link_is_up(pl);
2557 if (pl->suspend_link_up) {
2562 if (pl->netdev)
2563 netif_carrier_off(pl->netdev);
2564 pl->old_link_state = false;
2570 mutex_unlock(&pl->state_mutex);
2572 phylink_stop(pl);
2579 * @pl: a pointer to a &struct phylink returned from phylink_create()
2585 void phylink_prepare_resume(struct phylink *pl)
2587 struct phy_device *phydev = pl->phydev;
2597 if (pl->config->mac_requires_rxc && phydev && phydev->suspended)
2604 * @pl: a pointer to a &struct phylink returned from phylink_create()
2609 void phylink_resume(struct phylink *pl)
2613 if (test_bit(PHYLINK_DISABLE_MAC_WOL, &pl->phylink_disable_state)) {
2616 if (pl->suspend_link_up) {
2624 mutex_lock(&pl->state_mutex);
2625 phylink_link_down(pl);
2626 mutex_unlock(&pl->state_mutex);
2632 phylink_mac_initial_config(pl, true);
2635 phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_MAC_WOL);
2637 phylink_start(pl);
2644 * @pl: a pointer to a &struct phylink returned from phylink_create()
2648 * instance specified by @pl. If no PHY is currently attached, report no
2651 void phylink_ethtool_get_wol(struct phylink *pl, struct ethtool_wolinfo *wol)
2658 if (pl->phydev)
2659 phy_ethtool_get_wol(pl->phydev, wol);
2665 * @pl: a pointer to a &struct phylink returned from phylink_create()
2669 * instance specified by @pl. If no PHY is attached, returns %EOPNOTSUPP
2674 int phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol)
2680 if (pl->phydev)
2681 ret = phy_ethtool_set_wol(pl->phydev, wol);
2687 static phy_interface_t phylink_sfp_select_interface(struct phylink *pl,
2692 interface = sfp_select_interface(pl->sfp_bus, link_modes);
2694 phylink_err(pl,
2701 if (!test_bit(interface, pl->config->supported_interfaces)) {
2702 phylink_err(pl,
2706 pl->config->supported_interfaces);
2713 static phy_interface_t phylink_sfp_select_interface_speed(struct phylink *pl,
2723 if (!test_bit(interface, pl->sfp_interfaces))
2740 phylink_err(pl, "selection of interface failed, speed %u\n",
2773 * @pl: a pointer to a &struct phylink returned from phylink_create()
2776 * Read the current link settings for the phylink instance specified by @pl.
2780 int phylink_ethtool_ksettings_get(struct phylink *pl,
2787 if (pl->phydev)
2788 phy_ethtool_ksettings_get(pl->phydev, kset);
2790 kset->base.port = pl->link_port;
2792 linkmode_copy(kset->link_modes.supported, pl->supported);
2794 switch (pl->act_link_an_mode) {
2800 phylink_get_fixed_state(pl, &link_state);
2808 if (pl->phydev)
2811 phylink_mac_pcs_get_state(pl, &link_state);
2825 static bool phylink_validate_pcs_inband_autoneg(struct phylink *pl,
2829 unsigned int inband = phylink_inband_caps(pl, interface);
2847 * @pl: a pointer to a &struct phylink returned from phylink_create()
2850 int phylink_ethtool_ksettings_set(struct phylink *pl,
2859 if (pl->phydev) {
2864 pl->supported);
2867 * to update the pl->link_config settings:
2884 return phy_ethtool_ksettings_set(pl->phydev, &phy_kset);
2887 config = pl->link_config;
2890 pl->supported);
2899 pl->supported, false);
2906 if (pl->req_link_an_mode == MLO_AN_FIXED) {
2907 if (c->speed != pl->link_config.speed ||
2908 c->duplex != pl->link_config.duplex)
2922 if (pl->req_link_an_mode == MLO_AN_FIXED) {
2924 pl->link_config.advertising))
2947 if (pl->sfp_bus) {
2950 phylink_sfp_select_interface(pl,
2954 phylink_sfp_select_interface_speed(pl,
2960 linkmode_copy(support, pl->supported);
2961 if (phylink_validate(pl, support, &config)) {
2962 phylink_err(pl, "validation of %s/%s with support %*pb failed\n",
2963 phylink_an_mode_str(pl->req_link_an_mode),
2970 linkmode_copy(support, pl->supported);
2971 if (phylink_validate(pl, support, &config))
2984 if (!phylink_validate_pcs_inband_autoneg(pl, config.interface,
2988 mutex_lock(&pl->state_mutex);
2989 pl->link_config.speed = config.speed;
2990 pl->link_config.duplex = config.duplex;
2992 if (pl->link_config.interface != config.interface) {
2995 if (pl->old_link_state) {
2996 phylink_link_down(pl);
2997 pl->old_link_state = false;
3000 &pl->phylink_disable_state))
3001 phylink_major_config(pl, false, &config);
3002 pl->link_config.interface = config.interface;
3003 linkmode_copy(pl->link_config.advertising, config.advertising);
3004 } else if (!linkmode_equal(pl->link_config.advertising,
3006 linkmode_copy(pl->link_config.advertising, config.advertising);
3007 phylink_change_inband_advert(pl);
3009 mutex_unlock(&pl->state_mutex);
3017 * @pl: a pointer to a &struct phylink returned from phylink_create()
3019 * Restart negotiation for the phylink instance specified by @pl. This will
3026 int phylink_ethtool_nway_reset(struct phylink *pl)
3032 if (pl->phydev)
3033 ret = phy_restart_aneg(pl->phydev);
3034 phylink_pcs_an_restart(pl);
3042 * @pl: a pointer to a &struct phylink returned from phylink_create()
3045 void phylink_ethtool_get_pauseparam(struct phylink *pl,
3050 pause->autoneg = !!(pl->link_config.pause & MLO_PAUSE_AN);
3051 pause->rx_pause = !!(pl->link_config.pause & MLO_PAUSE_RX);
3052 pause->tx_pause = !!(pl->link_config.pause & MLO_PAUSE_TX);
3058 * @pl: a pointer to a &struct phylink returned from phylink_create()
3061 int phylink_ethtool_set_pauseparam(struct phylink *pl,
3064 struct phylink_link_state *config = &pl->link_config;
3070 if (pl->req_link_an_mode == MLO_AN_FIXED)
3073 if (!phylink_test(pl->supported, Pause) &&
3074 !phylink_test(pl->supported, Asym_Pause))
3077 if (!phylink_test(pl->supported, Asym_Pause) &&
3089 mutex_lock(&pl->state_mutex);
3115 if (!pl->phydev)
3116 phylink_change_inband_advert(pl);
3118 mutex_unlock(&pl->state_mutex);
3125 if (pl->phydev)
3126 phy_set_asym_pause(pl->phydev, pause->rx_pause,
3134 pl->link_failed = true;
3135 phylink_run_resolve(pl);
3145 * @pl: a pointer to a &struct phylink returned from phylink_create().
3148 * with the phylink instance specified by @pl.
3152 int phylink_get_eee_err(struct phylink *pl)
3158 if (pl->phydev)
3159 ret = phy_get_eee_err(pl->phydev);
3167 * @pl: a pointer to a &struct phylink returned from phylink_create()
3170 int phylink_ethtool_get_eee(struct phylink *pl, struct ethtool_keee *eee)
3176 if (pl->mac_supports_eee_ops && !pl->mac_supports_eee)
3179 if (pl->phydev) {
3180 ret = phy_ethtool_get_eee(pl->phydev, eee);
3182 if (ret == 0 && pl->mac_supports_eee_ops)
3184 pl->supported_lpi);
3193 * @pl: a pointer to a &struct phylink returned from phylink_create()
3196 int phylink_ethtool_set_eee(struct phylink *pl, struct ethtool_keee *eee)
3198 bool mac_eee = pl->mac_supports_eee;
3203 phylink_dbg(pl, "mac %s phylink EEE%s, adv %*pbl, LPI%s timer %uus\n",
3209 if (pl->mac_supports_eee_ops && !mac_eee)
3212 if (pl->phydev) {
3214 if (pl->mac_supports_eee_ops)
3216 pl->supported_lpi);
3217 ret = phy_ethtool_set_eee(pl->phydev, eee);
3219 eee_to_eeecfg(&pl->eee_cfg, eee);
3252 static int phylink_phy_read(struct phylink *pl, unsigned int phy_id,
3255 struct phy_device *phydev = pl->phydev;
3261 return mdiobus_c45_read(pl->phydev->mdio.bus, prtad, devad,
3287 return mdiobus_c45_read(pl->phydev->mdio.bus, prtad, devad,
3291 return mdiobus_read(pl->phydev->mdio.bus, phy_id, reg);
3294 static int phylink_phy_write(struct phylink *pl, unsigned int phy_id,
3297 struct phy_device *phydev = pl->phydev;
3303 return mdiobus_c45_write(pl->phydev->mdio.bus, prtad, devad,
3328 return mdiobus_c45_write(pl->phydev->mdio.bus, phy_id, devad,
3335 static int phylink_mii_read(struct phylink *pl, unsigned int phy_id,
3341 switch (pl->act_link_an_mode) {
3344 phylink_get_fixed_state(pl, &state);
3354 phylink_mac_pcs_get_state(pl, &state);
3363 static int phylink_mii_write(struct phylink *pl, unsigned int phy_id,
3366 switch (pl->act_link_an_mode) {
3382 * @pl: a pointer to a &struct phylink returned from phylink_create()
3387 * specified by @pl. If no PHY is attached, emulate the presence of the PHY.
3398 int phylink_mii_ioctl(struct phylink *pl, struct ifreq *ifr, int cmd)
3405 if (pl->phydev) {
3409 mii->phy_id = pl->phydev->mdio.addr;
3413 ret = phylink_phy_read(pl, mii->phy_id, mii->reg_num);
3421 ret = phylink_phy_write(pl, mii->phy_id, mii->reg_num,
3426 ret = phy_mii_ioctl(pl->phydev, ifr, cmd);
3436 ret = phylink_mii_read(pl, mii->phy_id, mii->reg_num);
3444 ret = phylink_mii_write(pl, mii->phy_id, mii->reg_num,
3461 * @pl: a pointer to a &struct phylink returned from phylink_create()
3470 int phylink_speed_down(struct phylink *pl, bool sync)
3476 if (!pl->sfp_bus && pl->phydev)
3477 ret = phy_speed_down(pl->phydev, sync);
3486 * @pl: a pointer to a &struct phylink returned from phylink_create()
3493 int phylink_speed_up(struct phylink *pl)
3499 if (!pl->sfp_bus && pl->phydev)
3500 ret = phy_speed_up(pl->phydev);
3508 struct phylink *pl = upstream;
3510 pl->netdev->sfp_bus = bus;
3515 struct phylink *pl = upstream;
3517 pl->netdev->sfp_bus = NULL;
3520 static phy_interface_t phylink_choose_sfp_interface(struct phylink *pl,
3536 static void phylink_sfp_set_config(struct phylink *pl, unsigned long *supported,
3542 phylink_dbg(pl, "requesting link mode %s/%s with support %*pb\n",
3546 if (!linkmode_equal(pl->supported, supported)) {
3547 linkmode_copy(pl->supported, supported);
3551 if (!linkmode_equal(pl->link_config.advertising, state->advertising)) {
3552 linkmode_copy(pl->link_config.advertising, state->advertising);
3556 if (pl->req_link_an_mode != mode ||
3557 pl->link_config.interface != state->interface) {
3558 pl->req_link_an_mode = mode;
3559 pl->link_config.interface = state->interface;
3563 phylink_info(pl, "switched to %s/%s link mode\n",
3569 &pl->phylink_disable_state))
3570 phylink_mac_initial_config(pl, false);
3573 static int phylink_sfp_config_phy(struct phylink *pl, struct phy_device *phy)
3579 /* We're not using pl->sfp_interfaces, so clear it. */
3580 phy_interface_zero(pl->sfp_interfaces);
3591 ret = phylink_validate(pl, support, &config);
3593 phylink_err(pl, "validation with support %*pb failed: %pe\n",
3599 config.interface = phylink_sfp_select_interface(pl, config.advertising);
3606 ret = phylink_attach_phy(pl, phy, config.interface);
3611 ret = phylink_bringup_phy(pl, phy, config.interface);
3617 pl->link_port = pl->sfp_port;
3619 phylink_sfp_set_config(pl, support, &config, true);
3624 static int phylink_sfp_config_optical(struct phylink *pl)
3631 phylink_dbg(pl, "optical SFP: interfaces=[mac=%*pbl, sfp=%*pbl]\n",
3633 pl->config->supported_interfaces,
3635 pl->sfp_interfaces);
3640 phy_interface_and(pl->sfp_interfaces, pl->config->supported_interfaces,
3641 pl->sfp_interfaces);
3642 if (phy_interface_empty(pl->sfp_interfaces)) {
3643 phylink_err(pl, "unsupported SFP module: no common interface modes\n");
3648 linkmode_copy(support, pl->sfp_support);
3649 linkmode_copy(config.advertising, pl->sfp_support);
3657 ret = phylink_validate_mask(pl, NULL, pl->sfp_support, &config,
3658 pl->sfp_interfaces);
3660 phylink_err(pl, "unsupported SFP module: validation with support %*pb failed\n",
3665 interface = phylink_choose_sfp_interface(pl, pl->sfp_interfaces);
3667 phylink_err(pl, "failed to select SFP interface\n");
3671 phylink_dbg(pl, "optical SFP: chosen %s interface\n",
3674 if (!phylink_validate_pcs_inband_autoneg(pl, interface,
3676 phylink_err(pl, "autoneg setting not compatible with PCS");
3683 ret = phylink_validate(pl, support, &config);
3685 phylink_err(pl, "validation with support %*pb failed: %pe\n",
3691 pl->link_port = pl->sfp_port;
3693 phylink_sfp_set_config(pl, pl->sfp_support, &config, false);
3701 struct phylink *pl = upstream;
3705 linkmode_zero(pl->sfp_support);
3706 phy_interface_zero(pl->sfp_interfaces);
3707 sfp_parse_support(pl->sfp_bus, id, pl->sfp_support, pl->sfp_interfaces);
3708 pl->sfp_port = sfp_parse_port(pl->sfp_bus, id, pl->sfp_support);
3711 pl->sfp_may_have_phy = sfp_may_have_phy(pl->sfp_bus, id);
3712 if (pl->sfp_may_have_phy)
3715 return phylink_sfp_config_optical(pl);
3720 struct phylink *pl = upstream;
3722 phy_interface_zero(pl->sfp_interfaces);
3727 struct phylink *pl = upstream;
3730 if (pl->phydev) {
3731 phy_start(pl->phydev);
3738 if (!pl->sfp_may_have_phy)
3741 return phylink_sfp_config_optical(pl);
3746 struct phylink *pl = upstream;
3749 if (pl->phydev)
3750 phy_stop(pl->phydev);
3755 struct phylink *pl = upstream;
3759 phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_LINK);
3764 struct phylink *pl = upstream;
3768 phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_LINK);
3773 struct phylink *pl = upstream;
3776 phylink_err(pl, "PHY %s (id 0x%.8lx) has no driver loaded\n",
3778 phylink_err(pl, "Drivers which handle known common cases: CONFIG_BCM84881_PHY, CONFIG_MARVELL_PHY\n");
3793 pl->config->supported_interfaces);
3796 return phylink_sfp_config_phy(pl, phy);