|
@@ -1979,132 +1979,6 @@ out:
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * ixgbe_get_supported_physical_layer_82599 - Returns physical layer type
|
|
|
- * @hw: pointer to hardware structure
|
|
|
- *
|
|
|
- * Determines physical layer capabilities of the current configuration.
|
|
|
- **/
|
|
|
-static u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
|
|
|
-{
|
|
|
- u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
|
|
|
- u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
|
|
|
- u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
|
|
|
- u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
|
|
|
- u32 pma_pmd_10g_parallel = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
|
|
|
- u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
|
|
|
- u16 ext_ability = 0;
|
|
|
- u8 comp_codes_10g = 0;
|
|
|
- u8 comp_codes_1g = 0;
|
|
|
-
|
|
|
- hw->phy.ops.identify(hw);
|
|
|
-
|
|
|
- switch (hw->phy.type) {
|
|
|
- case ixgbe_phy_tn:
|
|
|
- case ixgbe_phy_cu_unknown:
|
|
|
- hw->phy.ops.read_reg(hw, MDIO_PMA_EXTABLE, MDIO_MMD_PMAPMD,
|
|
|
- &ext_ability);
|
|
|
- if (ext_ability & MDIO_PMA_EXTABLE_10GBT)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
|
|
|
- if (ext_ability & MDIO_PMA_EXTABLE_1000BT)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
|
|
|
- if (ext_ability & MDIO_PMA_EXTABLE_100BTX)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
|
|
|
- goto out;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- switch (autoc & IXGBE_AUTOC_LMS_MASK) {
|
|
|
- case IXGBE_AUTOC_LMS_1G_AN:
|
|
|
- case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
|
|
|
- if (pma_pmd_1g == IXGBE_AUTOC_1G_KX_BX) {
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX |
|
|
|
- IXGBE_PHYSICAL_LAYER_1000BASE_BX;
|
|
|
- goto out;
|
|
|
- } else
|
|
|
- /* SFI mode so read SFP module */
|
|
|
- goto sfp_check;
|
|
|
- break;
|
|
|
- case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
|
|
|
- if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_CX4)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
|
|
|
- else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_KX4)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
|
|
|
- else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_XAUI)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_XAUI;
|
|
|
- goto out;
|
|
|
- case IXGBE_AUTOC_LMS_10G_SERIAL:
|
|
|
- if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_KR) {
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KR;
|
|
|
- goto out;
|
|
|
- } else if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)
|
|
|
- goto sfp_check;
|
|
|
- break;
|
|
|
- case IXGBE_AUTOC_LMS_KX4_KX_KR:
|
|
|
- case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
|
|
|
- if (autoc & IXGBE_AUTOC_KX_SUPP)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
|
|
|
- if (autoc & IXGBE_AUTOC_KX4_SUPP)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
|
|
|
- if (autoc & IXGBE_AUTOC_KR_SUPP)
|
|
|
- physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KR;
|
|
|
- goto out;
|
|
|
- default:
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
-sfp_check:
|
|
|
- /* SFP check must be done last since DA modules are sometimes used to
|
|
|
- * test KR mode - we need to id KR mode correctly before SFP module.
|
|
|
- * Call identify_sfp because the pluggable module may have changed */
|
|
|
- hw->phy.ops.identify_sfp(hw);
|
|
|
- if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
|
|
|
- goto out;
|
|
|
-
|
|
|
- switch (hw->phy.type) {
|
|
|
- case ixgbe_phy_sfp_passive_tyco:
|
|
|
- case ixgbe_phy_sfp_passive_unknown:
|
|
|
- case ixgbe_phy_qsfp_passive_unknown:
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
|
|
|
- break;
|
|
|
- case ixgbe_phy_sfp_ftl_active:
|
|
|
- case ixgbe_phy_sfp_active_unknown:
|
|
|
- case ixgbe_phy_qsfp_active_unknown:
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA;
|
|
|
- break;
|
|
|
- case ixgbe_phy_sfp_avago:
|
|
|
- case ixgbe_phy_sfp_ftl:
|
|
|
- case ixgbe_phy_sfp_intel:
|
|
|
- case ixgbe_phy_sfp_unknown:
|
|
|
- hw->phy.ops.read_i2c_eeprom(hw,
|
|
|
- IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g);
|
|
|
- hw->phy.ops.read_i2c_eeprom(hw,
|
|
|
- IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
|
|
|
- if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
|
|
|
- else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
|
|
|
- else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T;
|
|
|
- break;
|
|
|
- case ixgbe_phy_qsfp_intel:
|
|
|
- case ixgbe_phy_qsfp_unknown:
|
|
|
- hw->phy.ops.read_i2c_eeprom(hw,
|
|
|
- IXGBE_SFF_QSFP_10GBE_COMP, &comp_codes_10g);
|
|
|
- if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
|
|
|
- else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
|
|
|
- physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
-out:
|
|
|
- return physical_layer;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* ixgbe_enable_rx_dma_82599 - Enable the Rx DMA unit on 82599
|
|
|
* @hw: pointer to hardware structure
|
|
@@ -2454,7 +2328,6 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
|
|
|
.start_hw = &ixgbe_start_hw_82599,
|
|
|
.clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic,
|
|
|
.get_media_type = &ixgbe_get_media_type_82599,
|
|
|
- .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82599,
|
|
|
.enable_rx_dma = &ixgbe_enable_rx_dma_82599,
|
|
|
.disable_rx_buff = &ixgbe_disable_rx_buff_generic,
|
|
|
.enable_rx_buff = &ixgbe_enable_rx_buff_generic,
|