Message ID | 20211125024432.15809-1-dylan_hung@aspeedtech.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9dbe33cf371bd70330858370bdbc35c7668f00c3 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2] mdio: aspeed: Fix "Link is Down" issue | expand |
On Thu, Nov 25, 2021 at 10:44:32AM +0800, Dylan Hung wrote: > The issue happened randomly in runtime. The message "Link is Down" is > popped but soon it recovered to "Link is Up". > > The "Link is Down" results from the incorrect read data for reading the > PHY register via MDIO bus. The correct sequence for reading the data > shall be: > 1. fire the command > 2. wait for command done (this step was missing) > 3. wait for data idle > 4. read data from data register > > Fixes: f160e99462c6 ("net: phy: Add mdio-aspeed") > Cc: stable@vger.kernel.org > Reviewed-by: Joel Stanley <joel@jms.id.au> > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
On Thu, Nov 25, 2021 at 10:44:32AM +0800, Dylan Hung wrote: > The issue happened randomly in runtime. The message "Link is Down" is > popped but soon it recovered to "Link is Up". > > The "Link is Down" results from the incorrect read data for reading the > PHY register via MDIO bus. The correct sequence for reading the data > shall be: > 1. fire the command > 2. wait for command done (this step was missing) > 3. wait for data idle > 4. read data from data register > > Fixes: f160e99462c6 ("net: phy: Add mdio-aspeed") > Cc: stable@vger.kernel.org > Reviewed-by: Joel Stanley <joel@jms.id.au> > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Thanks.
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Thu, 25 Nov 2021 10:44:32 +0800 you wrote: > The issue happened randomly in runtime. The message "Link is Down" is > popped but soon it recovered to "Link is Up". > > The "Link is Down" results from the incorrect read data for reading the > PHY register via MDIO bus. The correct sequence for reading the data > shall be: > 1. fire the command > 2. wait for command done (this step was missing) > 3. wait for data idle > 4. read data from data register > > [...] Here is the summary with links: - [v2] mdio: aspeed: Fix "Link is Down" issue https://git.kernel.org/netdev/net/c/9dbe33cf371b You are awesome, thank you!
diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio-aspeed.c index cad820568f75..966c3b4ad59d 100644 --- a/drivers/net/mdio/mdio-aspeed.c +++ b/drivers/net/mdio/mdio-aspeed.c @@ -61,6 +61,13 @@ static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum) iowrite32(ctrl, ctx->base + ASPEED_MDIO_CTRL); + rc = readl_poll_timeout(ctx->base + ASPEED_MDIO_CTRL, ctrl, + !(ctrl & ASPEED_MDIO_CTRL_FIRE), + ASPEED_MDIO_INTERVAL_US, + ASPEED_MDIO_TIMEOUT_US); + if (rc < 0) + return rc; + rc = readl_poll_timeout(ctx->base + ASPEED_MDIO_DATA, data, data & ASPEED_MDIO_DATA_IDLE, ASPEED_MDIO_INTERVAL_US,