cd54b2d42b
- Refreshed all patches - Removed upstreamed - Adapted 4 patches: 473-fix-marvell-phy-initialization-issues.patch ----------------------------------------------- Removed hunk 5 which got upstreamed 403-net-phy-avoid-setting-unsupported-EEE-advertisments.patch 404-net-phy-restart-phy-autonegotiation-after-EEE-advert.patch -------------------------------------------------------------- Adapted these 2 RFC patches, merging the delta's from an upstream commit (see below) which made it before these 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git/commit/?h=v4.9.36&id=97ace183074d306942b903a148aebd5d061758f0 180-usb-xhci-add-support-for-performing-fake-doorbell.patch ----------------------------------------------------------- - Moved fake_doorbell bitmask due to new item Compile tested on: cns3xxx, imx6 Run tested on: cns3xxx, imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
54 lines
1.4 KiB
Diff
54 lines
1.4 KiB
Diff
From: Russell King <rmk+kernel@armlinux.org.uk>
|
|
Date: Fri, 13 Jan 2017 11:17:30 +0000
|
|
Subject: [PATCH] net: phy: hook up clause 45 autonegotiation restart
|
|
|
|
genphy_restart_aneg() can only restart autonegotiation on clause 22
|
|
PHYs. Add a phy_restart_aneg() function which selects between the
|
|
clause 22 and clause 45 restart functionality depending on the PHY
|
|
type.
|
|
|
|
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
|
---
|
|
|
|
--- a/drivers/net/phy/phy.c
|
|
+++ b/drivers/net/phy/phy.c
|
|
@@ -134,6 +134,24 @@ static int phy_config_interrupt(struct p
|
|
return 0;
|
|
}
|
|
|
|
+/**
|
|
+ * phy_restart_aneg - restart auto-negotiation
|
|
+ * @phydev: target phy_device struct
|
|
+ *
|
|
+ * Restart the autonegotiation on @phydev. Returns >= 0 on success or
|
|
+ * negative errno on error.
|
|
+ */
|
|
+static int phy_restart_aneg(struct phy_device *phydev)
|
|
+{
|
|
+ int ret;
|
|
+
|
|
+ if (phydev->is_c45)
|
|
+ ret = genphy_c45_restart_aneg(phydev);
|
|
+ else
|
|
+ ret = genphy_restart_aneg(phydev);
|
|
+
|
|
+ return ret;
|
|
+}
|
|
|
|
/**
|
|
* phy_aneg_done - return auto-negotiation status
|
|
@@ -1442,3 +1460,14 @@ int phy_ethtool_set_link_ksettings(struc
|
|
return phy_ethtool_ksettings_set(phydev, cmd);
|
|
}
|
|
EXPORT_SYMBOL(phy_ethtool_set_link_ksettings);
|
|
+
|
|
+int phy_ethtool_nway_reset(struct net_device *ndev)
|
|
+{
|
|
+ struct phy_device *phydev = ndev->phydev;
|
|
+
|
|
+ if (!phydev)
|
|
+ return -ENODEV;
|
|
+
|
|
+ return phy_restart_aneg(phydev);
|
|
+}
|
|
+EXPORT_SYMBOL(phy_ethtool_nway_reset);
|