1 // SPDX-License-Identifier: GPL-2.0-only
3 * Clause 45 PHY support
5 #include <linux/ethtool.h>
6 #include <linux/export.h>
7 #include <linux/mdio.h>
12 * genphy_c45_baset1_able - checks if the PMA has BASE-T1 extended abilities
13 * @phydev: target phy_device struct
15 static bool genphy_c45_baset1_able(struct phy_device *phydev)
19 if (phydev->pma_extable == -ENODATA) {
20 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_EXTABLE);
24 phydev->pma_extable = val;
27 return !!(phydev->pma_extable & MDIO_PMA_EXTABLE_BT1);
31 * genphy_c45_pma_can_sleep - checks if the PMA have sleep support
32 * @phydev: target phy_device struct
34 static bool genphy_c45_pma_can_sleep(struct phy_device *phydev)
38 stat1 = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_STAT1);
42 return !!(stat1 & MDIO_STAT1_LPOWERABLE);
46 * genphy_c45_pma_resume - wakes up the PMA module
47 * @phydev: target phy_device struct
49 int genphy_c45_pma_resume(struct phy_device *phydev)
51 if (!genphy_c45_pma_can_sleep(phydev))
54 return phy_clear_bits_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1,
57 EXPORT_SYMBOL_GPL(genphy_c45_pma_resume);
60 * genphy_c45_pma_suspend - suspends the PMA module
61 * @phydev: target phy_device struct
63 int genphy_c45_pma_suspend(struct phy_device *phydev)
65 if (!genphy_c45_pma_can_sleep(phydev))
68 return phy_set_bits_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1,
71 EXPORT_SYMBOL_GPL(genphy_c45_pma_suspend);
74 * genphy_c45_pma_baset1_setup_master_slave - configures forced master/slave
75 * role of BaseT1 devices.
76 * @phydev: target phy_device struct
78 int genphy_c45_pma_baset1_setup_master_slave(struct phy_device *phydev)
82 switch (phydev->master_slave_set) {
83 case MASTER_SLAVE_CFG_MASTER_PREFERRED:
84 case MASTER_SLAVE_CFG_MASTER_FORCE:
85 ctl = MDIO_PMA_PMD_BT1_CTRL_CFG_MST;
87 case MASTER_SLAVE_CFG_SLAVE_FORCE:
88 case MASTER_SLAVE_CFG_SLAVE_PREFERRED:
90 case MASTER_SLAVE_CFG_UNKNOWN:
91 case MASTER_SLAVE_CFG_UNSUPPORTED:
94 phydev_warn(phydev, "Unsupported Master/Slave mode\n");
98 return phy_modify_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_PMD_BT1_CTRL,
99 MDIO_PMA_PMD_BT1_CTRL_CFG_MST, ctl);
101 EXPORT_SYMBOL_GPL(genphy_c45_pma_baset1_setup_master_slave);
104 * genphy_c45_pma_setup_forced - configures a forced speed
105 * @phydev: target phy_device struct
107 int genphy_c45_pma_setup_forced(struct phy_device *phydev)
109 int ctrl1, ctrl2, ret;
111 /* Half duplex is not supported */
112 if (phydev->duplex != DUPLEX_FULL)
115 ctrl1 = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1);
119 ctrl2 = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL2);
123 ctrl1 &= ~MDIO_CTRL1_SPEEDSEL;
125 * PMA/PMD type selection is 1.7.5:0 not 1.7.3:0. See 45.2.1.6.1
126 * in 802.3-2012 and 802.3-2015.
128 ctrl2 &= ~(MDIO_PMA_CTRL2_TYPE | 0x30);
130 switch (phydev->speed) {
132 if (genphy_c45_baset1_able(phydev))
133 ctrl2 |= MDIO_PMA_CTRL2_BASET1;
135 ctrl2 |= MDIO_PMA_CTRL2_10BT;
138 ctrl1 |= MDIO_PMA_CTRL1_SPEED100;
139 ctrl2 |= MDIO_PMA_CTRL2_100BTX;
142 ctrl1 |= MDIO_PMA_CTRL1_SPEED1000;
143 /* Assume 1000base-T */
144 ctrl2 |= MDIO_PMA_CTRL2_1000BT;
147 ctrl1 |= MDIO_CTRL1_SPEED2_5G;
148 /* Assume 2.5Gbase-T */
149 ctrl2 |= MDIO_PMA_CTRL2_2_5GBT;
152 ctrl1 |= MDIO_CTRL1_SPEED5G;
153 /* Assume 5Gbase-T */
154 ctrl2 |= MDIO_PMA_CTRL2_5GBT;
157 ctrl1 |= MDIO_CTRL1_SPEED10G;
158 /* Assume 10Gbase-T */
159 ctrl2 |= MDIO_PMA_CTRL2_10GBT;
165 ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, ctrl1);
169 ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL2, ctrl2);
173 if (genphy_c45_baset1_able(phydev)) {
174 ret = genphy_c45_pma_baset1_setup_master_slave(phydev);
179 return genphy_c45_an_disable_aneg(phydev);
181 EXPORT_SYMBOL_GPL(genphy_c45_pma_setup_forced);
183 /* Sets master/slave preference and supported technologies.
184 * The preference is set in the BIT(4) of BASE-T1 AN
185 * advertisement register 7.515 and whether the status
186 * is forced or not, it is set in the BIT(12) of BASE-T1
187 * AN advertisement register 7.514.
188 * Sets 10BASE-T1L Ability BIT(14) in BASE-T1 autonegotiation
189 * advertisement register [31:16] if supported.
191 static int genphy_c45_baset1_an_config_aneg(struct phy_device *phydev)
198 switch (phydev->master_slave_set) {
199 case MASTER_SLAVE_CFG_MASTER_FORCE:
200 case MASTER_SLAVE_CFG_SLAVE_FORCE:
201 adv_l |= MDIO_AN_T1_ADV_L_FORCE_MS;
203 case MASTER_SLAVE_CFG_MASTER_PREFERRED:
204 case MASTER_SLAVE_CFG_SLAVE_PREFERRED:
206 case MASTER_SLAVE_CFG_UNKNOWN:
207 case MASTER_SLAVE_CFG_UNSUPPORTED:
210 phydev_warn(phydev, "Unsupported Master/Slave mode\n");
214 switch (phydev->master_slave_set) {
215 case MASTER_SLAVE_CFG_MASTER_FORCE:
216 case MASTER_SLAVE_CFG_MASTER_PREFERRED:
217 adv_m |= MDIO_AN_T1_ADV_M_MST;
219 case MASTER_SLAVE_CFG_SLAVE_FORCE:
220 case MASTER_SLAVE_CFG_SLAVE_PREFERRED:
226 adv_l |= linkmode_adv_to_mii_t1_adv_l_t(phydev->advertising);
228 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_T1_ADV_L,
229 (MDIO_AN_T1_ADV_L_FORCE_MS | MDIO_AN_T1_ADV_L_PAUSE_CAP
230 | MDIO_AN_T1_ADV_L_PAUSE_ASYM), adv_l);
236 adv_m |= linkmode_adv_to_mii_t1_adv_m_t(phydev->advertising);
238 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_T1_ADV_M,
239 MDIO_AN_T1_ADV_M_MST | MDIO_AN_T1_ADV_M_B10L, adv_m);
249 * genphy_c45_an_config_aneg - configure advertisement registers
250 * @phydev: target phy_device struct
252 * Configure advertisement registers based on modes set in phydev->advertising
254 * Returns negative errno code on failure, 0 if advertisement didn't change,
255 * or 1 if advertised modes changed.
257 int genphy_c45_an_config_aneg(struct phy_device *phydev)
262 linkmode_and(phydev->advertising, phydev->advertising,
265 changed = genphy_config_eee_advert(phydev);
267 if (genphy_c45_baset1_able(phydev))
268 return genphy_c45_baset1_an_config_aneg(phydev);
270 adv = linkmode_adv_to_mii_adv_t(phydev->advertising);
272 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE,
273 ADVERTISE_ALL | ADVERTISE_100BASE4 |
274 ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
281 adv = linkmode_adv_to_mii_10gbt_adv_t(phydev->advertising);
283 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL,
284 MDIO_AN_10GBT_CTRL_ADV10G |
285 MDIO_AN_10GBT_CTRL_ADV5G |
286 MDIO_AN_10GBT_CTRL_ADV2_5G, adv);
294 EXPORT_SYMBOL_GPL(genphy_c45_an_config_aneg);
297 * genphy_c45_an_disable_aneg - disable auto-negotiation
298 * @phydev: target phy_device struct
300 * Disable auto-negotiation in the Clause 45 PHY. The link parameters
301 * are controlled through the PMA/PMD MMD registers.
303 * Returns zero on success, negative errno code on failure.
305 int genphy_c45_an_disable_aneg(struct phy_device *phydev)
307 u16 reg = MDIO_CTRL1;
309 if (genphy_c45_baset1_able(phydev))
310 reg = MDIO_AN_T1_CTRL;
312 return phy_clear_bits_mmd(phydev, MDIO_MMD_AN, reg,
313 MDIO_AN_CTRL1_ENABLE | MDIO_AN_CTRL1_RESTART);
315 EXPORT_SYMBOL_GPL(genphy_c45_an_disable_aneg);
318 * genphy_c45_restart_aneg - Enable and restart auto-negotiation
319 * @phydev: target phy_device struct
321 * This assumes that the auto-negotiation MMD is present.
323 * Enable and restart auto-negotiation.
325 int genphy_c45_restart_aneg(struct phy_device *phydev)
327 u16 reg = MDIO_CTRL1;
329 if (genphy_c45_baset1_able(phydev))
330 reg = MDIO_AN_T1_CTRL;
332 return phy_set_bits_mmd(phydev, MDIO_MMD_AN, reg,
333 MDIO_AN_CTRL1_ENABLE | MDIO_AN_CTRL1_RESTART);
335 EXPORT_SYMBOL_GPL(genphy_c45_restart_aneg);
338 * genphy_c45_check_and_restart_aneg - Enable and restart auto-negotiation
339 * @phydev: target phy_device struct
340 * @restart: whether aneg restart is requested
342 * This assumes that the auto-negotiation MMD is present.
344 * Check, and restart auto-negotiation if needed.
346 int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart)
348 u16 reg = MDIO_CTRL1;
351 if (genphy_c45_baset1_able(phydev))
352 reg = MDIO_AN_T1_CTRL;
355 /* Configure and restart aneg if it wasn't set before */
356 ret = phy_read_mmd(phydev, MDIO_MMD_AN, reg);
360 if (!(ret & MDIO_AN_CTRL1_ENABLE))
365 return genphy_c45_restart_aneg(phydev);
369 EXPORT_SYMBOL_GPL(genphy_c45_check_and_restart_aneg);
372 * genphy_c45_aneg_done - return auto-negotiation complete status
373 * @phydev: target phy_device struct
375 * This assumes that the auto-negotiation MMD is present.
377 * Reads the status register from the auto-negotiation MMD, returning:
378 * - positive if auto-negotiation is complete
379 * - negative errno code on error
382 int genphy_c45_aneg_done(struct phy_device *phydev)
384 int reg = MDIO_STAT1;
387 if (genphy_c45_baset1_able(phydev))
388 reg = MDIO_AN_T1_STAT;
390 val = phy_read_mmd(phydev, MDIO_MMD_AN, reg);
392 return val < 0 ? val : val & MDIO_AN_STAT1_COMPLETE ? 1 : 0;
394 EXPORT_SYMBOL_GPL(genphy_c45_aneg_done);
397 * genphy_c45_read_link - read the overall link status from the MMDs
398 * @phydev: target phy_device struct
400 * Read the link status from the specified MMDs, and if they all indicate
401 * that the link is up, set phydev->link to 1. If an error is encountered,
402 * a negative errno will be returned, otherwise zero.
404 int genphy_c45_read_link(struct phy_device *phydev)
406 u32 mmd_mask = MDIO_DEVS_PMAPMD;
410 if (phydev->c45_ids.mmds_present & MDIO_DEVS_AN) {
411 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1);
415 /* Autoneg is being started, therefore disregard current
416 * link status and report link as down.
418 if (val & MDIO_AN_CTRL1_RESTART) {
424 while (mmd_mask && link) {
425 devad = __ffs(mmd_mask);
426 mmd_mask &= ~BIT(devad);
428 /* The link state is latched low so that momentary link
429 * drops can be detected. Do not double-read the status
430 * in polling mode to detect such short link drops except
431 * the link was already down.
433 if (!phy_polling_mode(phydev) || !phydev->link) {
434 val = phy_read_mmd(phydev, devad, MDIO_STAT1);
437 else if (val & MDIO_STAT1_LSTATUS)
441 val = phy_read_mmd(phydev, devad, MDIO_STAT1);
445 if (!(val & MDIO_STAT1_LSTATUS))
453 EXPORT_SYMBOL_GPL(genphy_c45_read_link);
455 /* Read the Clause 45 defined BASE-T1 AN (7.513) status register to check
456 * if autoneg is complete. If so read the BASE-T1 Autonegotiation
457 * Advertisement registers filling in the link partner advertisement,
458 * pause and asym_pause members in phydev.
460 static int genphy_c45_baset1_read_lpa(struct phy_device *phydev)
464 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_STAT);
468 if (!(val & MDIO_AN_STAT1_COMPLETE)) {
469 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->lp_advertising);
470 mii_t1_adv_l_mod_linkmode_t(phydev->lp_advertising, 0);
471 mii_t1_adv_m_mod_linkmode_t(phydev->lp_advertising, 0);
474 phydev->asym_pause = 0;
479 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->lp_advertising, 1);
481 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_LP_L);
485 mii_t1_adv_l_mod_linkmode_t(phydev->lp_advertising, val);
486 phydev->pause = val & MDIO_AN_T1_ADV_L_PAUSE_CAP ? 1 : 0;
487 phydev->asym_pause = val & MDIO_AN_T1_ADV_L_PAUSE_ASYM ? 1 : 0;
489 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_LP_M);
493 mii_t1_adv_m_mod_linkmode_t(phydev->lp_advertising, val);
499 * genphy_c45_read_lpa - read the link partner advertisement and pause
500 * @phydev: target phy_device struct
502 * Read the Clause 45 defined base (7.19) and 10G (7.33) status registers,
503 * filling in the link partner advertisement, pause and asym_pause members
504 * in @phydev. This assumes that the auto-negotiation MMD is present, and
505 * the backplane bit (7.48.0) is clear. Clause 45 PHY drivers are expected
506 * to fill in the remainder of the link partner advert from vendor registers.
508 int genphy_c45_read_lpa(struct phy_device *phydev)
512 if (genphy_c45_baset1_able(phydev))
513 return genphy_c45_baset1_read_lpa(phydev);
515 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1);
519 if (!(val & MDIO_AN_STAT1_COMPLETE)) {
520 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
521 phydev->lp_advertising);
522 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, 0);
523 mii_adv_mod_linkmode_adv_t(phydev->lp_advertising, 0);
525 phydev->asym_pause = 0;
530 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->lp_advertising,
531 val & MDIO_AN_STAT1_LPABLE);
533 /* Read the link partner's base page advertisement */
534 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA);
538 mii_adv_mod_linkmode_adv_t(phydev->lp_advertising, val);
539 phydev->pause = val & LPA_PAUSE_CAP ? 1 : 0;
540 phydev->asym_pause = val & LPA_PAUSE_ASYM ? 1 : 0;
542 /* Read the link partner's 10G advertisement */
543 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_STAT);
547 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, val);
551 EXPORT_SYMBOL_GPL(genphy_c45_read_lpa);
554 * genphy_c45_pma_baset1_read_master_slave - read forced master/slave
556 * @phydev: target phy_device struct
558 int genphy_c45_pma_baset1_read_master_slave(struct phy_device *phydev)
562 phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN;
563 phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN;
565 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_PMD_BT1_CTRL);
569 if (val & MDIO_PMA_PMD_BT1_CTRL_CFG_MST) {
570 phydev->master_slave_get = MASTER_SLAVE_CFG_MASTER_FORCE;
571 phydev->master_slave_state = MASTER_SLAVE_STATE_MASTER;
573 phydev->master_slave_get = MASTER_SLAVE_CFG_SLAVE_FORCE;
574 phydev->master_slave_state = MASTER_SLAVE_STATE_SLAVE;
579 EXPORT_SYMBOL_GPL(genphy_c45_pma_baset1_read_master_slave);
582 * genphy_c45_read_pma - read link speed etc from PMA
583 * @phydev: target phy_device struct
585 int genphy_c45_read_pma(struct phy_device *phydev)
589 linkmode_zero(phydev->lp_advertising);
591 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1);
595 switch (val & MDIO_CTRL1_SPEEDSEL) {
597 phydev->speed = SPEED_10;
599 case MDIO_PMA_CTRL1_SPEED100:
600 phydev->speed = SPEED_100;
602 case MDIO_PMA_CTRL1_SPEED1000:
603 phydev->speed = SPEED_1000;
605 case MDIO_CTRL1_SPEED2_5G:
606 phydev->speed = SPEED_2500;
608 case MDIO_CTRL1_SPEED5G:
609 phydev->speed = SPEED_5000;
611 case MDIO_CTRL1_SPEED10G:
612 phydev->speed = SPEED_10000;
615 phydev->speed = SPEED_UNKNOWN;
619 phydev->duplex = DUPLEX_FULL;
621 if (genphy_c45_baset1_able(phydev)) {
622 val = genphy_c45_pma_baset1_read_master_slave(phydev);
629 EXPORT_SYMBOL_GPL(genphy_c45_read_pma);
632 * genphy_c45_read_mdix - read mdix status from PMA
633 * @phydev: target phy_device struct
635 int genphy_c45_read_mdix(struct phy_device *phydev)
639 if (phydev->speed == SPEED_10000) {
640 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
641 MDIO_PMA_10GBT_SWAPPOL);
646 case MDIO_PMA_10GBT_SWAPPOL_ABNX | MDIO_PMA_10GBT_SWAPPOL_CDNX:
647 phydev->mdix = ETH_TP_MDI;
651 phydev->mdix = ETH_TP_MDI_X;
655 phydev->mdix = ETH_TP_MDI_INVALID;
662 EXPORT_SYMBOL_GPL(genphy_c45_read_mdix);
665 * genphy_c45_pma_read_abilities - read supported link modes from PMA
666 * @phydev: target phy_device struct
668 * Read the supported link modes from the PMA Status 2 (1.8) register. If bit
669 * 1.8.9 is set, the list of supported modes is build using the values in the
670 * PMA Extended Abilities (1.11) register, indicating 1000BASET an 10G related
671 * modes. If bit 1.11.14 is set, then the list is also extended with the modes
672 * in the 2.5G/5G PMA Extended register (1.21), indicating if 2.5GBASET and
673 * 5GBASET are supported.
675 int genphy_c45_pma_read_abilities(struct phy_device *phydev)
679 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported);
680 if (phydev->c45_ids.mmds_present & MDIO_DEVS_AN) {
681 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1);
685 if (val & MDIO_AN_STAT1_ABLE)
686 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
690 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_STAT2);
694 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
696 val & MDIO_PMA_STAT2_10GBSR);
698 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
700 val & MDIO_PMA_STAT2_10GBLR);
702 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
704 val & MDIO_PMA_STAT2_10GBER);
706 if (val & MDIO_PMA_STAT2_EXTABLE) {
707 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_EXTABLE);
711 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT,
713 val & MDIO_PMA_EXTABLE_10GBLRM);
714 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
716 val & MDIO_PMA_EXTABLE_10GBT);
717 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
719 val & MDIO_PMA_EXTABLE_10GBKX4);
720 linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
722 val & MDIO_PMA_EXTABLE_10GBKR);
723 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
725 val & MDIO_PMA_EXTABLE_1000BT);
726 linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
728 val & MDIO_PMA_EXTABLE_1000BKX);
730 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
732 val & MDIO_PMA_EXTABLE_100BTX);
733 linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
735 val & MDIO_PMA_EXTABLE_100BTX);
737 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
739 val & MDIO_PMA_EXTABLE_10BT);
740 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
742 val & MDIO_PMA_EXTABLE_10BT);
744 if (val & MDIO_PMA_EXTABLE_NBT) {
745 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD,
746 MDIO_PMA_NG_EXTABLE);
750 linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
752 val & MDIO_PMA_NG_EXTABLE_2_5GBT);
754 linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
756 val & MDIO_PMA_NG_EXTABLE_5GBT);
759 if (val & MDIO_PMA_EXTABLE_BT1) {
760 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_PMD_BT1);
764 linkmode_mod_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
766 val & MDIO_PMA_PMD_BT1_B10L_ABLE);
768 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_STAT);
772 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
774 val & MDIO_AN_STAT1_ABLE);
780 EXPORT_SYMBOL_GPL(genphy_c45_pma_read_abilities);
782 /* Read master/slave preference from registers.
783 * The preference is read from the BIT(4) of BASE-T1 AN
784 * advertisement register 7.515 and whether the preference
785 * is forced or not, it is read from BASE-T1 AN advertisement
788 int genphy_c45_baset1_read_status(struct phy_device *phydev)
793 phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN;
794 phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN;
796 ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_ADV_L);
800 cfg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_T1_ADV_M);
804 if (ret & MDIO_AN_T1_ADV_L_FORCE_MS) {
805 if (cfg & MDIO_AN_T1_ADV_M_MST)
806 phydev->master_slave_get = MASTER_SLAVE_CFG_MASTER_FORCE;
808 phydev->master_slave_get = MASTER_SLAVE_CFG_SLAVE_FORCE;
810 if (cfg & MDIO_AN_T1_ADV_M_MST)
811 phydev->master_slave_get = MASTER_SLAVE_CFG_MASTER_PREFERRED;
813 phydev->master_slave_get = MASTER_SLAVE_CFG_SLAVE_PREFERRED;
818 EXPORT_SYMBOL_GPL(genphy_c45_baset1_read_status);
821 * genphy_c45_read_status - read PHY status
822 * @phydev: target phy_device struct
824 * Reads status from PHY and sets phy_device members accordingly.
826 int genphy_c45_read_status(struct phy_device *phydev)
830 ret = genphy_c45_read_link(phydev);
834 phydev->speed = SPEED_UNKNOWN;
835 phydev->duplex = DUPLEX_UNKNOWN;
837 phydev->asym_pause = 0;
839 if (phydev->autoneg == AUTONEG_ENABLE) {
840 ret = genphy_c45_read_lpa(phydev);
844 if (genphy_c45_baset1_able(phydev)) {
845 ret = genphy_c45_baset1_read_status(phydev);
850 phy_resolve_aneg_linkmode(phydev);
852 ret = genphy_c45_read_pma(phydev);
857 EXPORT_SYMBOL_GPL(genphy_c45_read_status);
860 * genphy_c45_config_aneg - restart auto-negotiation or forced setup
861 * @phydev: target phy_device struct
863 * Description: If auto-negotiation is enabled, we configure the
864 * advertising, and then restart auto-negotiation. If it is not
865 * enabled, then we force a configuration.
867 int genphy_c45_config_aneg(struct phy_device *phydev)
869 bool changed = false;
872 if (phydev->autoneg == AUTONEG_DISABLE)
873 return genphy_c45_pma_setup_forced(phydev);
875 ret = genphy_c45_an_config_aneg(phydev);
881 return genphy_c45_check_and_restart_aneg(phydev, changed);
883 EXPORT_SYMBOL_GPL(genphy_c45_config_aneg);
885 /* The gen10g_* functions are the old Clause 45 stub */
887 int gen10g_config_aneg(struct phy_device *phydev)
891 EXPORT_SYMBOL_GPL(gen10g_config_aneg);
893 int genphy_c45_loopback(struct phy_device *phydev, bool enable)
895 return phy_modify_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1,
896 MDIO_PCS_CTRL1_LOOPBACK,
897 enable ? MDIO_PCS_CTRL1_LOOPBACK : 0);
899 EXPORT_SYMBOL_GPL(genphy_c45_loopback);
902 * genphy_c45_fast_retrain - configure fast retrain registers
903 * @phydev: target phy_device struct
904 * @enable: enable fast retrain or not
906 * Description: If fast-retrain is enabled, we configure PHY as
907 * advertising fast retrain capable and THP Bypass Request, then
908 * enable fast retrain. If it is not enabled, we configure fast
911 int genphy_c45_fast_retrain(struct phy_device *phydev, bool enable)
916 return phy_clear_bits_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FSRT_CSR,
917 MDIO_PMA_10GBR_FSRT_ENABLE);
919 if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, phydev->supported)) {
920 ret = phy_set_bits_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL,
921 MDIO_AN_10GBT_CTRL_ADVFSRT2_5G);
925 ret = phy_set_bits_mmd(phydev, MDIO_MMD_AN, MDIO_AN_CTRL2,
926 MDIO_AN_THP_BP2_5GT);
931 return phy_set_bits_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FSRT_CSR,
932 MDIO_PMA_10GBR_FSRT_ENABLE);
934 EXPORT_SYMBOL_GPL(genphy_c45_fast_retrain);
936 struct phy_driver genphy_c45_driver = {
937 .phy_id = 0xffffffff,
938 .phy_id_mask = 0xffffffff,
939 .name = "Generic Clause 45 PHY",
940 .read_status = genphy_c45_read_status,