Message ID | 20230406024541.3556305-1-michael.wei.hong.sit@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 8fbc10b995a506e173f1080dfa2764f232a65e02 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [RESEND,net,1/1] net: stmmac: check fwnode for phy device before scanning for phy | expand |
On Thu, 6 Apr 2023 10:45:41 +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. Why did you resend this?
> On 6 Apr 2023, at 10:30 PM, Jakub Kicinski <kuba@kernel.org> wrote: > > On Thu, 6 Apr 2023 10:45:41 +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. > > Why did you resend this? Fix a minor typo in commit message and also added the tags
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 6 Apr 2023 10:45:41 +0800 you 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. > > [...] Here is the summary with links: - [RESEND,net,1/1] net: stmmac: check fwnode for phy device before scanning for phy https://git.kernel.org/netdev/net/c/8fbc10b995a5 You are awesome, thank you!
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) {