hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
....@@ -189,6 +189,7 @@
189189 XGBE_SFP_CABLE_UNKNOWN = 0,
190190 XGBE_SFP_CABLE_ACTIVE,
191191 XGBE_SFP_CABLE_PASSIVE,
192
+ XGBE_SFP_CABLE_FIBER,
192193 };
193194
194195 enum xgbe_sfp_base {
....@@ -236,10 +237,7 @@
236237
237238 #define XGBE_SFP_BASE_BR 12
238239 #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a
239
-#define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d
240240 #define XGBE_SFP_BASE_BR_10GBE_MIN 0x64
241
-#define XGBE_SFP_BASE_BR_10GBE_MAX 0x68
242
-#define XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX 0x78
243241
244242 #define XGBE_SFP_BASE_CU_CABLE_LEN 18
245243
....@@ -826,29 +824,22 @@
826824 static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
827825 enum xgbe_sfp_speed sfp_speed)
828826 {
829
- u8 *sfp_base, min, max;
827
+ u8 *sfp_base, min;
830828
831829 sfp_base = sfp_eeprom->base;
832830
833831 switch (sfp_speed) {
834832 case XGBE_SFP_SPEED_1000:
835833 min = XGBE_SFP_BASE_BR_1GBE_MIN;
836
- max = XGBE_SFP_BASE_BR_1GBE_MAX;
837834 break;
838835 case XGBE_SFP_SPEED_10000:
839836 min = XGBE_SFP_BASE_BR_10GBE_MIN;
840
- if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
841
- XGBE_MOLEX_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN) == 0)
842
- max = XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX;
843
- else
844
- max = XGBE_SFP_BASE_BR_10GBE_MAX;
845837 break;
846838 default:
847839 return false;
848840 }
849841
850
- return ((sfp_base[XGBE_SFP_BASE_BR] >= min) &&
851
- (sfp_base[XGBE_SFP_BASE_BR] <= max));
842
+ return sfp_base[XGBE_SFP_BASE_BR] >= min;
852843 }
853844
854845 static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
....@@ -1149,16 +1140,18 @@
11491140 phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data);
11501141 phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data);
11511142
1152
- /* Assume ACTIVE cable unless told it is PASSIVE */
1143
+ /* Assume FIBER cable unless told otherwise */
11531144 if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_PASSIVE) {
11541145 phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE;
11551146 phy_data->sfp_cable_len = sfp_base[XGBE_SFP_BASE_CU_CABLE_LEN];
1156
- } else {
1147
+ } else if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_ACTIVE) {
11571148 phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE;
1149
+ } else {
1150
+ phy_data->sfp_cable = XGBE_SFP_CABLE_FIBER;
11581151 }
11591152
11601153 /* Determine the type of SFP */
1161
- if (phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE &&
1154
+ if (phy_data->sfp_cable != XGBE_SFP_CABLE_FIBER &&
11621155 xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000))
11631156 phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;
11641157 else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR)