mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
net: phy: fix write to mii-ctrl1000 register
[ Upstream commit4cf6c57e61] When userspace writes to the MII_ADVERTISE register, we update phylib's advertising mask and trigger a renegotiation. However, writing to the MII_CTRL1000 register, which contains the gigabit advertisement, does neither. This can lead to phylib's copy of the advertisement becoming de-synced with the values in the PHY register set, which can result in incorrect negotiation resolution. Fixes:5502b218e0("net: phy: use phy_resolve_aneg_linkmode in genphy_read_status") Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ec740ada78
commit
a9ab48bd6d
@@ -457,6 +457,11 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
|
||||
val);
|
||||
change_autoneg = true;
|
||||
break;
|
||||
case MII_CTRL1000:
|
||||
mii_ctrl1000_mod_linkmode_adv_t(phydev->advertising,
|
||||
val);
|
||||
change_autoneg = true;
|
||||
break;
|
||||
default:
|
||||
/* do nothing */
|
||||
break;
|
||||
|
||||
@@ -455,6 +455,15 @@ static inline void mii_lpa_mod_linkmode_lpa_t(unsigned long *lp_advertising,
|
||||
lp_advertising, lpa & LPA_LPACK);
|
||||
}
|
||||
|
||||
static inline void mii_ctrl1000_mod_linkmode_adv_t(unsigned long *advertising,
|
||||
u32 ctrl1000)
|
||||
{
|
||||
linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, advertising,
|
||||
ctrl1000 & ADVERTISE_1000HALF);
|
||||
linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, advertising,
|
||||
ctrl1000 & ADVERTISE_1000FULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* linkmode_adv_to_lcl_adv_t
|
||||
* @advertising:pointer to linkmode advertising
|
||||
|
||||
Reference in New Issue
Block a user