forked from mirrors/linux
		
	net: ethernet: Add helper for MACs which support pause
Rather than have the MAC drivers manipulate phydev members, add a helper function for MACs supporting Pause, but not Asym Pause. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									af8d9bb2f2
								
							
						
					
					
						commit
						c306ad3618
					
				
					 4 changed files with 17 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -890,7 +890,7 @@ static int bcm_enet_open(struct net_device *dev)
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		/* mask with MAC supported features */
 | 
			
		||||
		phydev->supported |= SUPPORTED_Pause;
 | 
			
		||||
		phy_support_sym_pause(phydev);
 | 
			
		||||
		phy_set_max_speed(phydev, SPEED_100);
 | 
			
		||||
 | 
			
		||||
		if (priv->pause_auto && priv->pause_rx && priv->pause_tx)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1950,14 +1950,12 @@ static int fec_enet_mii_probe(struct net_device *ndev)
 | 
			
		|||
		phy_remove_link_mode(phy_dev,
 | 
			
		||||
				     ETHTOOL_LINK_MODE_1000baseT_Half_BIT);
 | 
			
		||||
#if !defined(CONFIG_M5272)
 | 
			
		||||
		phy_dev->supported |= SUPPORTED_Pause;
 | 
			
		||||
		phy_support_sym_pause(phy_dev);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		phy_set_max_speed(phy_dev, 100);
 | 
			
		||||
 | 
			
		||||
	phy_dev->advertising = phy_dev->supported;
 | 
			
		||||
 | 
			
		||||
	fep->link = 0;
 | 
			
		||||
	fep->full_duplex = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1783,6 +1783,20 @@ void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode)
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL(phy_remove_link_mode);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * phy_support_sym_pause - Enable support of symmetrical pause
 | 
			
		||||
 * @phydev: target phy_device struct
 | 
			
		||||
 *
 | 
			
		||||
 * Description: Called by the MAC to indicate is supports symmetrical
 | 
			
		||||
 * Pause, but not asym pause.
 | 
			
		||||
 */
 | 
			
		||||
void phy_support_sym_pause(struct phy_device *phydev)
 | 
			
		||||
{
 | 
			
		||||
	phydev->supported |= SUPPORTED_Pause;
 | 
			
		||||
	phydev->advertising = phydev->supported;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(phy_support_sym_pause);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * phy_support_asym_pause - Enable support of asym pause
 | 
			
		||||
 * @phydev: target phy_device struct
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1050,6 +1050,7 @@ int phy_start_interrupts(struct phy_device *phydev);
 | 
			
		|||
void phy_print_status(struct phy_device *phydev);
 | 
			
		||||
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
 | 
			
		||||
void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
 | 
			
		||||
void phy_support_sym_pause(struct phy_device *phydev);
 | 
			
		||||
void phy_support_asym_pause(struct phy_device *phydev);
 | 
			
		||||
 | 
			
		||||
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue