Message ID | 01c6b6afb00c02a48fa99542c5b4c6a2c69092b0.1645443957.git.baruch@tkos.co.il (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | net: mdio-ipq4019: add delay after clock enable | expand |
On Mon, Feb 21, 2022 at 01:45:57PM +0200, Baruch Siach wrote: > From: Baruch Siach <baruch.siach@siklu.com> > > Experimentation shows that PHY detect might fail when the code attempts > MDIO bus read immediately after clock enable. Add delay to stabilize the > clock before bus access. > > PHY detect failure started to show after commit 7590fc6f80ac ("net: > mdio: Demote probed message to debug print") that removed coincidental > delay between clock enable and bus access. > > 10ms is meant to match the time it take to send the probed message over > UART at 115200 bps. This might be a far overshoot. > > Fixes: 23a890d493e3 ("net: mdio: Add the reset function for IPQ MDIO driver") > Signed-off-by: Baruch Siach <baruch.siach@siklu.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
Hello: This patch was applied to netdev/net.git (master) by David S. Miller <davem@davemloft.net>: On Mon, 21 Feb 2022 13:45:57 +0200 you wrote: > From: Baruch Siach <baruch.siach@siklu.com> > > Experimentation shows that PHY detect might fail when the code attempts > MDIO bus read immediately after clock enable. Add delay to stabilize the > clock before bus access. > > PHY detect failure started to show after commit 7590fc6f80ac ("net: > mdio: Demote probed message to debug print") that removed coincidental > delay between clock enable and bus access. > > [...] Here is the summary with links: - net: mdio-ipq4019: add delay after clock enable https://git.kernel.org/netdev/net/c/b6ad6261d277 You are awesome, thank you!
diff --git a/drivers/net/mdio/mdio-ipq4019.c b/drivers/net/mdio/mdio-ipq4019.c index 5f4cd24a0241..4eba5a91075c 100644 --- a/drivers/net/mdio/mdio-ipq4019.c +++ b/drivers/net/mdio/mdio-ipq4019.c @@ -200,7 +200,11 @@ static int ipq_mdio_reset(struct mii_bus *bus) if (ret) return ret; - return clk_prepare_enable(priv->mdio_clk); + ret = clk_prepare_enable(priv->mdio_clk); + if (ret == 0) + mdelay(10); + + return ret; } static int ipq4019_mdio_probe(struct platform_device *pdev)