mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	net: phy: improve genphy_read_status
This patch improves few aspects of genphy_read_status(): - Don't initialize lpagb, it's not needed. - Move initializing phydev->speed et al before the if clause. - In auto-neg case, skip populating lp_advertising if we don't have a link. This avoids quite some unnecessary MDIO reads in case of phylib polling mode. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									9dfe6aa077
								
							
						
					
					
						commit
						b6163f194c
					
				
					 1 changed files with 8 additions and 15 deletions
				
			
		| 
						 | 
					@ -1743,19 +1743,21 @@ EXPORT_SYMBOL(genphy_update_link);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int genphy_read_status(struct phy_device *phydev)
 | 
					int genphy_read_status(struct phy_device *phydev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int adv;
 | 
						int adv, lpa, lpagb, err;
 | 
				
			||||||
	int err;
 | 
					 | 
				
			||||||
	int lpa;
 | 
					 | 
				
			||||||
	int lpagb = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Update the link, but return if there was an error */
 | 
						/* Update the link, but return if there was an error */
 | 
				
			||||||
	err = genphy_update_link(phydev);
 | 
						err = genphy_update_link(phydev);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						phydev->speed = SPEED_UNKNOWN;
 | 
				
			||||||
 | 
						phydev->duplex = DUPLEX_UNKNOWN;
 | 
				
			||||||
 | 
						phydev->pause = 0;
 | 
				
			||||||
 | 
						phydev->asym_pause = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	linkmode_zero(phydev->lp_advertising);
 | 
						linkmode_zero(phydev->lp_advertising);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (AUTONEG_ENABLE == phydev->autoneg) {
 | 
						if (phydev->autoneg == AUTONEG_ENABLE && phydev->link) {
 | 
				
			||||||
		if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
 | 
							if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
 | 
				
			||||||
				      phydev->supported) ||
 | 
									      phydev->supported) ||
 | 
				
			||||||
		    linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 | 
							    linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 | 
				
			||||||
| 
						 | 
					@ -1785,14 +1787,8 @@ int genphy_read_status(struct phy_device *phydev)
 | 
				
			||||||
			return lpa;
 | 
								return lpa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
 | 
							mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
 | 
				
			||||||
 | 
					 | 
				
			||||||
		phydev->speed = SPEED_UNKNOWN;
 | 
					 | 
				
			||||||
		phydev->duplex = DUPLEX_UNKNOWN;
 | 
					 | 
				
			||||||
		phydev->pause = 0;
 | 
					 | 
				
			||||||
		phydev->asym_pause = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		phy_resolve_aneg_linkmode(phydev);
 | 
							phy_resolve_aneg_linkmode(phydev);
 | 
				
			||||||
	} else {
 | 
						} else if (phydev->autoneg == AUTONEG_DISABLE) {
 | 
				
			||||||
		int bmcr = phy_read(phydev, MII_BMCR);
 | 
							int bmcr = phy_read(phydev, MII_BMCR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (bmcr < 0)
 | 
							if (bmcr < 0)
 | 
				
			||||||
| 
						 | 
					@ -1809,9 +1805,6 @@ int genphy_read_status(struct phy_device *phydev)
 | 
				
			||||||
			phydev->speed = SPEED_100;
 | 
								phydev->speed = SPEED_100;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			phydev->speed = SPEED_10;
 | 
								phydev->speed = SPEED_10;
 | 
				
			||||||
 | 
					 | 
				
			||||||
		phydev->pause = 0;
 | 
					 | 
				
			||||||
		phydev->asym_pause = 0;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue