forked from mirrors/linux
		
	net: phy: Do not perform software reset for Generic PHY
The Generic PHY driver is a catch-all PHY driver and it should preserve whatever prior initialization has been done by boot loader or firmware agents. For specific PHY device configuration it is expected that a specialized PHY driver would take over that role. Resetting the generic PHY was a bad idea that has lead to several complaints and downstream workarounds e.g: in OpenWrt/LEDE so restore the behavior prior to87aa9f9c61("net: phy: consolidate PHY reset in phy_init_hw()"). Reported-by: Felix Fietkau <nbd@nbd.name> Fixes:87aa9f9c61("net: phy: consolidate PHY reset in phy_init_hw()") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									f38837b08d
								
							
						
					
					
						commit
						0878fff1f4
					
				
					 2 changed files with 5 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1864,7 +1864,7 @@ static struct phy_driver genphy_driver[] = {
 | 
			
		|||
	.phy_id		= 0xffffffff,
 | 
			
		||||
	.phy_id_mask	= 0xffffffff,
 | 
			
		||||
	.name		= "Generic PHY",
 | 
			
		||||
	.soft_reset	= genphy_soft_reset,
 | 
			
		||||
	.soft_reset	= genphy_no_soft_reset,
 | 
			
		||||
	.config_init	= genphy_config_init,
 | 
			
		||||
	.features	= PHY_GBIT_FEATURES | SUPPORTED_MII |
 | 
			
		||||
			  SUPPORTED_AUI | SUPPORTED_FIBRE |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -837,6 +837,10 @@ int genphy_read_status(struct phy_device *phydev);
 | 
			
		|||
int genphy_suspend(struct phy_device *phydev);
 | 
			
		||||
int genphy_resume(struct phy_device *phydev);
 | 
			
		||||
int genphy_soft_reset(struct phy_device *phydev);
 | 
			
		||||
static inline int genphy_no_soft_reset(struct phy_device *phydev)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
void phy_driver_unregister(struct phy_driver *drv);
 | 
			
		||||
void phy_drivers_unregister(struct phy_driver *drv, int n);
 | 
			
		||||
int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue