diff mbox series

sfc: Export fibre-specific link modes for 1/10G

Message ID 20211018183709.124744-1-erik@kryo.se (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series sfc: Export fibre-specific link modes for 1/10G | expand

Checks

Context Check Description
netdev/cover_letter success Single patches do not need cover letters
netdev/fixes_present success Fixes tag not required for -next series
netdev/patch_count success Link
netdev/tree_selection success Guessed tree name to be net-next
netdev/subject_prefix warning Target tree name not specified in the subject
netdev/cc_maintainers success CCed 5 of 5 maintainers
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/module_param success Was 0 now: 0
netdev/build_32bit fail Errors and warnings before: 4 this patch: 4
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success No Fixes tag
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 24 lines checked
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/header_inline success No static functions without inline keyword in header files

Commit Message

Erik Ekman Oct. 18, 2021, 6:37 p.m. UTC
These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
for 1000BaseX and missing 10G link modes") back in 2016.

Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.

Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
Before:

$ ethtool ext
Settings for ext:
	Supported ports: [ FIBRE ]
	Supported link modes:   1000baseT/Full
	                        10000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  Not reported
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: No
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: off
	Port: FIBRE
	PHYAD: 255
	Transceiver: internal
        Current message level: 0x000020f7 (8439)
                               drv probe link ifdown ifup rx_err tx_err hw
	Link detected: yes

After:

$ ethtool ext
Settings for ext:
	Supported ports: [ FIBRE ]
	Supported link modes:   1000baseX/Full
	                        10000baseCR/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  Not reported
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: No
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: off
	Port: FIBRE
	PHYAD: 255
	Transceiver: internal
	Supports Wake-on: g
	Wake-on: d
        Current message level: 0x000020f7 (8439)
                               drv probe link ifdown ifup rx_err tx_err hw
	Link detected: yes

Signed-off-by: Erik Ekman <erik@kryo.se>
---
 drivers/net/ethernet/sfc/mcdi_port_common.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Andrew Lunn Oct. 19, 2021, 3:31 p.m. UTC | #1
On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> for 1000BaseX and missing 10G link modes") back in 2016.
> 
> Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> 
> Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.

Did you test with a Copper SFP modules? 

> +++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
> @@ -133,9 +133,9 @@ void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
>  	case MC_CMD_MEDIA_QSFP_PLUS:
>  		SET_BIT(FIBRE);
>  		if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
> -			SET_BIT(1000baseT_Full);
> +			SET_BIT(1000baseX_Full);

I'm wondering if you should have both? The MAC is doing 1000BaseX. But
it could then be connected to a copper PHY which then does
1000baseT_Full? At 1G, it is however more likely to be using SGMII,
not 1000BaseX.

    Andrew
Martin Habets Oct. 19, 2021, 3:53 p.m. UTC | #2
On Tue, Oct 19, 2021 at 05:31:52PM +0200, Andrew Lunn wrote:
> On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > for 1000BaseX and missing 10G link modes") back in 2016.
> > 
> > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> > 
> > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> 
> Did you test with a Copper SFP modules? 
> 
> > +++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
> > @@ -133,9 +133,9 @@ void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
> >  	case MC_CMD_MEDIA_QSFP_PLUS:
> >  		SET_BIT(FIBRE);
> >  		if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
> > -			SET_BIT(1000baseT_Full);
> > +			SET_BIT(1000baseX_Full);
> 
> I'm wondering if you should have both? The MAC is doing 1000BaseX. But
> it could then be connected to a copper PHY which then does
> 1000baseT_Full? At 1G, it is however more likely to be using SGMII,
> not 1000BaseX.

Yes, they should both be set. We actually did a 10Gbase-T version of Siena,
the SFN51x1T.

Martin
Erik Ekman Oct. 19, 2021, 5:34 p.m. UTC | #3
On Tue, 19 Oct 2021 at 17:53, Martin Habets <habetsm.xilinx@gmail.com> wrote:
>
> On Tue, Oct 19, 2021 at 05:31:52PM +0200, Andrew Lunn wrote:
> > On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > > for 1000BaseX and missing 10G link modes") back in 2016.
> > >
> > > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> > >
> > > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> >
> > Did you test with a Copper SFP modules?
> >

I have tested it with a copper SFP PHY at 1G and that works fine.
I don't have the hardware to test copper 10G (RJ45).

> > > +++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
> > > @@ -133,9 +133,9 @@ void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
> > >     case MC_CMD_MEDIA_QSFP_PLUS:
> > >             SET_BIT(FIBRE);
> > >             if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
> > > -                   SET_BIT(1000baseT_Full);
> > > +                   SET_BIT(1000baseX_Full);
> >
> > I'm wondering if you should have both? The MAC is doing 1000BaseX. But
> > it could then be connected to a copper PHY which then does
> > 1000baseT_Full? At 1G, it is however more likely to be using SGMII,
> > not 1000BaseX.

Yes, we can return both.

Similarly, is there a reason only CR modes are set for fiber ports,
when I expect LR/SR/etc to work as well?
I can set the modes for 10G similar to the example in 5711a98221443
("net: ethtool: add support
for 1000BaseX and missing 10G link modes"): CR/SR/LR/ER
I inserted a LR SFP+ module and ethtool -m could list its settings at least.

>
> Yes, they should both be set. We actually did a 10Gbase-T version of Siena,
> the SFN51x1T.
>

For the baseT-version of the cards the supported modes are set further
down in the file
(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/sfc/mcdi_port_common.c#n149),
so they are not affected by this change.

Thanks
/Erik
Erik Ekman Oct. 19, 2021, 5:51 p.m. UTC | #4
On Tue, 19 Oct 2021 at 19:34, Erik Ekman <erik@kryo.se> wrote:
>
> On Tue, 19 Oct 2021 at 17:53, Martin Habets <habetsm.xilinx@gmail.com> wrote:
> >
> > On Tue, Oct 19, 2021 at 05:31:52PM +0200, Andrew Lunn wrote:
> > > On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > > > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > > > for 1000BaseX and missing 10G link modes") back in 2016.
> > > >
> > > > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> > > >
> > > > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> > >
> > > Did you test with a Copper SFP modules?
> > >
>
> I have tested it with a copper SFP PHY at 1G and that works fine.
> I don't have the hardware to test copper 10G (RJ45).
>
> > > > +++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
> > > > @@ -133,9 +133,9 @@ void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
> > > >     case MC_CMD_MEDIA_QSFP_PLUS:
> > > >             SET_BIT(FIBRE);
> > > >             if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
> > > > -                   SET_BIT(1000baseT_Full);
> > > > +                   SET_BIT(1000baseX_Full);
> > >
> > > I'm wondering if you should have both? The MAC is doing 1000BaseX. But
> > > it could then be connected to a copper PHY which then does
> > > 1000baseT_Full? At 1G, it is however more likely to be using SGMII,
> > > not 1000BaseX.

If you mean that the card has only copper phys on the card, then a
different case in the switch statement is run
(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/sfc/mcdi_port_common.c#n149).
Should we still return both if the only baseT support is via an SFP module?

>
> Yes, we can return both.
>
> Similarly, is there a reason only CR modes are set for fiber ports,
> when I expect LR/SR/etc to work as well?
> I can set the modes for 10G similar to the example in 5711a98221443
> ("net: ethtool: add support
> for 1000BaseX and missing 10G link modes"): CR/SR/LR/ER
> I inserted a LR SFP+ module and ethtool -m could list its settings at least.
>
> >
> > Yes, they should both be set. We actually did a 10Gbase-T version of Siena,
> > the SFN51x1T.
> >
>
> For the baseT-version of the cards the supported modes are set further
> down in the file
> (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/sfc/mcdi_port_common.c#n149),
> so they are not affected by this change.
>
> Thanks
> /Erik
Andrew Lunn Oct. 19, 2021, 6:27 p.m. UTC | #5
On Tue, Oct 19, 2021 at 07:34:16PM +0200, Erik Ekman wrote:
> On Tue, 19 Oct 2021 at 17:53, Martin Habets <habetsm.xilinx@gmail.com> wrote:
> >
> > On Tue, Oct 19, 2021 at 05:31:52PM +0200, Andrew Lunn wrote:
> > > On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > > > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > > > for 1000BaseX and missing 10G link modes") back in 2016.
> > > >
> > > > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> > > >
> > > > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> > >
> > > Did you test with a Copper SFP modules?
> > >
> 
> I have tested it with a copper SFP PHY at 1G and that works fine.

Meaning ethtool returns 1000BaseT_FULL? Does the SFP also support
10/100? Does ethtool list 10BaseT_Half, 10BaseT_Full, etc.

	Andrew
Erik Ekman Oct. 19, 2021, 6:55 p.m. UTC | #6
On Tue, 19 Oct 2021 at 20:27, Andrew Lunn <andrew@lunn.ch> wrote:
>
> On Tue, Oct 19, 2021 at 07:34:16PM +0200, Erik Ekman wrote:
> > On Tue, 19 Oct 2021 at 17:53, Martin Habets <habetsm.xilinx@gmail.com> wrote:
> > >
> > > On Tue, Oct 19, 2021 at 05:31:52PM +0200, Andrew Lunn wrote:
> > > > On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > > > > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > > > > for 1000BaseX and missing 10G link modes") back in 2016.
> > > > >
> > > > > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> > > > >
> > > > > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> > > >
> > > > Did you test with a Copper SFP modules?
> > > >
> >
> > I have tested it with a copper SFP PHY at 1G and that works fine.
>
> Meaning ethtool returns 1000BaseT_FULL? Does the SFP also support
> 10/100? Does ethtool list 10BaseT_Half, 10BaseT_Full, etc.
>

The supported modes do not change based on the module used.  From the
code it looks to only be based on the phy capability bits
(MC_CMD_PHY_CAP_1000FDX_LBN, MC_CMD_PHY_CAP_10000FDX_LBN).
The copper SFP does not link at 100Mbps, only at 1Gbps (from my testing).

From the 'Solarflare Server Adapter User Guide': "SFP 1000BASE‐T
module, Autonegotiation: No, Speed:  1G, Comment: These modules
support only 1G and will not link up at 100Mbps"
10G SFP+ Base-T modules are not mentioned, maybe they did not exist
back then. Do you think the 1000BaseT_Full should be used because of
this?

Reading the user guide further I see lists of supported SFP+ -LR and
-SR modules as well as QSFP+ SR4 modules so I am planning to add them.

/Erik
Martin Habets Oct. 19, 2021, 7:18 p.m. UTC | #7
On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> for 1000BaseX and missing 10G link modes") back in 2016.
> 
> Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> 
> Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> Before:
> 
> $ ethtool ext
> Settings for ext:
> 	Supported ports: [ FIBRE ]
> 	Supported link modes:   1000baseT/Full
> 	                        10000baseT/Full
> 	Supported pause frame use: Symmetric Receive-only
> 	Supports auto-negotiation: No
> 	Supported FEC modes: Not reported
> 	Advertised link modes:  Not reported
> 	Advertised pause frame use: No
> 	Advertised auto-negotiation: No
> 	Advertised FEC modes: Not reported
> 	Link partner advertised link modes:  Not reported
> 	Link partner advertised pause frame use: No
> 	Link partner advertised auto-negotiation: No
> 	Link partner advertised FEC modes: Not reported
> 	Speed: 1000Mb/s
> 	Duplex: Full
> 	Auto-negotiation: off
> 	Port: FIBRE
> 	PHYAD: 255
> 	Transceiver: internal
>         Current message level: 0x000020f7 (8439)
>                                drv probe link ifdown ifup rx_err tx_err hw
> 	Link detected: yes
> 
> After:
> 
> $ ethtool ext
> Settings for ext:
> 	Supported ports: [ FIBRE ]
> 	Supported link modes:   1000baseX/Full
> 	                        10000baseCR/Full
> 	Supported pause frame use: Symmetric Receive-only
> 	Supports auto-negotiation: No
> 	Supported FEC modes: Not reported
> 	Advertised link modes:  Not reported
> 	Advertised pause frame use: No
> 	Advertised auto-negotiation: No
> 	Advertised FEC modes: Not reported
> 	Link partner advertised link modes:  Not reported
> 	Link partner advertised pause frame use: No
> 	Link partner advertised auto-negotiation: No
> 	Link partner advertised FEC modes: Not reported
> 	Speed: 1000Mb/s
> 	Duplex: Full
> 	Auto-negotiation: off
> 	Port: FIBRE
> 	PHYAD: 255
> 	Transceiver: internal
> 	Supports Wake-on: g
> 	Wake-on: d
>         Current message level: 0x000020f7 (8439)
>                                drv probe link ifdown ifup rx_err tx_err hw
> 	Link detected: yes
> 
> Signed-off-by: Erik Ekman <erik@kryo.se>

Acked-by: Martin Habets <habetsm.xilinx@gmail.com>

> ---
>  drivers/net/ethernet/sfc/mcdi_port_common.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/sfc/mcdi_port_common.c b/drivers/net/ethernet/sfc/mcdi_port_common.c
> index 4bd3ef8f3384..e84cdcb6a595 100644
> --- a/drivers/net/ethernet/sfc/mcdi_port_common.c
> +++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
> @@ -133,9 +133,9 @@ void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
>  	case MC_CMD_MEDIA_QSFP_PLUS:
>  		SET_BIT(FIBRE);
>  		if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
> -			SET_BIT(1000baseT_Full);
> +			SET_BIT(1000baseX_Full);
>  		if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN))
> -			SET_BIT(10000baseT_Full);
> +			SET_BIT(10000baseCR_Full);
>  		if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
>  			SET_BIT(40000baseCR4_Full);
>  		if (cap & (1 << MC_CMD_PHY_CAP_100000FDX_LBN))
> @@ -192,9 +192,11 @@ u32 ethtool_linkset_to_mcdi_cap(const unsigned long *linkset)
>  		result |= (1 << MC_CMD_PHY_CAP_100FDX_LBN);
>  	if (TEST_BIT(1000baseT_Half))
>  		result |= (1 << MC_CMD_PHY_CAP_1000HDX_LBN);
> -	if (TEST_BIT(1000baseT_Full) || TEST_BIT(1000baseKX_Full))
> +	if (TEST_BIT(1000baseT_Full) || TEST_BIT(1000baseKX_Full) ||
> +	    TEST_BIT(1000baseX_Full))
>  		result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN);
> -	if (TEST_BIT(10000baseT_Full) || TEST_BIT(10000baseKX4_Full))
> +	if (TEST_BIT(10000baseT_Full) || TEST_BIT(10000baseKX4_Full) ||
> +	    TEST_BIT(10000baseCR_Full))
>  		result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN);
>  	if (TEST_BIT(40000baseCR4_Full) || TEST_BIT(40000baseKR4_Full))
>  		result |= (1 << MC_CMD_PHY_CAP_40000FDX_LBN);
> -- 
> 2.31.1
Andrew Lunn Oct. 19, 2021, 7:56 p.m. UTC | #8
> >From the 'Solarflare Server Adapter User Guide': "SFP 1000BASE‐T
> module, Autonegotiation: No, Speed:  1G, Comment: These modules
> support only 1G and will not link up at 100Mbps"
> 10G SFP+ Base-T modules are not mentioned, maybe they did not exist
> back then. Do you think the 1000BaseT_Full should be used because of
> this?

With a MAC connected to an SFP cage, i would list the T modes
supported, since you have no idea what SFP module the user will
install, copper or fibre.

	 Andrew
Erik Ekman Oct. 19, 2021, 8:09 p.m. UTC | #9
On Tue, 19 Oct 2021 at 21:18, Martin Habets <habetsm.xilinx@gmail.com> wrote:
>
> On Mon, Oct 18, 2021 at 08:37:08PM +0200, Erik Ekman wrote:
> > These modes were added to ethtool.h in 5711a98221443 ("net: ethtool: add support
> > for 1000BaseX and missing 10G link modes") back in 2016.
> >
> > Only setting CR mode for 10G, similar to how 25/40/50/100G modes are set up.
> >
> > Tested using SFN5122F-R7 (with 2 SFP+ ports) and a 1000BASE-BX10 SFP module.
> > Before:
> >
> > $ ethtool ext
> > Settings for ext:
> >       Supported ports: [ FIBRE ]
> >       Supported link modes:   1000baseT/Full
> >                               10000baseT/Full
> >       Supported pause frame use: Symmetric Receive-only
> >       Supports auto-negotiation: No
> >       Supported FEC modes: Not reported
> >       Advertised link modes:  Not reported
> >       Advertised pause frame use: No
> >       Advertised auto-negotiation: No
> >       Advertised FEC modes: Not reported
> >       Link partner advertised link modes:  Not reported
> >       Link partner advertised pause frame use: No
> >       Link partner advertised auto-negotiation: No
> >       Link partner advertised FEC modes: Not reported
> >       Speed: 1000Mb/s
> >       Duplex: Full
> >       Auto-negotiation: off
> >       Port: FIBRE
> >       PHYAD: 255
> >       Transceiver: internal
> >         Current message level: 0x000020f7 (8439)
> >                                drv probe link ifdown ifup rx_err tx_err hw
> >       Link detected: yes
> >
> > After:
> >
> > $ ethtool ext
> > Settings for ext:
> >       Supported ports: [ FIBRE ]
> >       Supported link modes:   1000baseX/Full
> >                               10000baseCR/Full
> >       Supported pause frame use: Symmetric Receive-only
> >       Supports auto-negotiation: No
> >       Supported FEC modes: Not reported
> >       Advertised link modes:  Not reported
> >       Advertised pause frame use: No
> >       Advertised auto-negotiation: No
> >       Advertised FEC modes: Not reported
> >       Link partner advertised link modes:  Not reported
> >       Link partner advertised pause frame use: No
> >       Link partner advertised auto-negotiation: No
> >       Link partner advertised FEC modes: Not reported
> >       Speed: 1000Mb/s
> >       Duplex: Full
> >       Auto-negotiation: off
> >       Port: FIBRE
> >       PHYAD: 255
> >       Transceiver: internal
> >       Supports Wake-on: g
> >       Wake-on: d
> >         Current message level: 0x000020f7 (8439)
> >                                drv probe link ifdown ifup rx_err tx_err hw
> >       Link detected: yes
> >
> > Signed-off-by: Erik Ekman <erik@kryo.se>
>
> Acked-by: Martin Habets <habetsm.xilinx@gmail.com>
>

I will send a v2 patch with more modes marked supported.

/Erik
diff mbox series

Patch

diff --git a/drivers/net/ethernet/sfc/mcdi_port_common.c b/drivers/net/ethernet/sfc/mcdi_port_common.c
index 4bd3ef8f3384..e84cdcb6a595 100644
--- a/drivers/net/ethernet/sfc/mcdi_port_common.c
+++ b/drivers/net/ethernet/sfc/mcdi_port_common.c
@@ -133,9 +133,9 @@  void mcdi_to_ethtool_linkset(u32 media, u32 cap, unsigned long *linkset)
 	case MC_CMD_MEDIA_QSFP_PLUS:
 		SET_BIT(FIBRE);
 		if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN))
-			SET_BIT(1000baseT_Full);
+			SET_BIT(1000baseX_Full);
 		if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN))
