Lines Matching full:phydev

125 static int aqr107_get_sset_count(struct phy_device *phydev)  in aqr107_get_sset_count()  argument
130 static void aqr107_get_strings(struct phy_device *phydev, u8 *data) in aqr107_get_strings() argument
139 static u64 aqr107_get_stat(struct phy_device *phydev, int index) in aqr107_get_stat() argument
147 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg); in aqr107_get_stat()
153 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg + 1); in aqr107_get_stat()
163 static void aqr107_get_stats(struct phy_device *phydev, in aqr107_get_stats() argument
166 struct aqr107_priv *priv = phydev->priv; in aqr107_get_stats()
171 val = aqr107_get_stat(phydev, i); in aqr107_get_stats()
173 phydev_err(phydev, "Reading HW Statistics failed for %s\n", in aqr107_get_stats()
182 static int aqr_config_aneg(struct phy_device *phydev) in aqr_config_aneg() argument
188 if (phydev->autoneg == AUTONEG_DISABLE) in aqr_config_aneg()
189 return genphy_c45_pma_setup_forced(phydev); in aqr_config_aneg()
191 ret = genphy_c45_an_config_aneg(phydev); in aqr_config_aneg()
202 phydev->advertising)) in aqr_config_aneg()
206 phydev->advertising)) in aqr_config_aneg()
211 phydev->advertising)) in aqr_config_aneg()
215 phydev->advertising)) in aqr_config_aneg()
218 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr_config_aneg()
228 return genphy_c45_check_and_restart_aneg(phydev, changed); in aqr_config_aneg()
231 static int aqr_config_intr(struct phy_device *phydev) in aqr_config_intr() argument
233 bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED; in aqr_config_intr()
238 err = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_STATUS2); in aqr_config_intr()
243 err = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_MASK2, in aqr_config_intr()
248 err = phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_STD_MASK, in aqr_config_intr()
253 err = phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_VEND_MASK, in aqr_config_intr()
261 err = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_STATUS2); in aqr_config_intr()
269 static irqreturn_t aqr_handle_interrupt(struct phy_device *phydev) in aqr_handle_interrupt() argument
273 irq_status = phy_read_mmd(phydev, MDIO_MMD_AN, in aqr_handle_interrupt()
276 phy_error(phydev); in aqr_handle_interrupt()
283 phy_trigger_machine(phydev); in aqr_handle_interrupt()
288 static int aqr_read_status(struct phy_device *phydev) in aqr_read_status() argument
292 if (phydev->autoneg == AUTONEG_ENABLE) { in aqr_read_status()
293 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr_read_status()
298 phydev->lp_advertising, in aqr_read_status()
301 phydev->lp_advertising, in aqr_read_status()
305 return genphy_c45_read_status(phydev); in aqr_read_status()
308 static int aqr107_read_rate(struct phy_device *phydev) in aqr107_read_rate() argument
313 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_STATUS1); in aqr107_read_rate()
318 phydev->duplex = DUPLEX_FULL; in aqr107_read_rate()
320 phydev->duplex = DUPLEX_HALF; in aqr107_read_rate()
324 phydev->speed = SPEED_10; in aqr107_read_rate()
328 phydev->speed = SPEED_100; in aqr107_read_rate()
332 phydev->speed = SPEED_1000; in aqr107_read_rate()
336 phydev->speed = SPEED_2500; in aqr107_read_rate()
340 phydev->speed = SPEED_5000; in aqr107_read_rate()
344 phydev->speed = SPEED_10000; in aqr107_read_rate()
348 phydev->speed = SPEED_UNKNOWN; in aqr107_read_rate()
352 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, config_reg); in aqr107_read_rate()
358 phydev->rate_matching = RATE_MATCH_PAUSE; in aqr107_read_rate()
360 phydev->rate_matching = RATE_MATCH_NONE; in aqr107_read_rate()
365 static int aqr107_read_status(struct phy_device *phydev) in aqr107_read_status() argument
369 ret = aqr_read_status(phydev); in aqr107_read_status()
373 if (!phydev->link || phydev->autoneg == AUTONEG_DISABLE) in aqr107_read_status()
376 val = phy_read_mmd(phydev, MDIO_MMD_PHYXS, MDIO_PHYXS_VEND_IF_STATUS); in aqr107_read_status()
382 phydev->interface = PHY_INTERFACE_MODE_10GKR; in aqr107_read_status()
385 phydev->interface = PHY_INTERFACE_MODE_1000BASEKX; in aqr107_read_status()
388 phydev->interface = PHY_INTERFACE_MODE_10GBASER; in aqr107_read_status()
391 phydev->interface = PHY_INTERFACE_MODE_USXGMII; in aqr107_read_status()
394 phydev->interface = PHY_INTERFACE_MODE_XAUI; in aqr107_read_status()
397 phydev->interface = PHY_INTERFACE_MODE_SGMII; in aqr107_read_status()
400 phydev->interface = PHY_INTERFACE_MODE_RXAUI; in aqr107_read_status()
403 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in aqr107_read_status()
406 phydev->interface = PHY_INTERFACE_MODE_NA; in aqr107_read_status()
411 return aqr107_read_rate(phydev); in aqr107_read_status()
414 static int aqr107_get_downshift(struct phy_device *phydev, u8 *data) in aqr107_get_downshift() argument
418 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV); in aqr107_get_downshift()
430 static int aqr107_set_downshift(struct phy_device *phydev, u8 cnt) in aqr107_set_downshift() argument
442 return phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr107_set_downshift()
447 static int aqr107_get_tunable(struct phy_device *phydev, in aqr107_get_tunable() argument
452 return aqr107_get_downshift(phydev, data); in aqr107_get_tunable()
458 static int aqr107_set_tunable(struct phy_device *phydev, in aqr107_set_tunable() argument
463 return aqr107_set_downshift(phydev, *(const u8 *)data); in aqr107_set_tunable()
476 static int aqr107_wait_reset_complete(struct phy_device *phydev) in aqr107_wait_reset_complete() argument
480 return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, in aqr107_wait_reset_complete()
485 static void aqr107_chip_info(struct phy_device *phydev) in aqr107_chip_info() argument
490 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); in aqr107_chip_info()
497 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT1); in aqr107_chip_info()
504 phydev_dbg(phydev, "FW %u.%u, Build %u, Provisioning %u\n", in aqr107_chip_info()
508 static int aqr107_config_init(struct phy_device *phydev) in aqr107_config_init() argument
513 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqr107_config_init()
514 phydev->interface != PHY_INTERFACE_MODE_1000BASEKX && in aqr107_config_init()
515 phydev->interface != PHY_INTERFACE_MODE_2500BASEX && in aqr107_config_init()
516 phydev->interface != PHY_INTERFACE_MODE_XGMII && in aqr107_config_init()
517 phydev->interface != PHY_INTERFACE_MODE_USXGMII && in aqr107_config_init()
518 phydev->interface != PHY_INTERFACE_MODE_10GKR && in aqr107_config_init()
519 phydev->interface != PHY_INTERFACE_MODE_10GBASER && in aqr107_config_init()
520 phydev->interface != PHY_INTERFACE_MODE_XAUI && in aqr107_config_init()
521 phydev->interface != PHY_INTERFACE_MODE_RXAUI) in aqr107_config_init()
524 WARN(phydev->interface == PHY_INTERFACE_MODE_XGMII, in aqr107_config_init()
527 ret = aqr107_wait_reset_complete(phydev); in aqr107_config_init()
529 aqr107_chip_info(phydev); in aqr107_config_init()
531 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqr107_config_init()
534 static int aqcs109_config_init(struct phy_device *phydev) in aqcs109_config_init() argument
539 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqcs109_config_init()
540 phydev->interface != PHY_INTERFACE_MODE_2500BASEX) in aqcs109_config_init()
543 ret = aqr107_wait_reset_complete(phydev); in aqcs109_config_init()
545 aqr107_chip_info(phydev); in aqcs109_config_init()
551 phy_set_max_speed(phydev, SPEED_2500); in aqcs109_config_init()
553 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqcs109_config_init()
556 static void aqr107_link_change_notify(struct phy_device *phydev) in aqr107_link_change_notify() argument
562 if (phydev->state != PHY_RUNNING || phydev->autoneg == AUTONEG_DISABLE) in aqr107_link_change_notify()
565 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr107_link_change_notify()
573 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT4); in aqr107_link_change_notify()
580 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_VEND_STAT3); in aqr107_link_change_notify()
586 phydev_dbg(phydev, "Link partner is Aquantia PHY, FW %u.%u%s%s%s\n", in aqr107_link_change_notify()
592 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT9); in aqr107_link_change_notify()
598 phydev_info(phydev, "Aquantia 1000Base-T2 mode active\n"); in aqr107_link_change_notify()
601 static int aqr107_wait_processor_intensive_op(struct phy_device *phydev) in aqr107_wait_processor_intensive_op() argument
612 err = phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, in aqr107_wait_processor_intensive_op()
618 phydev_err(phydev, "timeout: processor-intensive MDIO operation\n"); in aqr107_wait_processor_intensive_op()
625 static int aqr107_get_rate_matching(struct phy_device *phydev, in aqr107_get_rate_matching() argument
635 static int aqr107_suspend(struct phy_device *phydev) in aqr107_suspend() argument
639 err = phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_suspend()
644 return aqr107_wait_processor_intensive_op(phydev); in aqr107_suspend()
647 static int aqr107_resume(struct phy_device *phydev) in aqr107_resume() argument
651 err = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_resume()
656 return aqr107_wait_processor_intensive_op(phydev); in aqr107_resume()
668 static int aqr107_fill_interface_modes(struct phy_device *phydev) in aqr107_fill_interface_modes() argument
670 unsigned long *possible = phydev->possible_interfaces; in aqr107_fill_interface_modes()
680 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, in aqr107_fill_interface_modes()
709 phydev_warn(phydev, "unrecognised serdes mode %u\n", in aqr107_fill_interface_modes()
722 static int aqr113c_config_init(struct phy_device *phydev) in aqr113c_config_init() argument
726 ret = aqr107_config_init(phydev); in aqr113c_config_init()
730 return aqr107_fill_interface_modes(phydev); in aqr113c_config_init()
733 static int aqr107_probe(struct phy_device *phydev) in aqr107_probe() argument
737 phydev->priv = devm_kzalloc(&phydev->mdio.dev, in aqr107_probe()
739 if (!phydev->priv) in aqr107_probe()
742 ret = aqr_firmware_load(phydev); in aqr107_probe()
746 return aqr_hwmon_probe(phydev); in aqr107_probe()