summaryrefslogtreecommitdiffstats
path: root/drivers/net/phy/phy-c45.c
diff options
context:
space:
mode:
authorHeiner Kallweit <hkallweit1@gmail.com>2019-02-22 22:59:38 +0100
committerDavid S. Miller <davem@davemloft.net>2019-02-25 02:42:58 +0100
commitc1164bb1a631205a28b9dd8d4a9331a689e85561 (patch)
treeebd0f1239ea3da47e57895b6ccc66ddb6299e38c /drivers/net/phy/phy-c45.c
parentMerge branch 'net-switchdev-h-inclusion-removal' (diff)
downloadlinux-c1164bb1a631205a28b9dd8d4a9331a689e85561.tar.xz
linux-c1164bb1a631205a28b9dd8d4a9331a689e85561.zip
net: phy: check PMAPMD link status only in genphy_c45_read_link
The current code reports a link as up if all devices (except a few blacklisted ones) report the link as up. This breaks Aquantia AQCS109 for lower speeds because on this PHY the PCS link status reflects a 10G link only. For Marvell there's a similar issue, therefore PHYXS device isn't checked. There may be more PHYs where depending on the mode the link status of only selected devices is relevant. For now it seems to be sufficient to check the link status of the PMAPMD device only. Leave the loop in the code to be prepared in case we have to add functionality to check more than one device, depending on the mode. Successfully tested on a board with an AQCS109. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy/phy-c45.c')
-rw-r--r--drivers/net/phy/phy-c45.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c
index d79c27431aa5..49e7cd08b05f 100644
--- a/drivers/net/phy/phy-c45.c
+++ b/drivers/net/phy/phy-c45.c
@@ -215,17 +215,10 @@ EXPORT_SYMBOL_GPL(genphy_c45_aneg_done);
*/
int genphy_c45_read_link(struct phy_device *phydev)
{
- u32 mmd_mask = phydev->c45_ids.devices_in_package;
+ u32 mmd_mask = MDIO_DEVS_PMAPMD;
int val, devad;
bool link = true;
- /* The vendor devads and C22EXT do not report link status. Avoid the
- * PHYXS instance as its status may depend on the MAC being
- * appropriately configured for the negotiated speed.
- */
- mmd_mask &= ~(MDIO_DEVS_VEND1 | MDIO_DEVS_VEND2 | MDIO_DEVS_C22EXT |
- MDIO_DEVS_PHYXS);
-
while (mmd_mask && link) {
devad = __ffs(mmd_mask);
mmd_mask &= ~BIT(devad);