Lines Matching +full:10 +full:gbase +full:- +full:r

1 // SPDX-License-Identifier: GPL-2.0+
3 * Marvell 88x2222 dual-port multi-speed ethernet transceiver.
7 * 1000Base-X or 10GBase-R on the line side.
8 * SGMII over 1000Base-X.
39 /* 1000Base-X/SGMII Control Register */
42 /* 1000BASE-X/SGMII Status Register */
45 /* 1000Base-X Auto-Negotiation Advertisement Register */
48 /* 1000Base-X PHY Specific Status Register */
113 struct mv2222_data *priv = phydev->priv; in mv2222_set_sgmii_speed()
115 switch (phydev->speed) { in mv2222_set_sgmii_speed()
119 priv->supported) || in mv2222_set_sgmii_speed()
121 priv->supported))) in mv2222_set_sgmii_speed()
130 priv->supported) || in mv2222_set_sgmii_speed()
132 priv->supported))) in mv2222_set_sgmii_speed()
140 priv->supported) || in mv2222_set_sgmii_speed()
142 priv->supported))) in mv2222_set_sgmii_speed()
148 return -EINVAL; in mv2222_set_sgmii_speed()
154 struct mv2222_data *priv = phydev->priv; in mv2222_is_10g_capable()
157 priv->supported) || in mv2222_is_10g_capable()
159 priv->supported) || in mv2222_is_10g_capable()
161 priv->supported) || in mv2222_is_10g_capable()
163 priv->supported) || in mv2222_is_10g_capable()
165 priv->supported) || in mv2222_is_10g_capable()
167 priv->supported)); in mv2222_is_10g_capable()
172 struct mv2222_data *priv = phydev->priv; in mv2222_is_1gbx_capable()
175 priv->supported); in mv2222_is_1gbx_capable()
180 struct mv2222_data *priv = phydev->priv; in mv2222_is_sgmii_capable()
183 priv->supported) || in mv2222_is_sgmii_capable()
185 priv->supported) || in mv2222_is_sgmii_capable()
187 priv->supported) || in mv2222_is_sgmii_capable()
189 priv->supported) || in mv2222_is_sgmii_capable()
191 priv->supported) || in mv2222_is_sgmii_capable()
193 priv->supported)); in mv2222_is_sgmii_capable()
198 struct mv2222_data *priv = phydev->priv; in mv2222_config_line()
200 switch (priv->line_interface) { in mv2222_config_line()
211 return -EINVAL; in mv2222_config_line()
215 /* Switch between 1G (1000Base-X/SGMII) and 10G (10GBase-R) modes */
218 struct mv2222_data *priv = phydev->priv; in mv2222_swap_line_type()
222 switch (priv->line_interface) { in mv2222_swap_line_type()
225 priv->line_interface = PHY_INTERFACE_MODE_1000BASEX; in mv2222_swap_line_type()
230 priv->line_interface = PHY_INTERFACE_MODE_SGMII; in mv2222_swap_line_type()
238 priv->line_interface = PHY_INTERFACE_MODE_10GBASER; in mv2222_swap_line_type()
244 return -EINVAL; in mv2222_swap_line_type()
258 struct mv2222_data *priv = phydev->priv; in mv2222_setup_forced()
261 if (priv->line_interface == PHY_INTERFACE_MODE_10GBASER) { in mv2222_setup_forced()
262 if (phydev->speed < SPEED_10000 && in mv2222_setup_forced()
263 phydev->speed != SPEED_UNKNOWN) { in mv2222_setup_forced()
270 if (priv->line_interface == PHY_INTERFACE_MODE_SGMII) { in mv2222_setup_forced()
281 struct mv2222_data *priv = phydev->priv; in mv2222_config_aneg()
285 if (priv->line_interface == PHY_INTERFACE_MODE_NA) in mv2222_config_aneg()
288 if (phydev->autoneg == AUTONEG_DISABLE || in mv2222_config_aneg()
289 priv->line_interface == PHY_INTERFACE_MODE_10GBASER) in mv2222_config_aneg()
292 adv = linkmode_adv_to_mii_adv_x(priv->supported, in mv2222_config_aneg()
338 /* 10GBASE-R do not support auto-negotiation */ in mv2222_read_status_10g()
339 phydev->autoneg = AUTONEG_DISABLE; in mv2222_read_status_10g()
340 phydev->speed = SPEED_10000; in mv2222_read_status_10g()
341 phydev->duplex = DUPLEX_FULL; in mv2222_read_status_10g()
343 if (phydev->autoneg == AUTONEG_ENABLE) { in mv2222_read_status_10g()
371 if (phydev->autoneg == AUTONEG_ENABLE && in mv2222_read_status_1g()
399 phydev->duplex = DUPLEX_FULL; in mv2222_read_status_1g()
401 phydev->duplex = DUPLEX_HALF; in mv2222_read_status_1g()
404 phydev->speed = SPEED_1000; in mv2222_read_status_1g()
406 phydev->speed = SPEED_100; in mv2222_read_status_1g()
408 phydev->speed = SPEED_10; in mv2222_read_status_1g()
416 struct mv2222_data *priv = phydev->priv; in mv2222_link_is_operational()
423 if (phydev->sfp_bus && !priv->sfp_link) in mv2222_link_is_operational()
431 struct mv2222_data *priv = phydev->priv; in mv2222_read_status()
434 phydev->link = 0; in mv2222_read_status()
435 phydev->speed = SPEED_UNKNOWN; in mv2222_read_status()
436 phydev->duplex = DUPLEX_UNKNOWN; in mv2222_read_status()
441 if (priv->line_interface == PHY_INTERFACE_MODE_10GBASER) in mv2222_read_status()
449 phydev->link = link; in mv2222_read_status()
473 if (phydev->interface != PHY_INTERFACE_MODE_XAUI) in mv2222_config_init()
474 return -EINVAL; in mv2222_config_init()
489 priv = (struct mv2222_data *)phydev->priv; in mv2222_sfp_insert()
490 dev = &phydev->mdio.dev; in mv2222_sfp_insert()
492 sfp_parse_support(phydev->sfp_bus, id, sfp_supported); in mv2222_sfp_insert()
493 sfp_interface = sfp_select_interface(phydev->sfp_bus, sfp_supported); in mv2222_sfp_insert()
502 return -EINVAL; in mv2222_sfp_insert()
505 priv->line_interface = sfp_interface; in mv2222_sfp_insert()
506 linkmode_and(priv->supported, phydev->supported, sfp_supported); in mv2222_sfp_insert()
512 if (mutex_trylock(&phydev->lock)) { in mv2222_sfp_insert()
514 mutex_unlock(&phydev->lock); in mv2222_sfp_insert()
525 priv = (struct mv2222_data *)phydev->priv; in mv2222_sfp_remove()
527 priv->line_interface = PHY_INTERFACE_MODE_NA; in mv2222_sfp_remove()
528 linkmode_zero(priv->supported); in mv2222_sfp_remove()
536 priv = phydev->priv; in mv2222_sfp_link_up()
537 priv->sfp_link = true; in mv2222_sfp_link_up()
545 priv = phydev->priv; in mv2222_sfp_link_down()
546 priv->sfp_link = false; in mv2222_sfp_link_down()
560 struct device *dev = &phydev->mdio.dev; in mv2222_probe()
584 linkmode_copy(phydev->supported, supported); in mv2222_probe()
588 return -ENOMEM; in mv2222_probe()
590 priv->line_interface = PHY_INTERFACE_MODE_NA; in mv2222_probe()
591 phydev->priv = priv; in mv2222_probe()