u8 comp_codes_10g = 0;
        u8 oui_bytes[3] = {0, 0, 0};
        u16 enforce_sfp = 0;
+       u8 connector = 0;
+       u8 cable_length = 0;
+       u8 device_tech = 0;
+       bool active_cable = false;
 
        if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
                hw->phy.sfp_type = ixgbe_sfp_type_not_present;
                        hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
                else
                        hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
-       } else if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE) {
-               hw->phy.type = ixgbe_phy_qsfp_active_unknown;
-               if (hw->bus.lan_id == 0)
-                       hw->phy.sfp_type = ixgbe_sfp_type_da_act_lmt_core0;
-               else
-                       hw->phy.sfp_type = ixgbe_sfp_type_da_act_lmt_core1;
        } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
                                     IXGBE_SFF_10GBASELR_CAPABLE)) {
                if (hw->bus.lan_id == 0)
                else
                        hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
        } else {
-               /* unsupported module type */
-               hw->phy.type = ixgbe_phy_sfp_unsupported;
-               status = IXGBE_ERR_SFP_NOT_SUPPORTED;
-               goto out;
+               if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
+                       active_cable = true;
+
+               if (!active_cable) {
+                       /* check for active DA cables that pre-date
+                        * SFF-8436 v3.6
+                        */
+                       hw->phy.ops.read_i2c_eeprom(hw,
+                                       IXGBE_SFF_QSFP_CONNECTOR,
+                                       &connector);
+
+                       hw->phy.ops.read_i2c_eeprom(hw,
+                                       IXGBE_SFF_QSFP_CABLE_LENGTH,
+                                       &cable_length);
+
+                       hw->phy.ops.read_i2c_eeprom(hw,
+                                       IXGBE_SFF_QSFP_DEVICE_TECH,
+                                       &device_tech);
+
+                       if ((connector ==
+                                    IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
+                           (cable_length > 0) &&
+                           ((device_tech >> 4) ==
+                                    IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
+                               active_cable = true;
+               }
+
+               if (active_cable) {
+                       hw->phy.type = ixgbe_phy_qsfp_active_unknown;
+                       if (hw->bus.lan_id == 0)
+                               hw->phy.sfp_type =
+                                               ixgbe_sfp_type_da_act_lmt_core0;
+                       else
+                               hw->phy.sfp_type =
+                                               ixgbe_sfp_type_da_act_lmt_core1;
+               } else {
+                       /* unsupported module type */
+                       hw->phy.type = ixgbe_phy_sfp_unsupported;
+                       status = IXGBE_ERR_SFP_NOT_SUPPORTED;
+                       goto out;
+               }
        }
 
        if (hw->phy.sfp_type != stored_sfp_type)
 
 #define IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0        0xA5
 #define IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1        0xA6
 #define IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2        0xA7
+#define IXGBE_SFF_QSFP_CONNECTOR       0x82
 #define IXGBE_SFF_QSFP_10GBE_COMP      0x83
 #define IXGBE_SFF_QSFP_1GBE_COMP       0x86
+#define IXGBE_SFF_QSFP_CABLE_LENGTH    0x92
+#define IXGBE_SFF_QSFP_DEVICE_TECH     0x93
 
 /* Bitmasks */
 #define IXGBE_SFF_DA_PASSIVE_CABLE           0x4
 #define IXGBE_SFF_ADDRESSING_MODE           0x4
 #define IXGBE_SFF_QSFP_DA_ACTIVE_CABLE       0x1
 #define IXGBE_SFF_QSFP_DA_PASSIVE_CABLE      0x8
+#define IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE 0x23
+#define IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL  0x0
 #define IXGBE_I2C_EEPROM_READ_MASK           0x100
 #define IXGBE_I2C_EEPROM_STATUS_MASK         0x3
 #define IXGBE_I2C_EEPROM_STATUS_NO_OPERATION 0x0