Message ID | 20231118123205.266819-6-arinc.unal@arinc9.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | MT7530 DSA subdriver improvements | expand |
On Sat, Nov 18, 2023 at 03:31:55PM +0300, Arınç ÜNAL wrote: > There're two code paths for setting up port 5: > > mt7530_setup() > -> mt7530_setup_port5() > > mt753x_phylink_mac_config() > -> mt753x_mac_config() > -> mt7530_mac_config() > -> mt7530_setup_port5() > > Currently mt7530_setup_port5() from mt7530_setup() always runs. If port 5 > is used as a CPU, DSA, or user port, mt7530_setup_port5() from > mt753x_phylink_mac_config() won't run. That is because priv->p5_interface > set on mt7530_setup_port5() will match state->interface on > mt753x_phylink_mac_config() which will stop running mt7530_setup_port5() > again. > > Therefore, mt7530_setup_port5() will never run from > mt753x_phylink_mac_config(). > > Address this by not running mt7530_setup_port5() from mt7530_setup() if > port 5 is used as a CPU, DSA, or user port. This driver isn't in the > dsa_switches_apply_workarounds[] array so phylink will always be present. > > For the cases of PHY muxing or the port being disabled, call > mt7530_setup_port5() from mt7530_setup(). mt7530_setup_port5() from > mt753x_phylink_mac_config() won't run when port 5 is disabled or used for > PHY muxing as port 5 won't be defined on the devicetree. ... and this should state why this needs to happen - in other words, the commit message should state why is it critical that port 5 is always setup.
On 18.11.2023 17:41, Russell King (Oracle) wrote: > On Sat, Nov 18, 2023 at 03:31:55PM +0300, Arınç ÜNAL wrote: >> There're two code paths for setting up port 5: >> >> mt7530_setup() >> -> mt7530_setup_port5() >> >> mt753x_phylink_mac_config() >> -> mt753x_mac_config() >> -> mt7530_mac_config() >> -> mt7530_setup_port5() >> >> Currently mt7530_setup_port5() from mt7530_setup() always runs. If port 5 >> is used as a CPU, DSA, or user port, mt7530_setup_port5() from >> mt753x_phylink_mac_config() won't run. That is because priv->p5_interface >> set on mt7530_setup_port5() will match state->interface on >> mt753x_phylink_mac_config() which will stop running mt7530_setup_port5() >> again. >> >> Therefore, mt7530_setup_port5() will never run from >> mt753x_phylink_mac_config(). >> >> Address this by not running mt7530_setup_port5() from mt7530_setup() if >> port 5 is used as a CPU, DSA, or user port. This driver isn't in the >> dsa_switches_apply_workarounds[] array so phylink will always be present. >> >> For the cases of PHY muxing or the port being disabled, call >> mt7530_setup_port5() from mt7530_setup(). mt7530_setup_port5() from >> mt753x_phylink_mac_config() won't run when port 5 is disabled or used for >> PHY muxing as port 5 won't be defined on the devicetree. > > ... and this should state why this needs to happen - in other words, > the commit message should state why is it critical that port 5 is > always setup. Actually, port 5 must not always be setup. With patch 7, I explain this while preventing mt7530_setup_port5() from running if port 5 is disabled. Arınç
On Sat, Dec 02, 2023 at 11:36:03AM +0300, Arınç ÜNAL wrote: > On 18.11.2023 17:41, Russell King (Oracle) wrote: > > > For the cases of PHY muxing or the port being disabled, call > > > mt7530_setup_port5() from mt7530_setup(). mt7530_setup_port5() from > > > mt753x_phylink_mac_config() won't run when port 5 is disabled or used for > > > PHY muxing as port 5 won't be defined on the devicetree. > > > > ... and this should state why this needs to happen - in other words, > > the commit message should state why is it critical that port 5 is > > always setup. > > Actually, port 5 must not always be setup. With patch 7, I explain this > while preventing mt7530_setup_port5() from running if port 5 is disabled. > > Arınç Then change that last paragraph. You could say something like this: To keep the cases where port 5 isn't controlled by phylink working as before, we need to preserve the mt7530_setup_port5() call from mt7530_setup(). I think it's a case of saying too much, which sparks too many unresolved questions in the reader's mind, which are irrelevant for the purpose of this specific change: eliminating the overlap between DSA's setup() time and phylink.
On 7.12.2023 21:03, Vladimir Oltean wrote: > On Sat, Dec 02, 2023 at 11:36:03AM +0300, Arınç ÜNAL wrote: >> On 18.11.2023 17:41, Russell King (Oracle) wrote: >>>> For the cases of PHY muxing or the port being disabled, call >>>> mt7530_setup_port5() from mt7530_setup(). mt7530_setup_port5() from >>>> mt753x_phylink_mac_config() won't run when port 5 is disabled or used for >>>> PHY muxing as port 5 won't be defined on the devicetree. >>> >>> ... and this should state why this needs to happen - in other words, >>> the commit message should state why is it critical that port 5 is >>> always setup. >> >> Actually, port 5 must not always be setup. With patch 7, I explain this >> while preventing mt7530_setup_port5() from running if port 5 is disabled. >> >> Arınç > > Then change that last paragraph. You could say something like this: > > To keep the cases where port 5 isn't controlled by phylink working as > before, we need to preserve the mt7530_setup_port5() call from mt7530_setup(). > > I think it's a case of saying too much, which sparks too many unresolved > questions in the reader's mind, which are irrelevant for the purpose of > this specific change: eliminating the overlap between DSA's setup() time > and phylink. Will do, thanks.
diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 8623742b35ee..069b3dfca6fa 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2308,16 +2308,15 @@ mt7530_setup(struct dsa_switch *ds) return ret; /* Setup port 5 */ - priv->p5_intf_sel = P5_DISABLED; - interface = PHY_INTERFACE_MODE_NA; - if (!dsa_is_unused_port(ds, 5)) { priv->p5_intf_sel = P5_INTF_SEL_GMAC5; - ret = of_get_phy_mode(dsa_to_port(ds, 5)->dn, &interface); - if (ret && ret != -ENODEV) - return ret; } else { - /* Scan the ethernet nodes. look for GMAC1, lookup used phy */ + /* Scan the ethernet nodes. Look for GMAC1, lookup the used PHY. + * Set priv->p5_intf_sel to the appropriate value if PHY muxing + * is detected. + */ + interface = PHY_INTERFACE_MODE_NA; + for_each_child_of_node(dn, mac_np) { if (!of_device_is_compatible(mac_np, "mediatek,eth-mac")) @@ -2348,6 +2347,8 @@ mt7530_setup(struct dsa_switch *ds) of_node_put(phy_node); break; } + + mt7530_setup_port5(ds, interface); } #ifdef CONFIG_GPIOLIB @@ -2358,8 +2359,6 @@ mt7530_setup(struct dsa_switch *ds) } #endif /* CONFIG_GPIOLIB */ - mt7530_setup_port5(ds, interface); - /* Flush the FDB table */ ret = mt7530_fdb_cmd(priv, MT7530_FDB_FLUSH, NULL); if (ret < 0)
There're two code paths for setting up port 5: mt7530_setup() -> mt7530_setup_port5() mt753x_phylink_mac_config() -> mt753x_mac_config() -> mt7530_mac_config() -> mt7530_setup_port5() Currently mt7530_setup_port5() from mt7530_setup() always runs. If port 5 is used as a CPU, DSA, or user port, mt7530_setup_port5() from mt753x_phylink_mac_config() won't run. That is because priv->p5_interface set on mt7530_setup_port5() will match state->interface on mt753x_phylink_mac_config() which will stop running mt7530_setup_port5() again. Therefore, mt7530_setup_port5() will never run from mt753x_phylink_mac_config(). Address this by not running mt7530_setup_port5() from mt7530_setup() if port 5 is used as a CPU, DSA, or user port. This driver isn't in the dsa_switches_apply_workarounds[] array so phylink will always be present. For the cases of PHY muxing or the port being disabled, call mt7530_setup_port5() from mt7530_setup(). mt7530_setup_port5() from mt753x_phylink_mac_config() won't run when port 5 is disabled or used for PHY muxing as port 5 won't be defined on the devicetree. Do not set priv->p5_intf_sel to P5_DISABLED. It is already set to that when "priv" is allocated. Move setting the interface to a more specific location. It's supposed to be overwritten if PHY muxing is detected. Improve the comment which explains the process. Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> --- drivers/net/dsa/mt7530.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-)