Lines Matching +full:5 +full:g +full:- +full:usxgmii
1 // SPDX-License-Identifier: GPL-2.0+
44 #define PHY_IMASK_WOL BIT(15) /* Wake-on-LAN */
45 #define PHY_IMASK_ANC BIT(10) /* Auto-Neg complete */
46 #define PHY_IMASK_ADSC BIT(5) /* Link auto-downspeed detect */
101 if (!phydev->is_c45) { in gpy_probe()
156 phydev->speed = SPEED_2500; in gpy_2500basex_chk()
157 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in gpy_2500basex_chk()
183 if (phydev->autoneg == AUTONEG_DISABLE) { in gpy_config_aneg()
187 return phydev->duplex != DUPLEX_FULL in gpy_config_aneg()
198 adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising); in gpy_config_aneg()
211 if (phydev->interface == PHY_INTERFACE_MODE_USXGMII || in gpy_config_aneg()
212 phydev->interface == PHY_INTERFACE_MODE_INTERNAL) in gpy_config_aneg()
215 /* No need to trigger re-ANEG if link speed is 2.5G or SGMII ANEG is in gpy_config_aneg()
225 * again, SGMII AN is not triggered and hence no new in-band message in gpy_config_aneg()
229 * wouldn`t receive new in-band message from GPY with correct link in gpy_config_aneg()
243 if (phydev->state != PHY_UP) in gpy_config_aneg()
248 if (ret == -ETIMEDOUT) in gpy_config_aneg()
262 /* Interface mode is fixed for USXGMII and integrated PHY */ in gpy_update_interface()
263 if (phydev->interface == PHY_INTERFACE_MODE_USXGMII || in gpy_update_interface()
264 phydev->interface == PHY_INTERFACE_MODE_INTERNAL) in gpy_update_interface()
267 /* Automatically switch SERDES interface between SGMII and 2500-BaseX in gpy_update_interface()
268 * according to speed. Disable ANEG in 2500-BaseX mode. in gpy_update_interface()
270 switch (phydev->speed) { in gpy_update_interface()
272 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in gpy_update_interface()
283 phydev->interface = PHY_INTERFACE_MODE_SGMII; in gpy_update_interface()
287 * if ANEG is disabled (in 2500-BaseX mode). in gpy_update_interface()
308 phydev->speed = SPEED_UNKNOWN; in gpy_read_status()
309 phydev->duplex = DUPLEX_UNKNOWN; in gpy_read_status()
310 phydev->pause = 0; in gpy_read_status()
311 phydev->asym_pause = 0; in gpy_read_status()
313 if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) { in gpy_read_status()
318 /* Read the link partner's 1G advertisement */ in gpy_read_status()
322 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, ret); in gpy_read_status()
323 } else if (phydev->autoneg == AUTONEG_DISABLE) { in gpy_read_status()
324 linkmode_zero(phydev->lp_advertising); in gpy_read_status()
331 phydev->link = (ret & PHY_MIISTAT_LS) ? 1 : 0; in gpy_read_status()
332 phydev->duplex = (ret & PHY_MIISTAT_DPX) ? DUPLEX_FULL : DUPLEX_HALF; in gpy_read_status()
335 phydev->speed = SPEED_10; in gpy_read_status()
338 phydev->speed = SPEED_100; in gpy_read_status()
341 phydev->speed = SPEED_1000; in gpy_read_status()
344 phydev->speed = SPEED_2500; in gpy_read_status()
348 if (phydev->link) in gpy_read_status()
358 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in gpy_config_intr()
385 struct net_device *attach_dev = phydev->attached_dev; in gpy_set_wol()
388 if (wol->wolopts & WAKE_MAGIC) { in gpy_set_wol()
389 /* MAC address - Byte0:Byte1:Byte2:Byte3:Byte4:Byte5 in gpy_set_wol()
396 ((attach_dev->dev_addr[0] << 8) | in gpy_set_wol()
397 attach_dev->dev_addr[1])); in gpy_set_wol()
403 ((attach_dev->dev_addr[2] << 8) | in gpy_set_wol()
404 attach_dev->dev_addr[3])); in gpy_set_wol()
410 ((attach_dev->dev_addr[4] << 8) | in gpy_set_wol()
411 attach_dev->dev_addr[5])); in gpy_set_wol()
442 if (wol->wolopts & WAKE_PHY) { in gpy_set_wol()
468 wol->supported = WAKE_MAGIC | WAKE_PHY; in gpy_get_wol()
469 wol->wolopts = 0; in gpy_get_wol()
473 wol->wolopts |= WAKE_MAGIC; in gpy_get_wol()
477 wol->wolopts |= WAKE_PHY; in gpy_get_wol()
488 * into/out-of loopback mode. in gpy_loopback()