From: "Mark A. Greer" <mgreer@xxxxxxxxxxxxxxx> Problem: -------- When resuming from a Suspend-to-RAM event, the eth0 device (davinci emac/mdio) on am35xx boards wouldn't work and the following error message appeared on the console: "net eth0: could not connect to phy davinci_mdio-0:00" Cause: ------ When davinci_emac_resume() calls emac_dev_open() which ultimately calls davinci_mdio_read(), the 'data->suspended' flag in davinci_mdio.c is still set to 'true'. This causes davinci_mdio_read() to fail which ripples back up the call chain causing davinci_emac_resume() to fail. The reason 'data->suspended' is still set to 'true' is that davinci_mdio_resume() hasn't been called yet as it should have been. davinci_mdio_resume() must be called before davinci_emac_resume(). Solution: --------- Register the "davinci_mdio" platform device before registering the "davinci_emac" platform device so davinci_mdio_resume() is called before davinci_emac_resume() and eth0 can resume. Signed-off-by: Mark A. Greer <mgreer@xxxxxxxxxxxxxxx> --- arch/arm/mach-omap2/am35xx-emac.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-omap2/am35xx-emac.c b/arch/arm/mach-omap2/am35xx-emac.c index 1f97e74..d23bd6c 100644 --- a/arch/arm/mach-omap2/am35xx-emac.c +++ b/arch/arm/mach-omap2/am35xx-emac.c @@ -97,11 +97,6 @@ void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) am35xx_emac_pdata.rmii_en = rmii_en; am35xx_emac_mdio_pdata.bus_freq = mdio_bus_freq; - err = platform_device_register(&am35xx_emac_device); - if (err) { - pr_err("AM35x: failed registering EMAC device: %d\n", err); - return; - } err = platform_device_register(&am35xx_emac_mdio_device); if (err) { @@ -110,6 +105,12 @@ void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) return; } + err = platform_device_register(&am35xx_emac_device); + if (err) { + pr_err("AM35x: failed registering EMAC device: %d\n", err); + return; + } + regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); regval = regval & (~(AM35XX_CPGMACSS_SW_RST)); omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET); -- 1.7.9.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html