Message ID | 20230313080135.2952774-2-michael.wei.hong.sit@intel.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Fix PHY handle no longer parsing | expand |
Context | Check | Description |
---|---|---|
netdev/series_format | success | Posting correctly formatted |
netdev/tree_selection | success | Clearly marked for net |
netdev/fixes_present | success | Fixes tag present in non-next series |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 18 this patch: 18 |
netdev/cc_maintainers | success | CCed 12 of 12 maintainers |
netdev/build_clang | success | Errors and warnings before: 18 this patch: 18 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/deprecated_api | success | None detected |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | Fixes tag looks correct |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 18 this patch: 18 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 25 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
On Mon, Mar 13, 2023 at 04:01:34PM +0800, Michael Sit Wei Hong wrote: > phylink_fwnode_phy_connect returns 0 when set to MLO_AN_INBAND. > This causes the PHY handle parsing to skip and the PHY will not be attached > to the MAC. > > Add additional check for PHY handle parsing when set to MLO_AN_INBAND. > > Fixes: ab21cf920928 ("net: stmmac: make mdio register skips PHY scanning for fixed-link") > Signed-off-by: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com> > Signed-off-by: Lai Peter Jun Ann <peter.jun.ann.lai@intel.com> > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 8f543c3ab5c5..398adcd68ee8 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -1134,6 +1134,7 @@ 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 *fixed_node; > struct fwnode_handle *fwnode; > int ret; > > @@ -1141,13 +1142,16 @@ static int stmmac_init_phy(struct net_device *dev) > if (!fwnode) > fwnode = dev_fwnode(priv->device); > > - if (fwnode) > + if (fwnode) { > + fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link"); > + fwnode_handle_put(fixed_node); > ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); > + } > On the occasion, why not rewrite above to: if (!fwnode) ... else ... or: if(fwnode) ... else ? > /* Some DT bindings do not set-up the PHY handle. Let's try to > * manually parse it > */ > - if (!fwnode || ret) { > + if (!fwnode || ret || !fixed_node) { > int addr = priv->plat->phy_addr; > struct phy_device *phydev; > > -- > 2.34.1 >
> -----Original Message----- > From: Raczynski, Piotr <piotr.raczynski@intel.com> > Sent: Tuesday, March 14, 2023 4:39 PM > To: Sit, Michael Wei Hong <michael.wei.hong.sit@intel.com> > Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>; Alexandre > Torgue <alexandre.torgue@foss.st.com>; Jose Abreu > <joabreu@synopsys.com>; David S . Miller <davem@davemloft.net>; > Eric Dumazet <edumazet@google.com>; Jakub Kicinski > <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com>; Maxime > Coquelin <mcoquelin.stm32@gmail.com>; Ong, Boon Leong > <boon.leong.ong@intel.com>; netdev@vger.kernel.org; linux- > stm32@st-md-mailman.stormreply.com; linux-arm- > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; Looi, > Hong Aun <hong.aun.looi@intel.com>; Voon, Weifeng > <weifeng.voon@intel.com>; Lai, Peter Jun Ann > <peter.jun.ann.lai@intel.com> > Subject: Re: [PATCH net 1/2] net: stmmac: fix PHY handle parsing > > On Mon, Mar 13, 2023 at 04:01:34PM +0800, Michael Sit Wei Hong > wrote: > > phylink_fwnode_phy_connect returns 0 when set to > MLO_AN_INBAND. > > This causes the PHY handle parsing to skip and the PHY will not be > > attached to the MAC. > > > > Add additional check for PHY handle parsing when set to > MLO_AN_INBAND. > > > > Fixes: ab21cf920928 ("net: stmmac: make mdio register skips PHY > > scanning for fixed-link") > > Signed-off-by: Michael Sit Wei Hong > <michael.wei.hong.sit@intel.com> > > Signed-off-by: Lai Peter Jun Ann <peter.jun.ann.lai@intel.com> > > --- > > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 > ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > > b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > > index 8f543c3ab5c5..398adcd68ee8 100644 > > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > > @@ -1134,6 +1134,7 @@ 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 *fixed_node; > > struct fwnode_handle *fwnode; > > int ret; > > > > @@ -1141,13 +1142,16 @@ static int stmmac_init_phy(struct > net_device *dev) > > if (!fwnode) > > fwnode = dev_fwnode(priv->device); > > > > - if (fwnode) > > + if (fwnode) { > > + fixed_node = > fwnode_get_named_child_node(fwnode, "fixed-link"); > > + fwnode_handle_put(fixed_node); > > ret = phylink_fwnode_phy_connect(priv->phylink, > fwnode, 0); > > + } > > > > On the occasion, why not rewrite above to: > if (!fwnode) > ... > else > ... > > or: > if(fwnode) > ... > else > ? > The (!fwnode) serves as a NULL check, and if the fwnode is NULL, we try to populate it using dev_fwnode. If fwnode is then populated, then the if(fwnode) code will run. If fwnode is still NULL after dev_fwnode, fwnode_get_named_child_node will generate a kernel panic if no NULL check is present. > > /* Some DT bindings do not set-up the PHY handle. Let's try > to > > * manually parse it > > */ > > - if (!fwnode || ret) { > > + if (!fwnode || ret || !fixed_node) { > > int addr = priv->plat->phy_addr; > > struct phy_device *phydev; > > > > -- > > 2.34.1 > >
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 8f543c3ab5c5..398adcd68ee8 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1134,6 +1134,7 @@ 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 *fixed_node; struct fwnode_handle *fwnode; int ret; @@ -1141,13 +1142,16 @@ static int stmmac_init_phy(struct net_device *dev) if (!fwnode) fwnode = dev_fwnode(priv->device); - if (fwnode) + if (fwnode) { + fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link"); + fwnode_handle_put(fixed_node); ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0); + } /* Some DT bindings do not set-up the PHY handle. Let's try to * manually parse it */ - if (!fwnode || ret) { + if (!fwnode || ret || !fixed_node) { int addr = priv->plat->phy_addr; struct phy_device *phydev;