[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210215144756.76846c9b@nic.cz>
Date: Mon, 15 Feb 2021 14:47:56 +0100
From: Marek Behun <marek.behun@....cz>
To: Nathan Rossi <nathan@...hanrossi.com>
Cc: netdev@...r.kernel.org, Nathan Rossi <nathan.rossi@...i.com>,
Andrew Lunn <andrew@...n.ch>,
Vivien Didelot <vivien.didelot@...il.com>,
Florian Fainelli <f.fainelli@...il.com>,
Vladimir Oltean <olteanv@...il.com>,
"David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Russell King <linux@...linux.org.uk>
Subject: Re: [PATCH] net: dsa: mv88e6xxx: prevent 2500BASEX mode override
On Mon, 15 Feb 2021 06:15:59 +0000
Nathan Rossi <nathan@...hanrossi.com> wrote:
> diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
> index 54aa942eed..5c52906b29 100644
> --- a/drivers/net/dsa/mv88e6xxx/chip.c
> +++ b/drivers/net/dsa/mv88e6xxx/chip.c
> @@ -650,6 +650,13 @@ static void mv88e6xxx_validate(struct dsa_switch *ds, int port,
> if (chip->info->ops->phylink_validate)
> chip->info->ops->phylink_validate(chip, port, mask, state);
>
> + /* Advertise 2500BASEX only if 1000BASEX is not configured, this
> + * prevents phylink_helper_basex_speed from always overriding the
> + * 1000BASEX mode since auto negotiation is always enabled.
> + */
> + if (state->interface == PHY_INTERFACE_MODE_1000BASEX)
> + phylink_clear(mask, 2500baseX_Full);
> +
I don't quite like this. This problem should be either solved in
phylink_helper_basex_speed() or somewhere in the mv88e6xxx code, but near
the call to phylink_helper_basex_speed().
Putting a solution to the behaviour of phylink_helper_basex_speed() it
into the validate() method when phylink_helper_basex_speed() is called
from a different place will complicate debugging in the future. If
we start solving problems in this kind of way, the driver will become
totally unreadable, IMO.
Marek
Powered by blists - more mailing lists