Message ID | 20230405093945.3549491-1-michael.wei.hong.sit@intel.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,1/1] net: stmmac: check fwnode for phy device before scanning for phy | expand |
On 4/5/23 11:39, Michael Sit Wei Hong wrote: > Some DT devices already have phy device configured in the DT/ACPI. > Current implementation scans for a phy unconditionally even though > there is a phy listed in the DT/ACPI and already attached. > > We should check the fwnode if there is any phy device listed in > fwnode and decide whether to scan for a phy to attach to.y > > Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") > Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> > --- Works fine on ARC HSDK board. Tested-by: Shahab Vahedi <shahab@synopsys.com>
Cc Vineet Gupta On 4/5/23 12:07, Shahab Vahedi wrote: > On 4/5/23 11:39, Michael Sit Wei Hong wrote: >> Some DT devices already have phy device configured in the DT/ACPI. >> Current implementation scans for a phy unconditionally even though >> there is a phy listed in the DT/ACPI and already attached. >> >> We should check the fwnode if there is any phy device listed in >> fwnode and decide whether to scan for a phy to attach to.y >> >> Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> >> Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") >> Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> >> --- > > Works fine on ARC HSDK board. > Tested-by: Shahab Vahedi <shahab@synopsys.com> >
On Wed, Apr 05, 2023 at 05:39:45PM +0800, Michael Sit Wei Hong wrote: > Some DT devices already have phy device configured in the DT/ACPI. > Current implementation scans for a phy unconditionally even though > there is a phy listed in the DT/ACPI and already attached. > > We should check the fwnode if there is any phy device listed in > fwnode and decide whether to scan for a phy to attach to.y > > Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Suggested-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> > Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") > Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index d41a5f92aee7..7ca9be7bec06 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -1134,22 +1134,26 @@ static void stmmac_check_pcs_mode(struct stmmac_priv *priv) > static int stmmac_init_phy(struct net_device *dev) > { > struct stmmac_priv *priv = netdev_priv(dev); > + struct fwnode_handle *phy_fwnode; > struct fwnode_handle *fwnode; > - bool phy_needed; > int ret; > > + if (!phylink_expects_phy(priv->phylink)) > + return 0; > + > fwnode = of_fwnode_handle(priv->plat->phylink_node); > if (!fwnode) > fwnode = dev_fwnode(priv->device); > > if (fwnode) > - ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); > + phy_fwnode = fwnode_get_phy_node(fwnode); > + else > + phy_fwnode = NULL; > > - phy_needed = phylink_expects_phy(priv->phylink); > /* Some DT bindings do not set-up the PHY handle. Let's try to > * manually parse it > */ > - if (!fwnode || phy_needed || ret) { > + if (!phy_fwnode || IS_ERR(phy_fwnode)) { > int addr = priv->plat->phy_addr; > struct phy_device *phydev; > > @@ -1165,6 +1169,9 @@ static int stmmac_init_phy(struct net_device *dev) > } > > ret = phylink_connect_phy(priv->phylink, phydev); > + } else { > + fwnode_handle_put(phy_fwnode); > + ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); > } > > if (!priv->plat->pmt) { LGTM, thanks for taking on board my suggestion.
On Wed, Apr 5, 2023 at 11:40 AM Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> wrote: > > Some DT devices already have phy device configured in the DT/ACPI. > Current implementation scans for a phy unconditionally even though > there is a phy listed in the DT/ACPI and already attached. > > We should check the fwnode if there is any phy device listed in > fwnode and decide whether to scan for a phy to attach to.y > > Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") > Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> This also works great on my X96 Air (and I presume it will fix all other Amlogic boards): Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Thanks a lot for being so quick with this fix!
On 05.04.2023 12:07, Shahab Vahedi wrote: > On 4/5/23 11:39, Michael Sit Wei Hong wrote: >> Some DT devices already have phy device configured in the DT/ACPI. >> Current implementation scans for a phy unconditionally even though >> there is a phy listed in the DT/ACPI and already attached. >> >> We should check the fwnode if there is any phy device listed in >> fwnode and decide whether to scan for a phy to attach to.y >> >> Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> >> Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") >> Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> >> --- > Works fine on ARC HSDK board. > Tested-by: Shahab Vahedi <shahab@synopsys.com> Tested-by: Marek Szyprowski Works fine on Khadas VIM3, Odroid-C4 and Odroid-M1. Best regards
> On 05.04.2023 12:07, Shahab Vahedi wrote: > > On 4/5/23 11:39, Michael Sit Wei Hong wrote: > >> Some DT devices already have phy device configured in the DT/ACPI. > >> Current implementation scans for a phy unconditionally even though > >> there is a phy listed in the DT/ACPI and already attached. > >> > >> We should check the fwnode if there is any phy device listed in > >> fwnode and decide whether to scan for a phy to attach to.y > >> > >> Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > >> Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a > >> PHY") > >> Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> > >> --- > > Works fine on ARC HSDK board. > > Tested-by: Shahab Vahedi <shahab@synopsys.com> > > Tested-by: Marek Szyprowski > > Works fine on Khadas VIM3, Odroid-C4 and Odroid-M1. > > Best regards > -- > Marek Szyprowski, PhD > Samsung R&D Institute Poland Please fix the minor typo at the end of your commit message. Regards, Hong Aun
On Wed, Apr 05, 2023 at 05:39:45PM +0800, Michael Sit Wei Hong wrote: > Some DT devices already have phy device configured in the DT/ACPI. > Current implementation scans for a phy unconditionally even though > there is a phy listed in the DT/ACPI and already attached. > > We should check the fwnode if there is any phy device listed in > fwnode and decide whether to scan for a phy to attach to.y > > Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") > Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> > Tested-by: Shahab Vahedi <shahab@synopsys.com> > Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > Tested-by: Marek Szyprowski Tested-by: Guenter Roeck <linux@roeck-us.net> Guenter
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index d41a5f92aee7..7ca9be7bec06 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1134,22 +1134,26 @@ static void stmmac_check_pcs_mode(struct stmmac_priv *priv) static int stmmac_init_phy(struct net_device *dev) { struct stmmac_priv *priv = netdev_priv(dev); + struct fwnode_handle *phy_fwnode; struct fwnode_handle *fwnode; - bool phy_needed; int ret; + if (!phylink_expects_phy(priv->phylink)) + return 0; + fwnode = of_fwnode_handle(priv->plat->phylink_node); if (!fwnode) fwnode = dev_fwnode(priv->device); if (fwnode) - ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); + phy_fwnode = fwnode_get_phy_node(fwnode); + else + phy_fwnode = NULL; - phy_needed = phylink_expects_phy(priv->phylink); /* Some DT bindings do not set-up the PHY handle. Let's try to * manually parse it */ - if (!fwnode || phy_needed || ret) { + if (!phy_fwnode || IS_ERR(phy_fwnode)) { int addr = priv->plat->phy_addr; struct phy_device *phydev; @@ -1165,6 +1169,9 @@ static int stmmac_init_phy(struct net_device *dev) } ret = phylink_connect_phy(priv->phylink, phydev); + } else { + fwnode_handle_put(phy_fwnode); + ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); } if (!priv->plat->pmt) {
Some DT devices already have phy device configured in the DT/ACPI. Current implementation scans for a phy unconditionally even though there is a phy listed in the DT/ACPI and already attached. We should check the fwnode if there is any phy device listed in fwnode and decide whether to scan for a phy to attach to.y Reported-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Fixes: fe2cfbc96803 ("net: stmmac: check if MAC needs to attach to a PHY") Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)