diff mbox series

[iwl-next,v2,3/9] ethtool: Add missing ETHTOOL_LINK_MODE_ to forced speed map

Message ID 20230819094025.15196-1-paul.greenwalt@intel.com (mailing list archive)
State Awaiting Upstream
Delegated to: Netdev Maintainers
Headers show
Series ice: Add basic E830 support | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Guessed tree name to be net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit fail Errors and warnings before: 24380 this patch: 48604
netdev/cc_maintainers fail 3 maintainers not CCed: kuba@kernel.org davem@davemloft.net vladimir.oltean@nxp.com
netdev/build_clang success Errors and warnings before: 1847 this patch: 1847
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn fail Errors and warnings before: 25877 this patch: 51661
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 114 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Greenwalt, Paul Aug. 19, 2023, 9:40 a.m. UTC
The Ethtool forced speeds to Ethtool supported link modes map is missing
some Ethtool forced speeds and ETHTOOL_LINK_MODE_. Add the all speeds
and mapped link modes to provide a common implementation among drivers.

Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
---
 include/linux/ethtool.h | 80 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

Comments

Andrew Lunn Aug. 20, 2023, 7:39 p.m. UTC | #1
On Sat, Aug 19, 2023 at 02:40:25AM -0700, Paul Greenwalt wrote:
> The Ethtool forced speeds to Ethtool supported link modes map is missing
> some Ethtool forced speeds and ETHTOOL_LINK_MODE_. Add the all speeds
> and mapped link modes to provide a common implementation among drivers.
> 
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
> ---
>  include/linux/ethtool.h | 80 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 80 insertions(+)
> 
> diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
> index 245fd4a8d85b..519d6ec73d98 100644
> --- a/include/linux/ethtool.h
> +++ b/include/linux/ethtool.h
> @@ -1069,12 +1069,33 @@ struct ethtool_forced_speed_map {
>  	.arr_size	= ARRAY_SIZE(ethtool_forced_speed_##value),	\
>  }
>  
> +static const u32 ethtool_forced_speed_10[] __initconst = {
> +	ETHTOOL_LINK_MODE_10baseT_Full_BIT,
> +	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
> +	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT,

Is this supposed to list all 10Mbps link modes? Or only full duplex
modes?

settings[] has:

	PHY_SETTING(     10, FULL,     10baseT_Full		),
	PHY_SETTING(     10, HALF,     10baseT_Half		),
	PHY_SETTING(     10, FULL,     10baseT1L_Full		),
	PHY_SETTING(     10, FULL,     10baseT1S_Full		),
	PHY_SETTING(     10, HALF,     10baseT1S_Half		),
	PHY_SETTING(     10, HALF,     10baseT1S_P2MP_Half	),

> +};
> +
> +static const u32 ethtool_forced_speed_100[] __initconst = {
> +	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
> +	ETHTOOL_LINK_MODE_100baseFX_Half_BIT,
> +	ETHTOOL_LINK_MODE_100baseFX_Full_BIT,
> +};

	PHY_SETTING(    100, FULL,    100baseT_Full		),
	PHY_SETTING(    100, FULL,    100baseT1_Full		),
	PHY_SETTING(    100, HALF,    100baseT_Half		),
	PHY_SETTING(    100, HALF,    100baseFX_Half		),
	PHY_SETTING(    100, FULL,    100baseFX_Full		),

	Andrew
Alexander Lobakin Aug. 21, 2023, 1:03 p.m. UTC | #2
From: Paul Greenwalt <paul.greenwalt@intel.com>
Date: Sat, 19 Aug 2023 02:40:25 -0700

> The Ethtool forced speeds to Ethtool supported link modes map is missing
> some Ethtool forced speeds and ETHTOOL_LINK_MODE_. Add the all speeds
> and mapped link modes to provide a common implementation among drivers.
> 
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
> ---
>  include/linux/ethtool.h | 80 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 80 insertions(+)
> 
> diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
> index 245fd4a8d85b..519d6ec73d98 100644
> --- a/include/linux/ethtool.h
> +++ b/include/linux/ethtool.h
> @@ -1069,12 +1069,33 @@ struct ethtool_forced_speed_map {
>  	.arr_size	= ARRAY_SIZE(ethtool_forced_speed_##value),	\
>  }
>  
> +static const u32 ethtool_forced_speed_10[] __initconst = {
> +	ETHTOOL_LINK_MODE_10baseT_Full_BIT,
> +	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
> +	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT,
> +};
> +
> +static const u32 ethtool_forced_speed_100[] __initconst = {
> +	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
> +	ETHTOOL_LINK_MODE_100baseFX_Half_BIT,
> +	ETHTOOL_LINK_MODE_100baseFX_Full_BIT,
> +};
> +
>  static const u32 ethtool_forced_speed_1000[] __initconst = {
>  	ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
>  	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
>  	ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
>  };
>  
> +static const u32 ethtool_forced_speed_2500[] __initconst = {
> +	ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
> +	ETHTOOL_LINK_MODE_2500baseX_Full_BIT,
> +};
> +
> +static const u32 ethtool_forced_speed_5000[] __initconst = {
> +	ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
> +};
> +
>  static const u32 ethtool_forced_speed_10000[] __initconst = {
>  	ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
>  	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
> @@ -1084,10 +1105,12 @@ static const u32 ethtool_forced_speed_10000[] __initconst = {
>  	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
>  	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
>  	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT,
> +	ETHTOOL_LINK_MODE_10000baseER_Full_BIT,

But some HW can support different link modes. I mean, it's not
guaranteed QLogic HW really does support ER mode even if Intel HW does
(same for others).
Or am I missing something?

>  };
>  
>  static const u32 ethtool_forced_speed_20000[] __initconst = {
>  	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT,
> +	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT,
>  };

Thanks,
Olek
kernel test robot Aug. 21, 2023, 1:03 p.m. UTC | #3
Hi Paul,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]
[also build test WARNING on next-20230821]
[cannot apply to tnguy-next-queue/dev-queue tnguy-net-queue/dev-queue net/main linus/master horms-ipvs/master v6.5-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Paul-Greenwalt/ice-Add-E830-device-IDs-MAC-type-and-registers/20230821-095200
base:   net-next/main
patch link:    https://lore.kernel.org/r/20230819094025.15196-1-paul.greenwalt%40intel.com
patch subject: [Intel-wired-lan] [PATCH iwl-next v2 3/9] ethtool: Add missing ETHTOOL_LINK_MODE_ to forced speed map
config: sparc64-randconfig-r015-20230821 (https://download.01.org/0day-ci/archive/20230821/202308212014.a1qQx4Wp-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230821/202308212014.a1qQx4Wp-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308212014.a1qQx4Wp-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from include/linux/linkmode.h:5,
                    from include/linux/mii.h:13,
                    from include/uapi/linux/mdio.h:15,
                    from drivers/vfio/platform/reset/vfio_platform_amdxgbe.c:14:
>> include/linux/ethtool.h:1190:18: warning: 'ethtool_forced_speed_800000' defined but not used [-Wunused-const-variable=]
    1190 | static const u32 ethtool_forced_speed_800000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1177:18: warning: 'ethtool_forced_speed_400000' defined but not used [-Wunused-const-variable=]
    1177 | static const u32 ethtool_forced_speed_400000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1164:18: warning: 'ethtool_forced_speed_200000' defined but not used [-Wunused-const-variable=]
    1164 | static const u32 ethtool_forced_speed_200000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1147:18: warning: 'ethtool_forced_speed_100000' defined but not used [-Wunused-const-variable=]
    1147 | static const u32 ethtool_forced_speed_100000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1140:18: warning: 'ethtool_forced_speed_56000' defined but not used [-Wunused-const-variable=]
    1140 | static const u32 ethtool_forced_speed_56000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1129:18: warning: 'ethtool_forced_speed_50000' defined but not used [-Wunused-const-variable=]
    1129 | static const u32 ethtool_forced_speed_50000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1122:18: warning: 'ethtool_forced_speed_40000' defined but not used [-Wunused-const-variable=]
    1122 | static const u32 ethtool_forced_speed_40000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1116:18: warning: 'ethtool_forced_speed_25000' defined but not used [-Wunused-const-variable=]
    1116 | static const u32 ethtool_forced_speed_25000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1111:18: warning: 'ethtool_forced_speed_20000' defined but not used [-Wunused-const-variable=]
    1111 | static const u32 ethtool_forced_speed_20000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1099:18: warning: 'ethtool_forced_speed_10000' defined but not used [-Wunused-const-variable=]
    1099 | static const u32 ethtool_forced_speed_10000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1095:18: warning: 'ethtool_forced_speed_5000' defined but not used [-Wunused-const-variable=]
    1095 | static const u32 ethtool_forced_speed_5000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1090:18: warning: 'ethtool_forced_speed_2500' defined but not used [-Wunused-const-variable=]
    1090 | static const u32 ethtool_forced_speed_2500[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/ethtool.h:1084:18: warning: 'ethtool_forced_speed_1000' defined but not used [-Wunused-const-variable=]
    1084 | static const u32 ethtool_forced_speed_1000[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1078:18: warning: 'ethtool_forced_speed_100' defined but not used [-Wunused-const-variable=]
    1078 | static const u32 ethtool_forced_speed_100[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~~
>> include/linux/ethtool.h:1072:18: warning: 'ethtool_forced_speed_10' defined but not used [-Wunused-const-variable=]
    1072 | static const u32 ethtool_forced_speed_10[] __initconst = {
         |                  ^~~~~~~~~~~~~~~~~~~~~~~


vim +/ethtool_forced_speed_800000 +1190 include/linux/ethtool.h

  1071	
> 1072	static const u32 ethtool_forced_speed_10[] __initconst = {
  1073		ETHTOOL_LINK_MODE_10baseT_Full_BIT,
  1074		ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
  1075		ETHTOOL_LINK_MODE_10baseT1S_Full_BIT,
  1076	};
  1077	
> 1078	static const u32 ethtool_forced_speed_100[] __initconst = {
  1079		ETHTOOL_LINK_MODE_100baseT_Full_BIT,
  1080		ETHTOOL_LINK_MODE_100baseFX_Half_BIT,
  1081		ETHTOOL_LINK_MODE_100baseFX_Full_BIT,
  1082	};
  1083	
  1084	static const u32 ethtool_forced_speed_1000[] __initconst = {
  1085		ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
  1086		ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
  1087		ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
  1088	};
  1089	
> 1090	static const u32 ethtool_forced_speed_2500[] __initconst = {
  1091		ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
  1092		ETHTOOL_LINK_MODE_2500baseX_Full_BIT,
  1093	};
  1094	
> 1095	static const u32 ethtool_forced_speed_5000[] __initconst = {
  1096		ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
  1097	};
  1098	
  1099	static const u32 ethtool_forced_speed_10000[] __initconst = {
  1100		ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
  1101		ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
  1102		ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
  1103		ETHTOOL_LINK_MODE_10000baseR_FEC_BIT,
  1104		ETHTOOL_LINK_MODE_10000baseCR_Full_BIT,
  1105		ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
  1106		ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
  1107		ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT,
  1108		ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
  1109	};
  1110	
  1111	static const u32 ethtool_forced_speed_20000[] __initconst = {
  1112		ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT,
  1113		ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT,
  1114	};
  1115	
  1116	static const u32 ethtool_forced_speed_25000[] __initconst = {
  1117		ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
  1118		ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
  1119		ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
  1120	};
  1121	
  1122	static const u32 ethtool_forced_speed_40000[] __initconst = {
  1123		ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT,
  1124		ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
  1125		ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
  1126		ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT,
  1127	};
  1128	
  1129	static const u32 ethtool_forced_speed_50000[] __initconst = {
  1130		ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
  1131		ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
  1132		ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
  1133		ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
  1134		ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
  1135		ETHTOOL_LINK_MODE_50000baseCR_Full_BIT,
  1136		ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
  1137		ETHTOOL_LINK_MODE_50000baseDR_Full_BIT,
  1138	};
  1139	
> 1140	static const u32 ethtool_forced_speed_56000[] __initconst = {
  1141		ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT,
  1142		ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT,
  1143		ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT,
  1144		ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT,
  1145	};
  1146	
  1147	static const u32 ethtool_forced_speed_100000[] __initconst = {
  1148		ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
  1149		ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
  1150		ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
  1151		ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
  1152		ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT,
  1153		ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT,
  1154		ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT,
  1155		ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT,
  1156		ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT,
  1157		ETHTOOL_LINK_MODE_100000baseKR_Full_BIT,
  1158		ETHTOOL_LINK_MODE_100000baseSR_Full_BIT,
  1159		ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT,
  1160		ETHTOOL_LINK_MODE_100000baseCR_Full_BIT,
  1161		ETHTOOL_LINK_MODE_100000baseDR_Full_BIT,
  1162	};
  1163	
> 1164	static const u32 ethtool_forced_speed_200000[] __initconst = {
  1165		ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
  1166		ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
  1167		ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
  1168		ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT,
  1169		ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
  1170		ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT,
  1171		ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT,
  1172		ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT,
  1173		ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT,
  1174		ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT,
  1175	};
  1176	
> 1177	static const u32 ethtool_forced_speed_400000[] __initconst = {
  1178		ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT,
  1179		ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT,
  1180		ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT,
  1181		ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT,
  1182		ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT,
  1183		ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT,
  1184		ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT,
  1185		ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT,
  1186		ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT,
  1187		ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT,
  1188	};
  1189	
> 1190	static const u32 ethtool_forced_speed_800000[] __initconst = {
  1191		ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT,
  1192		ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT,
  1193		ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT,
  1194		ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT,
  1195		ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT,
  1196		ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT,
  1197	};
  1198
diff mbox series

Patch

diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 245fd4a8d85b..519d6ec73d98 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -1069,12 +1069,33 @@  struct ethtool_forced_speed_map {
 	.arr_size	= ARRAY_SIZE(ethtool_forced_speed_##value),	\
 }
 
+static const u32 ethtool_forced_speed_10[] __initconst = {
+	ETHTOOL_LINK_MODE_10baseT_Full_BIT,
+	ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
+	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_100[] __initconst = {
+	ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+	ETHTOOL_LINK_MODE_100baseFX_Half_BIT,
+	ETHTOOL_LINK_MODE_100baseFX_Full_BIT,
+};
+
 static const u32 ethtool_forced_speed_1000[] __initconst = {
 	ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
 	ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
 	ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
 };
 
+static const u32 ethtool_forced_speed_2500[] __initconst = {
+	ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
+	ETHTOOL_LINK_MODE_2500baseX_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_5000[] __initconst = {
+	ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+};
+
 static const u32 ethtool_forced_speed_10000[] __initconst = {
 	ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
 	ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
@@ -1084,10 +1105,12 @@  static const u32 ethtool_forced_speed_10000[] __initconst = {
 	ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
 	ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
 	ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT,
+	ETHTOOL_LINK_MODE_10000baseER_Full_BIT,
 };
 
 static const u32 ethtool_forced_speed_20000[] __initconst = {
 	ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT,
+	ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT,
 };
 
 static const u32 ethtool_forced_speed_25000[] __initconst = {
@@ -1107,6 +1130,18 @@  static const u32 ethtool_forced_speed_50000[] __initconst = {
 	ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
 	ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
 	ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
+	ETHTOOL_LINK_MODE_50000baseKR_Full_BIT,
+	ETHTOOL_LINK_MODE_50000baseCR_Full_BIT,
+	ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
+	ETHTOOL_LINK_MODE_50000baseDR_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_56000[] __initconst = {
+	ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT,
+	ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT,
+	ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT,
+	ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT,
 };
 
 static const u32 ethtool_forced_speed_100000[] __initconst = {
@@ -1114,6 +1149,51 @@  static const u32 ethtool_forced_speed_100000[] __initconst = {
 	ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
 	ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
 	ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseKR_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseSR_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseCR_Full_BIT,
+	ETHTOOL_LINK_MODE_100000baseDR_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_200000[] __initconst = {
+	ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT,
+	ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_400000[] __initconst = {
+	ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT,
+	ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT,
+};
+
+static const u32 ethtool_forced_speed_800000[] __initconst = {
+	ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT,
+	ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT,
+	ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT,
+	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT,
+	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT,
+	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT,
 };
 
 /**