Lines Matching full:phydev

160 static int aqr107_get_sset_count(struct phy_device *phydev)  in aqr107_get_sset_count()  argument
165 static void aqr107_get_strings(struct phy_device *phydev, u8 *data) in aqr107_get_strings() argument
174 static u64 aqr107_get_stat(struct phy_device *phydev, int index) in aqr107_get_stat() argument
182 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg); in aqr107_get_stat()
188 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg + 1); in aqr107_get_stat()
198 static void aqr107_get_stats(struct phy_device *phydev, in aqr107_get_stats() argument
201 struct aqr107_priv *priv = phydev->priv; in aqr107_get_stats()
206 val = aqr107_get_stat(phydev, i); in aqr107_get_stats()
208 phydev_err(phydev, "Reading HW Statistics failed for %s\n", in aqr107_get_stats()
217 static int aqr_config_aneg(struct phy_device *phydev) in aqr_config_aneg() argument
223 if (phydev->autoneg == AUTONEG_DISABLE) in aqr_config_aneg()
224 return genphy_c45_pma_setup_forced(phydev); in aqr_config_aneg()
226 ret = genphy_c45_an_config_aneg(phydev); in aqr_config_aneg()
237 phydev->advertising)) in aqr_config_aneg()
241 phydev->advertising)) in aqr_config_aneg()
246 phydev->advertising)) in aqr_config_aneg()
250 phydev->advertising)) in aqr_config_aneg()
253 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr_config_aneg()
263 return genphy_c45_check_and_restart_aneg(phydev, changed); in aqr_config_aneg()
266 static int aqr_config_intr(struct phy_device *phydev) in aqr_config_intr() argument
268 bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED; in aqr_config_intr()
271 err = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_MASK2, in aqr_config_intr()
276 err = phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_STD_MASK, in aqr_config_intr()
281 return phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_VEND_MASK, in aqr_config_intr()
286 static int aqr_ack_interrupt(struct phy_device *phydev) in aqr_ack_interrupt() argument
290 reg = phy_read_mmd(phydev, MDIO_MMD_AN, in aqr_ack_interrupt()
295 static int aqr_read_status(struct phy_device *phydev) in aqr_read_status() argument
299 if (phydev->autoneg == AUTONEG_ENABLE) { in aqr_read_status()
300 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr_read_status()
305 phydev->lp_advertising, in aqr_read_status()
308 phydev->lp_advertising, in aqr_read_status()
312 return genphy_c45_read_status(phydev); in aqr_read_status()
315 static int aqr107_read_rate(struct phy_device *phydev) in aqr107_read_rate() argument
319 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_STATUS1); in aqr107_read_rate()
325 phydev->speed = SPEED_10; in aqr107_read_rate()
328 phydev->speed = SPEED_100; in aqr107_read_rate()
331 phydev->speed = SPEED_1000; in aqr107_read_rate()
334 phydev->speed = SPEED_2500; in aqr107_read_rate()
337 phydev->speed = SPEED_5000; in aqr107_read_rate()
340 phydev->speed = SPEED_10000; in aqr107_read_rate()
343 phydev->speed = SPEED_UNKNOWN; in aqr107_read_rate()
348 phydev->duplex = DUPLEX_FULL; in aqr107_read_rate()
350 phydev->duplex = DUPLEX_HALF; in aqr107_read_rate()
355 static int aqr107_read_status(struct phy_device *phydev) in aqr107_read_status() argument
359 ret = aqr_read_status(phydev); in aqr107_read_status()
363 if (!phydev->link || phydev->autoneg == AUTONEG_DISABLE) in aqr107_read_status()
366 val = phy_read_mmd(phydev, MDIO_MMD_PHYXS, MDIO_PHYXS_VEND_IF_STATUS); in aqr107_read_status()
372 phydev->interface = PHY_INTERFACE_MODE_10GKR; in aqr107_read_status()
375 phydev->interface = PHY_INTERFACE_MODE_10GBASER; in aqr107_read_status()
378 phydev->interface = PHY_INTERFACE_MODE_USXGMII; in aqr107_read_status()
381 phydev->interface = PHY_INTERFACE_MODE_SGMII; in aqr107_read_status()
384 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in aqr107_read_status()
387 phydev->interface = PHY_INTERFACE_MODE_NA; in aqr107_read_status()
392 return aqr107_read_rate(phydev); in aqr107_read_status()
395 static int aqr107_get_downshift(struct phy_device *phydev, u8 *data) in aqr107_get_downshift() argument
399 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV); in aqr107_get_downshift()
411 static int aqr107_set_downshift(struct phy_device *phydev, u8 cnt) in aqr107_set_downshift() argument
423 return phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr107_set_downshift()
428 static int aqr107_get_tunable(struct phy_device *phydev, in aqr107_get_tunable() argument
433 return aqr107_get_downshift(phydev, data); in aqr107_get_tunable()
439 static int aqr107_set_tunable(struct phy_device *phydev, in aqr107_set_tunable() argument
444 return aqr107_set_downshift(phydev, *(const u8 *)data); in aqr107_set_tunable()
457 static int aqr107_wait_reset_complete(struct phy_device *phydev) in aqr107_wait_reset_complete() argument
461 return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, in aqr107_wait_reset_complete()
466 static void aqr107_chip_info(struct phy_device *phydev) in aqr107_chip_info() argument
471 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); in aqr107_chip_info()
478 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT1); in aqr107_chip_info()
485 phydev_dbg(phydev, "FW %u.%u, Build %u, Provisioning %u\n", in aqr107_chip_info()
489 static int aqr107_config_init(struct phy_device *phydev) in aqr107_config_init() argument
494 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqr107_config_init()
495 phydev->interface != PHY_INTERFACE_MODE_2500BASEX && in aqr107_config_init()
496 phydev->interface != PHY_INTERFACE_MODE_XGMII && in aqr107_config_init()
497 phydev->interface != PHY_INTERFACE_MODE_USXGMII && in aqr107_config_init()
498 phydev->interface != PHY_INTERFACE_MODE_10GKR && in aqr107_config_init()
499 phydev->interface != PHY_INTERFACE_MODE_10GBASER) in aqr107_config_init()
502 WARN(phydev->interface == PHY_INTERFACE_MODE_XGMII, in aqr107_config_init()
505 ret = aqr107_wait_reset_complete(phydev); in aqr107_config_init()
507 aqr107_chip_info(phydev); in aqr107_config_init()
509 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqr107_config_init()
512 static int aqcs109_config_init(struct phy_device *phydev) in aqcs109_config_init() argument
517 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqcs109_config_init()
518 phydev->interface != PHY_INTERFACE_MODE_2500BASEX) in aqcs109_config_init()
521 ret = aqr107_wait_reset_complete(phydev); in aqcs109_config_init()
523 aqr107_chip_info(phydev); in aqcs109_config_init()
529 ret = phy_set_max_speed(phydev, SPEED_2500); in aqcs109_config_init()
533 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqcs109_config_init()
536 static void aqr107_link_change_notify(struct phy_device *phydev) in aqr107_link_change_notify() argument
542 if (phydev->state != PHY_RUNNING || phydev->autoneg == AUTONEG_DISABLE) in aqr107_link_change_notify()
545 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr107_link_change_notify()
553 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT4); in aqr107_link_change_notify()
560 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_VEND_STAT3); in aqr107_link_change_notify()
566 phydev_dbg(phydev, "Link partner is Aquantia PHY, FW %u.%u%s%s%s\n", in aqr107_link_change_notify()
572 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT9); in aqr107_link_change_notify()
578 phydev_info(phydev, "Aquantia 1000Base-T2 mode active\n"); in aqr107_link_change_notify()
581 static int aqr107_wait_processor_intensive_op(struct phy_device *phydev) in aqr107_wait_processor_intensive_op() argument
592 err = phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, in aqr107_wait_processor_intensive_op()
598 phydev_err(phydev, "timeout: processor-intensive MDIO operation\n"); in aqr107_wait_processor_intensive_op()
605 static int aqr107_suspend(struct phy_device *phydev) in aqr107_suspend() argument
609 err = phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_suspend()
614 return aqr107_wait_processor_intensive_op(phydev); in aqr107_suspend()
617 static int aqr107_resume(struct phy_device *phydev) in aqr107_resume() argument
621 err = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_resume()
626 return aqr107_wait_processor_intensive_op(phydev); in aqr107_resume()
629 static int aqr107_probe(struct phy_device *phydev) in aqr107_probe() argument
631 phydev->priv = devm_kzalloc(&phydev->mdio.dev, in aqr107_probe()
633 if (!phydev->priv) in aqr107_probe()
636 return aqr_hwmon_probe(phydev); in aqr107_probe()