.. | .. |
---|
189 | 189 | XGBE_SFP_CABLE_UNKNOWN = 0, |
---|
190 | 190 | XGBE_SFP_CABLE_ACTIVE, |
---|
191 | 191 | XGBE_SFP_CABLE_PASSIVE, |
---|
| 192 | + XGBE_SFP_CABLE_FIBER, |
---|
192 | 193 | }; |
---|
193 | 194 | |
---|
194 | 195 | enum xgbe_sfp_base { |
---|
.. | .. |
---|
236 | 237 | |
---|
237 | 238 | #define XGBE_SFP_BASE_BR 12 |
---|
238 | 239 | #define XGBE_SFP_BASE_BR_1GBE_MIN 0x0a |
---|
239 | | -#define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d |
---|
240 | 240 | #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 |
---|
243 | 241 | |
---|
244 | 242 | #define XGBE_SFP_BASE_CU_CABLE_LEN 18 |
---|
245 | 243 | |
---|
.. | .. |
---|
826 | 824 | static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom, |
---|
827 | 825 | enum xgbe_sfp_speed sfp_speed) |
---|
828 | 826 | { |
---|
829 | | - u8 *sfp_base, min, max; |
---|
| 827 | + u8 *sfp_base, min; |
---|
830 | 828 | |
---|
831 | 829 | sfp_base = sfp_eeprom->base; |
---|
832 | 830 | |
---|
833 | 831 | switch (sfp_speed) { |
---|
834 | 832 | case XGBE_SFP_SPEED_1000: |
---|
835 | 833 | min = XGBE_SFP_BASE_BR_1GBE_MIN; |
---|
836 | | - max = XGBE_SFP_BASE_BR_1GBE_MAX; |
---|
837 | 834 | break; |
---|
838 | 835 | case XGBE_SFP_SPEED_10000: |
---|
839 | 836 | 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; |
---|
845 | 837 | break; |
---|
846 | 838 | default: |
---|
847 | 839 | return false; |
---|
848 | 840 | } |
---|
849 | 841 | |
---|
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; |
---|
852 | 843 | } |
---|
853 | 844 | |
---|
854 | 845 | static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata) |
---|
.. | .. |
---|
1149 | 1140 | phy_data->sfp_tx_fault = xgbe_phy_check_sfp_tx_fault(phy_data); |
---|
1150 | 1141 | phy_data->sfp_rx_los = xgbe_phy_check_sfp_rx_los(phy_data); |
---|
1151 | 1142 | |
---|
1152 | | - /* Assume ACTIVE cable unless told it is PASSIVE */ |
---|
| 1143 | + /* Assume FIBER cable unless told otherwise */ |
---|
1153 | 1144 | if (sfp_base[XGBE_SFP_BASE_CABLE] & XGBE_SFP_BASE_CABLE_PASSIVE) { |
---|
1154 | 1145 | phy_data->sfp_cable = XGBE_SFP_CABLE_PASSIVE; |
---|
1155 | 1146 | 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) { |
---|
1157 | 1148 | phy_data->sfp_cable = XGBE_SFP_CABLE_ACTIVE; |
---|
| 1149 | + } else { |
---|
| 1150 | + phy_data->sfp_cable = XGBE_SFP_CABLE_FIBER; |
---|
1158 | 1151 | } |
---|
1159 | 1152 | |
---|
1160 | 1153 | /* 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 && |
---|
1162 | 1155 | xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000)) |
---|
1163 | 1156 | phy_data->sfp_base = XGBE_SFP_BASE_10000_CR; |
---|
1164 | 1157 | else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR) |
---|