All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joakim Zhang <qiangqing.zhang@nxp.com>
To: Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>
Cc: "peppe.cavallaro@st.com" <peppe.cavallaro@st.com>,
	"alexandre.torgue@foss.st.com" <alexandre.torgue@foss.st.com>,
	"joabreu@synopsys.com" <joabreu@synopsys.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"mcoquelin.stm32@gmail.com" <mcoquelin.stm32@gmail.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"andrew@lunn.ch" <andrew@lunn.ch>,
	"f.fainelli@gmail.com" <f.fainelli@gmail.com>,
	dl-linux-imx <linux-imx@nxp.com>
Subject: RE: [PATCH] net: stmmac: fix MAC not working when system resume back with WoL enabled
Date: Thu, 2 Sep 2021 07:35:00 +0000	[thread overview]
Message-ID: <DB8PR04MB679538A84C8FE245F16B200AE6CE9@DB8PR04MB6795.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <ce36eb26-a304-9dd8-3bee-4117929a5546@gmail.com>


Hi Heiner,

> -----Original Message-----
> From: Heiner Kallweit <hkallweit1@gmail.com>
> Sent: 2021年9月1日 23:40
> To: Joakim Zhang <qiangqing.zhang@nxp.com>; Russell King
> <linux@armlinux.org.uk>
> Cc: peppe.cavallaro@st.com; alexandre.torgue@foss.st.com;
> joabreu@synopsys.com; davem@davemloft.net; kuba@kernel.org;
> mcoquelin.stm32@gmail.com; netdev@vger.kernel.org; andrew@lunn.ch;
> f.fainelli@gmail.com; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH] net: stmmac: fix MAC not working when system resume
> back with WoL enabled
> 
> On 01.09.2021 12:21, Joakim Zhang wrote:
> >
> > Hi Russell,
> >
> >> -----Original Message-----
> >> From: Russell King <linux@armlinux.org.uk>
> >> Sent: 2021年9月1日 17:14
> >> To: Joakim Zhang <qiangqing.zhang@nxp.com>
> >> Cc: peppe.cavallaro@st.com; alexandre.torgue@foss.st.com;
> >> joabreu@synopsys.com; davem@davemloft.net; kuba@kernel.org;
> >> mcoquelin.stm32@gmail.com; netdev@vger.kernel.org; andrew@lunn.ch;
> >> f.fainelli@gmail.com; hkallweit1@gmail.com; dl-linux-imx
> >> <linux-imx@nxp.com>
> >> Subject: Re: [PATCH] net: stmmac: fix MAC not working when system
> >> resume back with WoL enabled
> >>
> >> On Wed, Sep 01, 2021 at 05:02:28PM +0800, Joakim Zhang wrote:
> >>> We can reproduce this issue with below steps:
> >>> 1) enable WoL on the host
> >>> 2) host system suspended
> >>> 3) remote client send out wakeup packets We can see that host system
> >>> resume back, but can't work, such as ping failed.
> >>>
> >>> After a bit digging, this issue is introduced by the commit
> >>> 46f69ded988d
> >>> ("net: stmmac: Use resolved link config in mac_link_up()"), which
> >>> use the finalised link parameters in mac_link_up() rather than the
> >>> parameters in mac_config().
> >>>
> >>> There are two scenarios for MAC suspend/resume:
> >>>
> >>> 1) MAC suspend with WoL disabled, stmmac_suspend() call
> >>> phylink_mac_change() to notify phylink machine that a change in MAC
> >>> state, then .mac_link_down callback would be invoked. Further, it
> >>> will call phylink_stop() to stop the phylink instance. When MAC
> >>> resume back, firstly phylink_start() is called to start the phylink
> >>> instance, then call phylink_mac_change() which will finally trigger
> >>> phylink machine to invoke .mac_config and .mac_link_up callback. All
> >>> is fine since configuration in these two callbacks will be initialized.
> >>>
> >>> 2) MAC suspend with WoL enabled, phylink_mac_change() will put link
> >>> down, but there is no phylink_stop() to stop the phylink instance,
> >>> so it will link up again, that means .mac_config and .mac_link_up
> >>> would be invoked before system suspended. After system resume back,
> >>> it will do DMA initialization and SW reset which let MAC lost the
> >>> hardware setting (i.e MAC_Configuration register(offset 0x0) is
> >>> reset). Since link is up before system suspended, so .mac_link_up
> >>> would not be invoked after system resume back, lead to there is no
> >>> chance to initialize the configuration in .mac_link_up callback, as
> >>> a result, MAC can't work any longer.
> >>>
> >>> Above description is what I found when debug this issue, this patch
> >>> is just revert broken patch to workaround it, at least make MAC work
> >>> when system resume back with WoL enabled.
> >>>
> >>> Said this is a workaround, since it has not resolve the issue completely.
> >>> I just move the speed/duplex/pause etc into .mac_config callback,
> >>> there are other configurations in .mac_link_up callback which also
> >>> need to be initialized to work for specific functions.
> >>
> >> NAK. Please read the phylink documentation. speed/duplex/pause is
> >> undefined in .mac_config.
> >
> > Speed/duplex/pause also the field of " struct phylink_link_state", so
> > these can be refered in .mac_config, please see the link which stmmac did
> before:
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Felix
> >
> ir.bootlin.com%2Flinux%2Fv5.4.143%2Fsource%2Fdrivers%2Fnet%2Fethernet%
> >
> 2Fstmicro%2Fstmmac%2Fstmmac_main.c%23L852&amp;data=04%7C01%7Cq
> iangqing
> > .zhang%40nxp.com%7C83fda179bf1d41fca42008d96d5ed3c3%7C686ea1d3b
> c2b4c6f
> >
> a92cd99c5c301635%7C0%7C0%7C637661076316192906%7CUnknown%7CTW
> FpbGZsb3d8
> >
> eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D
> %7C1
> >
> 000&amp;sdata=zM%2Fw1R%2BHkY067pg8wm2%2FS0zsLoBNQQ2TmdXWJat
> Ptes%3D&amp
> > ;reserved=0
> >
> >
> >> I think the problem here is that you're not calling phylink_stop()
> >> when WoL is enabled, which means phylink will continue to maintain
> >> the state as per the hardware state, and phylib will continue to run
> >> its state machine reporting the link state to phylink.
> >
> > Yes, I also tried do below code change, but the host would not be
> > wakeup, phylink_stop() would call phy_stop(), phylib would call
> > phy_suspend() finally, it will not suspend phy if it detect WoL enabled, so now
> I don't know why system can't be wakeup with this code change.
> >
> Follow-up question would be whether link breaks accidentally on suspend, or
> whether something fails on resume.When suspending, does the link break and
> link LEDs go off?

