Re: [PATCH RFC net-next 05/12] net: dsa: bcm_sf2: convert to phylink_generic_validate()

Tom Lendacky
2021-12-06T16:02:35Z

On 12/4/21 8:52 AM, Russell King (Oracle) wrote:
> On Sat, Dec 04, 2021 at 08:59:12AM +0000, Russell King (Oracle) wrote:
>> On Fri, Dec 03, 2021 at 08:18:22PM -0800, Florian Fainelli wrote:

>
> Here's a patch for one of my suggestions above. Tom, I'd appreciate
> if you could look at this please. Thanks.

I think it's fine to move the setting down. The driver that I was working
on at the time only advertised 1000baseKX_Full for 1gpbs (which wasn't in
the array and why I added it), so I don't see an issue with moving it down.

A quick build and test showed that I was able to successfully connect at 1
gbps. I didn't dive any deeper than that.

Thanks,
Tom

>
> 8<===
> From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
> Subject: [PATCH net-next] net: phy: prefer 1000baseT over 1000baseKX
>
> The PHY settings table is supposed to be sorted by descending match
> priority - in other words, earlier entries are preferred over later
> entries.
>
> The order of 1000baseKX/Full and 1000baseT/Full is such that we
> prefer 1000baseKX/Full over 1000baseT/Full, but 1000baseKX/Full is
> a lot rarer than 1000baseT/Full, and thus is much less likely to
> be preferred.
>
> This causes phylink problems - it means a fixed link specifying a
> speed of 1G and full duplex gets an ethtool linkmode of 1000baseKX/Full
> rather than 1000baseT/Full as would be expected - and since we offer
> userspace a software emulation of a conventional copper PHY, we want
> to offer copper modes in preference to anything else. However, we do
> still want to allow the rarer modes as well.
>
> Hence, let's reorder these two modes to prefer copper.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
> drivers/net/phy/phy-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
> index 2870c33b8975..271fc01f7f7f 100644
> --- a/drivers/net/phy/phy-core.c
> +++ b/drivers/net/phy/phy-core.c
> @@ -162,11 +162,11 @@ static const struct phy_setting settings[] = {
> PHY_SETTING( 2500, FULL, 2500baseT_Full ),
> PHY_SETTING( 2500, FULL, 2500baseX_Full ),
> /* 1G */
> - PHY_SETTING( 1000, FULL, 1000baseKX_Full ),
> PHY_SETTING( 1000, FULL, 1000baseT_Full ),
> PHY_SETTING( 1000, HALF, 1000baseT_Half ),
> PHY_SETTING( 1000, FULL, 1000baseT1_Full ),
> PHY_SETTING( 1000, FULL, 1000baseX_Full ),
> + PHY_SETTING( 1000, FULL, 1000baseKX_Full ),
> /* 100M */
> PHY_SETTING( 100, FULL, 100baseT_Full ),
> PHY_SETTING( 100, FULL, 100baseT1_Full ),
>