lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAMuHMdWAk9kJBGGq9K-RnC0HFZk1XbaosTBO2OW1kpYFPh1Mqg@mail.gmail.com> Date: Thu, 12 Oct 2023 14:35:06 +0200 From: Geert Uytterhoeven <geert@...ux-m68k.org> To: Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com> Cc: s.shtylyov@....ru, davem@...emloft.net, edumazet@...gle.com, kuba@...nel.org, pabeni@...hat.com, netdev@...r.kernel.org, linux-renesas-soc@...r.kernel.org Subject: Re: [PATCH net-next] rswitch: Add PM ops Hi Shimoda-san, On Thu, Oct 12, 2023 at 2:16 PM Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com> wrote: > Add PM ops for Suspend to Idle. When the system suspended, > the Ethernet Serdes's clock will be stopped. So, this driver needs > to re-initialize the Ethernet Serdes by phy_init() in > renesas_eth_sw_resume(). Otherwise, timeout happened in phy_power_on(). > > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com> Thanks for your patch! > --- a/drivers/net/ethernet/renesas/rswitch.c > +++ b/drivers/net/ethernet/renesas/rswitch.c > @@ -17,6 +17,7 @@ > #include <linux/of_net.h> > #include <linux/phy/phy.h> > #include <linux/platform_device.h> > +#include <linux/pm.h> > #include <linux/pm_runtime.h> > #include <linux/rtnetlink.h> > #include <linux/slab.h> > @@ -1315,6 +1316,7 @@ static int rswitch_phy_device_init(struct rswitch_device *rdev) > if (!phydev) > goto out; > __set_bit(rdev->etha->phy_interface, phydev->host_interfaces); > + phydev->mac_managed_pm = true; > > phydev = of_phy_connect(rdev->ndev, phy, rswitch_adjust_link, 0, > rdev->etha->phy_interface); > @@ -1991,11 +1993,52 @@ static void renesas_eth_sw_remove(struct platform_device *pdev) > platform_set_drvdata(pdev, NULL); > } > > +static int __maybe_unused renesas_eth_sw_suspend(struct device *dev) > +{ > + struct rswitch_private *priv = dev_get_drvdata(dev); > + struct net_device *ndev; > + int i; unsigned int (also below) > + > + rswitch_for_each_enabled_port(priv, i) { > + ndev = priv->rdev[i]->ndev; > + if (netif_running(ndev)) { > + netif_device_detach(ndev); > + rswitch_stop(ndev); > + } > + if (priv->rdev[i]->serdes->init_count) > + phy_exit(priv->rdev[i]->serdes); If !init_count, the PHY was not initialized before suspending? ... > + } > + > + return 0; > +} > + > +static int __maybe_unused renesas_eth_sw_resume(struct device *dev) > +{ > + struct rswitch_private *priv = dev_get_drvdata(dev); > + struct net_device *ndev; > + int i; > + > + rswitch_for_each_enabled_port(priv, i) { > + phy_init(priv->rdev[i]->serdes); ... while it is always initialized after resuming? Is that intentional, or should the pre-suspend state be preserved? > + ndev = priv->rdev[i]->ndev; > + if (netif_running(ndev)) { > + rswitch_open(ndev); > + netif_device_attach(ndev); > + } > + } > + > + return 0; > +} > + > +static SIMPLE_DEV_PM_OPS(renesas_eth_sw_pm_ops, renesas_eth_sw_suspend, > + renesas_eth_sw_resume); Please use DEFINE_SIMPLE_DEV_PM_OPS() instead, so you can drop the __maybe_unused tags from the callbacks. > + > static struct platform_driver renesas_eth_sw_driver_platform = { > .probe = renesas_eth_sw_probe, > .remove_new = renesas_eth_sw_remove, > .driver = { > .name = "renesas_eth_sw", > + .pm = &renesas_eth_sw_pm_ops, pm_sleep_ptr(...) > .of_match_table = renesas_eth_sw_of_table, > } > }; Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@...ux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Powered by blists - more mailing lists