Lines Matching full:phydev
149 static int aqr107_get_sset_count(struct phy_device *phydev) in aqr107_get_sset_count() argument
154 static void aqr107_get_strings(struct phy_device *phydev, u8 *data) in aqr107_get_strings() argument
163 static u64 aqr107_get_stat(struct phy_device *phydev, int index) in aqr107_get_stat() argument
171 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg); in aqr107_get_stat()
177 val = phy_read_mmd(phydev, MDIO_MMD_C22EXT, stat->reg + 1); in aqr107_get_stat()
187 static void aqr107_get_stats(struct phy_device *phydev, in aqr107_get_stats() argument
190 struct aqr107_priv *priv = phydev->priv; in aqr107_get_stats()
195 val = aqr107_get_stat(phydev, i); in aqr107_get_stats()
197 phydev_err(phydev, "Reading HW Statistics failed for %s\n", in aqr107_get_stats()
206 static int aqr_config_aneg(struct phy_device *phydev) in aqr_config_aneg() argument
212 if (phydev->autoneg == AUTONEG_DISABLE) in aqr_config_aneg()
213 return genphy_c45_pma_setup_forced(phydev); in aqr_config_aneg()
215 ret = genphy_c45_an_config_aneg(phydev); in aqr_config_aneg()
226 phydev->advertising)) in aqr_config_aneg()
230 phydev->advertising)) in aqr_config_aneg()
233 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr_config_aneg()
241 return genphy_c45_check_and_restart_aneg(phydev, changed); in aqr_config_aneg()
244 static int aqr_config_intr(struct phy_device *phydev) in aqr_config_intr() argument
246 bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED; in aqr_config_intr()
249 err = phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_INT_MASK2, in aqr_config_intr()
254 err = phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_STD_MASK, in aqr_config_intr()
259 return phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_INT_VEND_MASK, in aqr_config_intr()
264 static int aqr_ack_interrupt(struct phy_device *phydev) in aqr_ack_interrupt() argument
268 reg = phy_read_mmd(phydev, MDIO_MMD_AN, in aqr_ack_interrupt()
273 static int aqr_read_status(struct phy_device *phydev) in aqr_read_status() argument
277 if (phydev->autoneg == AUTONEG_ENABLE) { in aqr_read_status()
278 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr_read_status()
283 phydev->lp_advertising, in aqr_read_status()
286 phydev->lp_advertising, in aqr_read_status()
290 return genphy_c45_read_status(phydev); in aqr_read_status()
293 static int aqr107_read_rate(struct phy_device *phydev) in aqr107_read_rate() argument
297 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_TX_VEND_STATUS1); in aqr107_read_rate()
303 phydev->speed = SPEED_10; in aqr107_read_rate()
306 phydev->speed = SPEED_100; in aqr107_read_rate()
309 phydev->speed = SPEED_1000; in aqr107_read_rate()
312 phydev->speed = SPEED_2500; in aqr107_read_rate()
315 phydev->speed = SPEED_5000; in aqr107_read_rate()
318 phydev->speed = SPEED_10000; in aqr107_read_rate()
321 phydev->speed = SPEED_UNKNOWN; in aqr107_read_rate()
326 phydev->duplex = DUPLEX_FULL; in aqr107_read_rate()
328 phydev->duplex = DUPLEX_HALF; in aqr107_read_rate()
333 static int aqr107_read_status(struct phy_device *phydev) in aqr107_read_status() argument
337 ret = aqr_read_status(phydev); in aqr107_read_status()
341 if (!phydev->link || phydev->autoneg == AUTONEG_DISABLE) in aqr107_read_status()
344 val = phy_read_mmd(phydev, MDIO_MMD_PHYXS, MDIO_PHYXS_VEND_IF_STATUS); in aqr107_read_status()
350 phydev->interface = PHY_INTERFACE_MODE_10GKR; in aqr107_read_status()
353 phydev->interface = PHY_INTERFACE_MODE_10GBASER; in aqr107_read_status()
356 phydev->interface = PHY_INTERFACE_MODE_USXGMII; in aqr107_read_status()
359 phydev->interface = PHY_INTERFACE_MODE_SGMII; in aqr107_read_status()
362 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in aqr107_read_status()
365 phydev->interface = PHY_INTERFACE_MODE_NA; in aqr107_read_status()
370 return aqr107_read_rate(phydev); in aqr107_read_status()
373 static int aqr107_get_downshift(struct phy_device *phydev, u8 *data) in aqr107_get_downshift() argument
377 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV); in aqr107_get_downshift()
389 static int aqr107_set_downshift(struct phy_device *phydev, u8 cnt) in aqr107_set_downshift() argument
401 return phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV, in aqr107_set_downshift()
406 static int aqr107_get_tunable(struct phy_device *phydev, in aqr107_get_tunable() argument
411 return aqr107_get_downshift(phydev, data); in aqr107_get_tunable()
417 static int aqr107_set_tunable(struct phy_device *phydev, in aqr107_set_tunable() argument
422 return aqr107_set_downshift(phydev, *(const u8 *)data); in aqr107_set_tunable()
435 static int aqr107_wait_reset_complete(struct phy_device *phydev) in aqr107_wait_reset_complete() argument
439 return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, in aqr107_wait_reset_complete()
444 static void aqr107_chip_info(struct phy_device *phydev) in aqr107_chip_info() argument
449 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); in aqr107_chip_info()
456 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT1); in aqr107_chip_info()
463 phydev_dbg(phydev, "FW %u.%u, Build %u, Provisioning %u\n", in aqr107_chip_info()
467 static int aqr107_config_init(struct phy_device *phydev) in aqr107_config_init() argument
472 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqr107_config_init()
473 phydev->interface != PHY_INTERFACE_MODE_2500BASEX && in aqr107_config_init()
474 phydev->interface != PHY_INTERFACE_MODE_XGMII && in aqr107_config_init()
475 phydev->interface != PHY_INTERFACE_MODE_USXGMII && in aqr107_config_init()
476 phydev->interface != PHY_INTERFACE_MODE_10GKR && in aqr107_config_init()
477 phydev->interface != PHY_INTERFACE_MODE_10GBASER) in aqr107_config_init()
480 WARN(phydev->interface == PHY_INTERFACE_MODE_XGMII, in aqr107_config_init()
483 ret = aqr107_wait_reset_complete(phydev); in aqr107_config_init()
485 aqr107_chip_info(phydev); in aqr107_config_init()
487 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqr107_config_init()
490 static int aqcs109_config_init(struct phy_device *phydev) in aqcs109_config_init() argument
495 if (phydev->interface != PHY_INTERFACE_MODE_SGMII && in aqcs109_config_init()
496 phydev->interface != PHY_INTERFACE_MODE_2500BASEX) in aqcs109_config_init()
499 ret = aqr107_wait_reset_complete(phydev); in aqcs109_config_init()
501 aqr107_chip_info(phydev); in aqcs109_config_init()
507 ret = phy_set_max_speed(phydev, SPEED_2500); in aqcs109_config_init()
511 return aqr107_set_downshift(phydev, MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT); in aqcs109_config_init()
514 static void aqr107_link_change_notify(struct phy_device *phydev) in aqr107_link_change_notify() argument
520 if (phydev->state != PHY_RUNNING || phydev->autoneg == AUTONEG_DISABLE) in aqr107_link_change_notify()
523 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT1); in aqr107_link_change_notify()
531 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_LP_STAT4); in aqr107_link_change_notify()
538 val = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_RX_VEND_STAT3); in aqr107_link_change_notify()
544 phydev_dbg(phydev, "Link partner is Aquantia PHY, FW %u.%u%s%s%s\n", in aqr107_link_change_notify()
550 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_RSVD_STAT9); in aqr107_link_change_notify()
556 phydev_info(phydev, "Aquantia 1000Base-T2 mode active\n"); in aqr107_link_change_notify()
559 static int aqr107_suspend(struct phy_device *phydev) in aqr107_suspend() argument
561 return phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_suspend()
565 static int aqr107_resume(struct phy_device *phydev) in aqr107_resume() argument
567 return phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, in aqr107_resume()
571 static int aqr107_probe(struct phy_device *phydev) in aqr107_probe() argument
573 phydev->priv = devm_kzalloc(&phydev->mdio.dev, in aqr107_probe()
575 if (!phydev->priv) in aqr107_probe()
578 return aqr_hwmon_probe(phydev); in aqr107_probe()