No, the LEDs is normal.

> Depending on LED configuration you may also see whether link speed is
> reduced on suspend.
> struct net_device has a member wol_enabled, does it make a difference if set
> it?

I have a try, there is no help. Have not clear why phylink_stop() will break WoL function,
lead it can't be waked up via magic packets.

Thanks.

Best Regards,
Joakim Zhang

  reply	other threads:[~2021-09-02  7:35 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-01  9:02 [PATCH] net: stmmac: fix MAC not working when system resume back with WoL enabled Joakim Zhang
2021-09-01  9:13 ` Russell King (Oracle)
2021-09-01 10:21   ` Joakim Zhang
2021-09-01 12:56     ` Russell King (Oracle)
2021-09-02  7:01       ` Joakim Zhang
2021-09-01 15:40     ` Heiner Kallweit
2021-09-02  7:35       ` Joakim Zhang [this message]
2021-09-01  9:21 ` Vladimir Oltean
2021-09-01 10:25   ` Joakim Zhang
2021-09-01 10:56     ` Vladimir Oltean
2021-09-01 11:42       ` Joakim Zhang
2021-09-01 13:25         ` Russell King (Oracle)
2021-09-02  7:28           ` Joakim Zhang
2021-09-02  8:32             ` Russell King (Oracle)
2021-09-02 10:26               ` Joakim Zhang
2021-09-02 10:49                 ` Russell King (Oracle)
2021-09-02 11:15                   ` Joakim Zhang
2021-09-02 12:24                     ` Andrew Lunn
2021-09-03  6:51                       ` Joakim Zhang
2021-09-03  8:01                         ` Russell King (Oracle)
2021-09-03  8:39                           ` Joakim Zhang
2021-09-03  9:32                             ` Russell King (Oracle)
2021-09-03 11:04                               ` Joakim Zhang
2021-09-03 12:01                                 ` Russell King (Oracle)
2021-09-03 20:12                                   ` Russell King - ARM Linux admin
2021-09-06  2:29                                     ` Joakim Zhang
2021-09-06  9:34                                       ` Russell King (Oracle)
2021-09-06 10:41                                         ` Joakim Zhang
2021-09-06 11:21                                           ` Russell King (Oracle)
2021-09-06 13:23                                             ` Andrew Lunn
2021-09-07  8:52                                             ` Russell King (Oracle)
2021-09-06  2:21                                   ` Joakim Zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DB8PR04MB679538A84C8FE245F16B200AE6CE9@DB8PR04MB6795.eurprd04.prod.outlook.com \
    --to=qiangqing.zhang@nxp.com \
    --cc=alexandre.torgue@foss.st.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=hkallweit1@gmail.com \
    --cc=joabreu@synopsys.com \
    --cc=kuba@kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux@armlinux.org.uk \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=peppe.cavallaro@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.