Re: [PATCH net-next v4 8/9] net: dsa: dsa_slave_phy_connect(): extend phy's flags with port specific phy flags

From: Oleksij Rempel
Date: Sun Jun 13 2021 - 23:37:37 EST


On Fri, Jun 11, 2021 at 04:26:33PM -0700, Florian Fainelli wrote:
>
>
> On 6/11/2021 12:24 PM, Vladimir Oltean wrote:
> > On Fri, Jun 11, 2021 at 09:15:26AM +0200, Oleksij Rempel wrote:
> >> This patch extends the flags of the phy that's being connected with the
> >> port specific flags of the switch port.
> >>
> >> This is needed to handle a port specific erratum of the KSZ8873 switch,
> >> which is added in a later patch.
> >>
> >> Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> >> ---
> >
> > What happens differently between having this patch and not having it?
>
> The current get_phy_flags() is only processed when we connect to a PHY
> via a designed phy-handle property via phylink_of_phy_connect((, but if
> we fallback on the internal MDIO bus created by a switch and take the
> dsa_slave_phy_connect() path then we would not be processing that flag
> and using it at PHY connection time. Oleksij, your proposed patch fails
> to check that dsa_switch_ops::get_phy_flags is actually non-NULL, how
> about this approach instead where we only fetch the flags once, and we
> deal with an option get_phy_flags callback too:

ok, sounds good.
Thank you.

> diff --git a/net/dsa/slave.c b/net/dsa/slave.c
> index d4756b920108..ba7866ec946f 100644
> --- a/net/dsa/slave.c
> +++ b/net/dsa/slave.c
> @@ -1749,7 +1749,7 @@ static void dsa_slave_phylink_fixed_state(struct
> phylink_config *config,
> }
>
> /* slave device setup
> *******************************************************/
> -static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr)
> +static int dsa_slave_phy_connect(struct net_device *slave_dev, int
> addr, u32 flags)
> {
> struct dsa_port *dp = dsa_slave_to_port(slave_dev);
> struct dsa_switch *ds = dp->ds;
> @@ -1760,6 +1760,8 @@ static int dsa_slave_phy_connect(struct net_device
> *slave_dev, int addr)
> return -ENODEV;
> }
>
> + slave_dev->phydev->dev_flags |= flags;
> +
> return phylink_connect_phy(dp->pl, slave_dev->phydev);
> }
>
> @@ -1804,7 +1806,7 @@ static int dsa_slave_phy_setup(struct net_device
> *slave_dev)
> /* We could not connect to a designated PHY or SFP, so
> try to
> * use the switch internal MDIO bus instead
> */
> - ret = dsa_slave_phy_connect(slave_dev, dp->index);
> + ret = dsa_slave_phy_connect(slave_dev, dp->index,
> phy_flags);
> if (ret) {
> netdev_err(slave_dev,
> "failed to connect to port %d: %d\n",
> --
> Florian
>
>

--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |