netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Wei Fang <wei.fang@nxp.com>
Cc: Marek Vasut <marex@denx.de>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Andrew Lunn <andrew@lunn.ch>, Eric Dumazet <edumazet@google.com>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Oleksij Rempel <linux@rempel-privat.de>,
	Paolo Abeni <pabeni@redhat.com>,
	Russell King <linux@armlinux.org.uk>
Subject: Re: [PATCH] net: phy: at803x: Improve hibernation support on start up
Date: Wed, 9 Aug 2023 06:36:26 +0200	[thread overview]
Message-ID: <20230809043626.GG5736@pengutronix.de> (raw)
In-Reply-To: <AM5PR04MB31392C770BA3101BDFBA80318812A@AM5PR04MB3139.eurprd04.prod.outlook.com>

On Wed, Aug 09, 2023 at 02:27:12AM +0000, Wei Fang wrote:
> > >> Toggle hibernation mode OFF and ON to wake the PHY up and make it
> > >> generate clock on RX_CLK pin for about 10 seconds.
> > >> These clock are needed during start up by MACs like DWMAC in NXP
> > >> i.MX8M Plus to release their DMA from reset. After the MAC has
> > >> started up, the PHY can enter hibernation and disable the RX_CLK
> > >> clock, this poses no problem for the MAC.
> > >>
> > >> Originally, this issue has been described by NXP in commit
> > >> 9ecf04016c87 ("net: phy: at803x: add disable hibernation mode
> > >> support") but this approach fully disables the hibernation support
> > >> and takes away any power saving benefit. This patch instead makes the
> > >> PHY generate the clock on start up for 10 seconds, which should be
> > >> long enough for the EQoS MAC to release DMA from reset.
> > >>
> > >> Before this patch on i.MX8M Plus board with AR8031 PHY:
> > >> "
> > >> $ ifconfig eth1 up
> > >> [   25.576734] imx-dwmac 30bf0000.ethernet eth1: Register
> > >> MEM_TYPE_PAGE_POOL RxQ-0
> > >> [   25.658916] imx-dwmac 30bf0000.ethernet eth1: PHY [stmmac-1:00]
> > >> driver [Qualcomm Atheros AR8031/AR8033] (irq=38)
> > >> [   26.670276] imx-dwmac 30bf0000.ethernet: Failed to reset the dma
> > >> [   26.676322] imx-dwmac 30bf0000.ethernet eth1: stmmac_hw_setup:
> > >> DMA engine initialization failed
> > >> [   26.685103] imx-dwmac 30bf0000.ethernet eth1: __stmmac_open:
> > Hw
> > >> setup failed
> > >> ifconfig: SIOCSIFFLAGS: Connection timed out "
> > >>
> > >
> > > Have you reproduced this issue based on the upstream net-next or net
> > tree?
> > 
> > On current linux-next next-20230808 so 6.5.0-rc5 . As far as I can tell,
> > net-next is merged into this tree too.
> > 
> 
> > > If so, can this issue be reproduced? The reason why I ask this is
> > > because when I tried to reproduce this problem on net-next 6.3.0
> > > version, I found that it could not be reproduced (I did not disable
> > > hibernation mode when I reproduced this issue ). So I guess maybe other
> > patches in eqos driver fixed the issue.
> > 
> > This is what I use for testing:
> > 
> > - Make sure "qca,disable-hibernation-mode" is NOT present in PHY DT node
> Yes, I deleted this property when I reproduced this issue.
> 
> > - Boot the machine with NO ethernet cable plugged into the affected port
> >    (i.e. the EQoS port), this is important
> > - Make sure the EQoS MAC is not brought up e.g. by systemd-networkd or
> >    whatever other tool, I use busybox initramfs for testing with plain
> >    script as init (it mounts the various filesystems and runs /bin/sh)
> 
> It looks like something has been changed since I submitted the "disable hibernation
> mode " patch. In previous test, I only need to unplug the cable and then use ifconfig
> cmd to disable the interface, wait more than 10 seconds, then use ifconfig cmd to
> enable the interface.
> 
> > - Wait longer than 10 seconds
> > - If possible, measure AR8031 PHY pin 33 RX_CLK, wait for the RX_CLK to
> >    be turned OFF by the PHY (means PHY entered hibernation)
> > - ifconfig ethN up -- try to bring up the EQoS MAC <observe failure>
> > 
> > [...]
> 
> For the patch, I think your approach is better than mine, but I have a suggestion,
> is the following modification more appropriate?
> 
> --- a/drivers/net/phy/at803x.c
> +++ b/drivers/net/phy/at803x.c
> @@ -991,12 +991,28 @@ static int at8031_pll_config(struct phy_device *phydev)
>  static int at803x_hibernation_mode_config(struct phy_device *phydev)
>  {
>         struct at803x_priv *priv = phydev->priv;
> +       int ret;
> 
>         /* The default after hardware reset is hibernation mode enabled. After
>          * software reset, the value is retained.
>          */
> -       if (!(priv->flags & AT803X_DISABLE_HIBERNATION_MODE))
> -               return 0;
> +       if (!(priv->flags & AT803X_DISABLE_HIBERNATION_MODE)) {
> +               /* Toggle hibernation mode OFF and ON to wake the PHY up and
> +                * make it generate clock on RX_CLK pin for about 10 seconds.
> +                * These clock are needed during start up by MACs like DWMAC
> +                * in NXP i.MX8M Plus to release their DMA from reset. After
> +                * the MAC has started up, the PHY can enter hibernation and
> +                * disable the RX_CLK clock, this poses no problem for the MAC.
> +                */
> +               ret = at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_HIB_CTRL,
> +                                           AT803X_DEBUG_HIB_CTRL_PS_HIB_EN, 0);
> +               if (ret < 0)
> +                       return ret;
> +
> +               return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_HIB_CTRL,
> +                                            AT803X_DEBUG_HIB_CTRL_PS_HIB_EN,
> +                                            AT803X_DEBUG_HIB_CTRL_PS_HIB_EN);
> +       }
> 
>         return at803x_debug_reg_mask(phydev, AT803X_DEBUG_REG_HIB_CTRL,

Hm.. how about officially defining this PHY as the clock provider and
disable PHY automatic hibernation as long as clock is acquired?

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

  reply	other threads:[~2023-08-09  4:36 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-04 17:58 [PATCH] net: phy: at803x: Improve hibernation support on start up Marek Vasut
2023-08-08  8:44 ` Wei Fang
2023-08-08 18:37   ` Marek Vasut
2023-08-09  2:27     ` Wei Fang
2023-08-09  4:36       ` Oleksij Rempel [this message]
2023-08-09  5:37         ` Wei Fang
2023-08-09  6:08           ` Oleksij Rempel
2023-08-09  8:43             ` Russell King (Oracle)
2023-08-10 10:30               ` Russell King (Oracle)
2023-12-14  8:13                 ` Romain Gantois
2023-12-14 10:46                   ` Marek Vasut
2023-12-14 16:49                   ` Russell King (Oracle)
2023-12-15  8:22                     ` Romain Gantois
2023-08-10  3:28             ` Wei Fang
2023-08-10  9:08               ` Russell King (Oracle)
2023-08-09 13:40           ` Andrew Lunn
2023-08-09 21:34             ` Marek Vasut
2023-08-09 22:06               ` Andrew Lunn
2023-08-10  0:49                 ` Marek Vasut
2023-08-10  4:32                   ` Oleksij Rempel
2023-08-10 10:10                     ` Russell King (Oracle)
2023-08-10 10:01                   ` Russell King (Oracle)
2023-08-10 10:34                     ` Russell King (Oracle)
2023-08-10 12:51                       ` Oleksij Rempel
2023-08-10 13:16                         ` Russell King (Oracle)
2023-08-10 13:49                           ` Andrew Lunn
2023-08-10 13:54                             ` Russell King (Oracle)
2023-08-10 14:23                               ` Andrew Lunn
2023-08-10 14:36                                 ` Russell King (Oracle)
2023-08-09 23:15               ` Russell King (Oracle)
2023-08-10 10:34                 ` Russell King (Oracle)
2023-08-10  3:38             ` Wei Fang

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=20230809043626.GG5736@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@rempel-privat.de \
    --cc=marex@denx.de \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=wei.fang@nxp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).