-			SET_BIT(10000baseT_Full);
+			SET_BIT(10000baseCR_Full);
 		if (cap & (1 << MC_CMD_PHY_CAP_40000FDX_LBN))
 			SET_BIT(40000baseCR4_Full);
 		if (cap & (1 << MC_CMD_PHY_CAP_100000FDX_LBN))
@@ -192,9 +192,11 @@  u32 ethtool_linkset_to_mcdi_cap(const unsigned long *linkset)
 		result |= (1 << MC_CMD_PHY_CAP_100FDX_LBN);
 	if (TEST_BIT(1000baseT_Half))
 		result |= (1 << MC_CMD_PHY_CAP_1000HDX_LBN);
-	if (TEST_BIT(1000baseT_Full) || TEST_BIT(1000baseKX_Full))
+	if (TEST_BIT(1000baseT_Full) || TEST_BIT(1000baseKX_Full) ||
+	    TEST_BIT(1000baseX_Full))
 		result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN);
-	if (TEST_BIT(10000baseT_Full) || TEST_BIT(10000baseKX4_Full))
+	if (TEST_BIT(10000baseT_Full) || TEST_BIT(10000baseKX4_Full) ||
+	    TEST_BIT(10000baseCR_Full))
 		result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN);
 	if (TEST_BIT(40000baseCR4_Full) || TEST_BIT(40000baseKR4_Full))
 		result |= (1 << MC_CMD_PHY_CAP_40000FDX_LBN);