Fixes: - CVE-2020-10757 The "mtd: rawnand: Pass a nand_chip object to nand_release()" commit was backported which needed some adaptations to other code. Run tested: ath79 Build tested: ath79 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From ce825df56e0480a2cbb296e38976babafb57e503 Mon Sep 17 00:00:00 2001
 | |
| From: Andrew Lunn <andrew@lunn.ch>
 | |
| Date: Wed, 12 Sep 2018 01:53:17 +0200
 | |
| Subject: [PATCH 601/660] net: ethernet: Add helper for set_pauseparam for Asym
 | |
|  Pause
 | |
| 
 | |
| ethtool can be used to enable/disable pause. Add a helper to configure
 | |
| the PHY when asym pause is supported.
 | |
| 
 | |
| 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>
 | |
| ---
 | |
|  drivers/net/phy/phy_device.c | 30 ++++++++++++++++++++++++++++++
 | |
|  include/linux/phy.h          |  1 +
 | |
|  2 files changed, 31 insertions(+)
 | |
| 
 | |
| --- a/drivers/net/phy/phy_device.c
 | |
| +++ b/drivers/net/phy/phy_device.c
 | |
| @@ -1796,6 +1796,36 @@ void phy_support_asym_pause(struct phy_d
 | |
|  }
 | |
|  EXPORT_SYMBOL(phy_support_asym_pause);
 | |
|  
 | |
| +/**
 | |
| + * phy_set_asym_pause - Configure Pause and Asym Pause
 | |
| + * @phydev: target phy_device struct
 | |
| + * @rx: Receiver Pause is supported
 | |
| + * @tx: Transmit Pause is supported
 | |
| + *
 | |
| + * Description: Configure advertised Pause support depending on if
 | |
| + * transmit and receiver pause is supported. If there has been a
 | |
| + * change in adverting, trigger a new autoneg. Generally called from
 | |
| + * the set_pauseparam .ndo.
 | |
| + */
 | |
| +void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx)
 | |
| +{
 | |
| +	u16 oldadv = phydev->advertising;
 | |
| +	u16 newadv = oldadv &= ~(SUPPORTED_Pause | SUPPORTED_Asym_Pause);
 | |
| +
 | |
| +	if (rx)
 | |
| +		newadv |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
 | |
| +	if (tx)
 | |
| +		newadv ^= SUPPORTED_Asym_Pause;
 | |
| +
 | |
| +	if (oldadv != newadv) {
 | |
| +		phydev->advertising = newadv;
 | |
| +
 | |
| +		if (phydev->autoneg)
 | |
| +			phy_start_aneg(phydev);
 | |
| +	}
 | |
| +}
 | |
| +EXPORT_SYMBOL(phy_set_asym_pause);
 | |
| +
 | |
|  static void of_set_phy_supported(struct phy_device *phydev)
 | |
|  {
 | |
|  	struct device_node *node = phydev->mdio.dev.of_node;
 | |
| --- a/include/linux/phy.h
 | |
| +++ b/include/linux/phy.h
 | |
| @@ -1052,6 +1052,7 @@ int phy_start_interrupts(struct phy_devi
 | |
|  void phy_print_status(struct phy_device *phydev);
 | |
|  int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
 | |
|  void phy_support_asym_pause(struct phy_device *phydev);
 | |
| +void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
 | |
|  
 | |
|  int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
 | |
|  		       int (*run)(struct phy_device *));
 |