Lines Matching full:phydev
13 * @phydev: target phy_device struct
15 int genphy_c45_pma_setup_forced(struct phy_device *phydev) in genphy_c45_pma_setup_forced() argument
20 if (phydev->duplex != DUPLEX_FULL) in genphy_c45_pma_setup_forced()
23 ctrl1 = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1); in genphy_c45_pma_setup_forced()
27 ctrl2 = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL2); in genphy_c45_pma_setup_forced()
38 switch (phydev->speed) { in genphy_c45_pma_setup_forced()
70 ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, ctrl1); in genphy_c45_pma_setup_forced()
74 ret = phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL2, ctrl2); in genphy_c45_pma_setup_forced()
78 return genphy_c45_an_disable_aneg(phydev); in genphy_c45_pma_setup_forced()
84 * @phydev: target phy_device struct
86 * Configure advertisement registers based on modes set in phydev->advertising
91 int genphy_c45_an_config_aneg(struct phy_device *phydev) in genphy_c45_an_config_aneg() argument
96 linkmode_and(phydev->advertising, phydev->advertising, in genphy_c45_an_config_aneg()
97 phydev->supported); in genphy_c45_an_config_aneg()
99 changed = genphy_config_eee_advert(phydev); in genphy_c45_an_config_aneg()
101 adv = linkmode_adv_to_mii_adv_t(phydev->advertising); in genphy_c45_an_config_aneg()
103 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE, in genphy_c45_an_config_aneg()
112 adv = linkmode_adv_to_mii_10gbt_adv_t(phydev->advertising); in genphy_c45_an_config_aneg()
114 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL, in genphy_c45_an_config_aneg()
129 * @phydev: target phy_device struct
136 int genphy_c45_an_disable_aneg(struct phy_device *phydev) in genphy_c45_an_disable_aneg() argument
139 return phy_clear_bits_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, in genphy_c45_an_disable_aneg()
146 * @phydev: target phy_device struct
152 int genphy_c45_restart_aneg(struct phy_device *phydev) in genphy_c45_restart_aneg() argument
154 return phy_set_bits_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, in genphy_c45_restart_aneg()
161 * @phydev: target phy_device struct
168 int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart) in genphy_c45_check_and_restart_aneg() argument
174 ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); in genphy_c45_check_and_restart_aneg()
183 return genphy_c45_restart_aneg(phydev); in genphy_c45_check_and_restart_aneg()
191 * @phydev: target phy_device struct
200 int genphy_c45_aneg_done(struct phy_device *phydev) in genphy_c45_aneg_done() argument
202 int val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1); in genphy_c45_aneg_done()
210 * @phydev: target phy_device struct
213 * that the link is up, set phydev->link to 1. If an error is encountered,
216 int genphy_c45_read_link(struct phy_device *phydev) in genphy_c45_read_link() argument
222 if (phydev->c45_ids.mmds_present & MDIO_DEVS_AN) { in genphy_c45_read_link()
223 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); in genphy_c45_read_link()
231 phydev->link = 0; in genphy_c45_read_link()
245 if (!phy_polling_mode(phydev) || !phydev->link) { in genphy_c45_read_link()
246 val = phy_read_mmd(phydev, devad, MDIO_STAT1); in genphy_c45_read_link()
253 val = phy_read_mmd(phydev, devad, MDIO_STAT1); in genphy_c45_read_link()
261 phydev->link = link; in genphy_c45_read_link()
269 * @phydev: target phy_device struct
273 * in @phydev. This assumes that the auto-negotiation MMD is present, and
277 int genphy_c45_read_lpa(struct phy_device *phydev) in genphy_c45_read_lpa() argument
281 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1); in genphy_c45_read_lpa()
287 phydev->lp_advertising); in genphy_c45_read_lpa()
288 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, 0); in genphy_c45_read_lpa()
289 mii_adv_mod_linkmode_adv_t(phydev->lp_advertising, 0); in genphy_c45_read_lpa()
290 phydev->pause = 0; in genphy_c45_read_lpa()
291 phydev->asym_pause = 0; in genphy_c45_read_lpa()
296 linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->lp_advertising, in genphy_c45_read_lpa()
300 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA); in genphy_c45_read_lpa()
304 mii_adv_mod_linkmode_adv_t(phydev->lp_advertising, val); in genphy_c45_read_lpa()
305 phydev->pause = val & LPA_PAUSE_CAP ? 1 : 0; in genphy_c45_read_lpa()
306 phydev->asym_pause = val & LPA_PAUSE_ASYM ? 1 : 0; in genphy_c45_read_lpa()
309 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_STAT); in genphy_c45_read_lpa()
313 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, val); in genphy_c45_read_lpa()
321 * @phydev: target phy_device struct
323 int genphy_c45_read_pma(struct phy_device *phydev) in genphy_c45_read_pma() argument
327 linkmode_zero(phydev->lp_advertising); in genphy_c45_read_pma()
329 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1); in genphy_c45_read_pma()
335 phydev->speed = SPEED_10; in genphy_c45_read_pma()
338 phydev->speed = SPEED_100; in genphy_c45_read_pma()
341 phydev->speed = SPEED_1000; in genphy_c45_read_pma()
344 phydev->speed = SPEED_2500; in genphy_c45_read_pma()
347 phydev->speed = SPEED_5000; in genphy_c45_read_pma()
350 phydev->speed = SPEED_10000; in genphy_c45_read_pma()
353 phydev->speed = SPEED_UNKNOWN; in genphy_c45_read_pma()
357 phydev->duplex = DUPLEX_FULL; in genphy_c45_read_pma()
365 * @phydev: target phy_device struct
367 int genphy_c45_read_mdix(struct phy_device *phydev) in genphy_c45_read_mdix() argument
371 if (phydev->speed == SPEED_10000) { in genphy_c45_read_mdix()
372 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, in genphy_c45_read_mdix()
379 phydev->mdix = ETH_TP_MDI; in genphy_c45_read_mdix()
383 phydev->mdix = ETH_TP_MDI_X; in genphy_c45_read_mdix()
387 phydev->mdix = ETH_TP_MDI_INVALID; in genphy_c45_read_mdix()
398 * @phydev: target phy_device struct
407 int genphy_c45_pma_read_abilities(struct phy_device *phydev) in genphy_c45_pma_read_abilities() argument
411 linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported); in genphy_c45_pma_read_abilities()
412 if (phydev->c45_ids.mmds_present & MDIO_DEVS_AN) { in genphy_c45_pma_read_abilities()
413 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1); in genphy_c45_pma_read_abilities()
419 phydev->supported); in genphy_c45_pma_read_abilities()
422 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_STAT2); in genphy_c45_pma_read_abilities()
427 phydev->supported, in genphy_c45_pma_read_abilities()
431 phydev->supported, in genphy_c45_pma_read_abilities()
435 phydev->supported, in genphy_c45_pma_read_abilities()
439 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_EXTABLE); in genphy_c45_pma_read_abilities()
444 phydev->supported, in genphy_c45_pma_read_abilities()
447 phydev->supported, in genphy_c45_pma_read_abilities()
450 phydev->supported, in genphy_c45_pma_read_abilities()
453 phydev->supported, in genphy_c45_pma_read_abilities()
456 phydev->supported, in genphy_c45_pma_read_abilities()
459 phydev->supported, in genphy_c45_pma_read_abilities()
463 phydev->supported, in genphy_c45_pma_read_abilities()
466 phydev->supported, in genphy_c45_pma_read_abilities()
470 phydev->supported, in genphy_c45_pma_read_abilities()
473 phydev->supported, in genphy_c45_pma_read_abilities()
477 val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, in genphy_c45_pma_read_abilities()
483 phydev->supported, in genphy_c45_pma_read_abilities()
487 phydev->supported, in genphy_c45_pma_read_abilities()
498 * @phydev: target phy_device struct
502 int genphy_c45_read_status(struct phy_device *phydev) in genphy_c45_read_status() argument
506 ret = genphy_c45_read_link(phydev); in genphy_c45_read_status()
510 phydev->speed = SPEED_UNKNOWN; in genphy_c45_read_status()
511 phydev->duplex = DUPLEX_UNKNOWN; in genphy_c45_read_status()
512 phydev->pause = 0; in genphy_c45_read_status()
513 phydev->asym_pause = 0; in genphy_c45_read_status()
515 if (phydev->autoneg == AUTONEG_ENABLE) { in genphy_c45_read_status()
516 ret = genphy_c45_read_lpa(phydev); in genphy_c45_read_status()
520 phy_resolve_aneg_linkmode(phydev); in genphy_c45_read_status()
522 ret = genphy_c45_read_pma(phydev); in genphy_c45_read_status()
531 * @phydev: target phy_device struct
537 int genphy_c45_config_aneg(struct phy_device *phydev) in genphy_c45_config_aneg() argument
542 if (phydev->autoneg == AUTONEG_DISABLE) in genphy_c45_config_aneg()
543 return genphy_c45_pma_setup_forced(phydev); in genphy_c45_config_aneg()
545 ret = genphy_c45_an_config_aneg(phydev); in genphy_c45_config_aneg()
551 return genphy_c45_check_and_restart_aneg(phydev, changed); in genphy_c45_config_aneg()
557 int gen10g_config_aneg(struct phy_device *phydev) in gen10g_config_aneg() argument