Commit f8ab263d authored by Tom Lendacky's avatar Tom Lendacky Committed by David S. Miller

net: amd-xgbe: Check only the minimum speed for active/passive cables

There are cables that exist that can support speeds in excess of 10GbE.
The driver, however, restricts the EEPROM advertised nominal bitrate to
a specific range, which can prevent usage of cables that can support,
for example, up to 25GbE.

Rather than checking that an active or passive cable supports a specific
range, only check for a minimum supported speed.

Fixes: abf0a1c2 ("amd-xgbe: Add support for SFP+ modules")
Signed-off-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4998006c
...@@ -237,10 +237,7 @@ enum xgbe_sfp_speed { ...@@ -237,10 +237,7 @@ enum xgbe_sfp_speed {
#define XGBE_SFP_BASE_BR 12 #define XGBE_SFP_BASE_BR 12
#define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a
#define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d
#define XGBE_SFP_BASE_BR_10GBE_MIN 0x64 #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64
#define XGBE_SFP_BASE_BR_10GBE_MAX 0x68
#define XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX 0x78
#define XGBE_SFP_BASE_CU_CABLE_LEN 18 #define XGBE_SFP_BASE_CU_CABLE_LEN 18
...@@ -827,29 +824,22 @@ static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata) ...@@ -827,29 +824,22 @@ static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata)
static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom, static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
enum xgbe_sfp_speed sfp_speed) enum xgbe_sfp_speed sfp_speed)
{ {
u8 *sfp_base, min, max; u8 *sfp_base, min;
sfp_base = sfp_eeprom->base; sfp_base = sfp_eeprom->base;
switch (sfp_speed) { switch (sfp_speed) {
case XGBE_SFP_SPEED_1000: case XGBE_SFP_SPEED_1000:
min = XGBE_SFP_BASE_BR_1GBE_MIN; min = XGBE_SFP_BASE_BR_1GBE_MIN;
max = XGBE_SFP_BASE_BR_1GBE_MAX;
break; break;
case XGBE_SFP_SPEED_10000: case XGBE_SFP_SPEED_10000:
min = XGBE_SFP_BASE_BR_10GBE_MIN; min = XGBE_SFP_BASE_BR_10GBE_MIN;
if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
XGBE_MOLEX_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN) == 0)
max = XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX;
else
max = XGBE_SFP_BASE_BR_10GBE_MAX;
break; break;
default: default:
return false; return false;
} }
return ((sfp_base[XGBE_SFP_BASE_BR] >= min) && return sfp_base[XGBE_SFP_BASE_BR] >= min;
(sfp_base[XGBE_SFP_BASE_BR] <= max));
} }
static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata) static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment