mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
ice: Allow 100M speeds for some devices
For certain devices, 100M speeds are supported. Do not mask off 100M speed for these devices. Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Co-developed-by: Chinh T Cao <chinh.t.cao@intel.com> Signed-off-by: Chinh T Cao <chinh.t.cao@intel.com> Signed-off-by: Mikael Barsehyan <mikael.barsehyan@intel.com> Tested-by: Kavya AV <kavyax.av@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
affa1029d6
commit
39ed02a4ba
|
|
@ -2775,6 +2775,26 @@ ice_aq_set_port_params(struct ice_port_info *pi, bool double_vlan,
|
|||
return ice_aq_send_cmd(hw, &desc, NULL, 0, cd);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_100m_speed_supported
|
||||
* @hw: pointer to the HW struct
|
||||
*
|
||||
* returns true if 100M speeds are supported by the device,
|
||||
* false otherwise.
|
||||
*/
|
||||
bool ice_is_100m_speed_supported(struct ice_hw *hw)
|
||||
{
|
||||
switch (hw->device_id) {
|
||||
case ICE_DEV_ID_E822C_SGMII:
|
||||
case ICE_DEV_ID_E822L_SGMII:
|
||||
case ICE_DEV_ID_E823L_1GBE:
|
||||
case ICE_DEV_ID_E823C_SGMII:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_get_link_speed_based_on_phy_type - returns link speed
|
||||
* @phy_type_low: lower part of phy_type
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ ice_aq_set_gpio(struct ice_hw *hw, u16 gpio_ctrl_handle, u8 pin_idx, bool value,
|
|||
int
|
||||
ice_aq_get_gpio(struct ice_hw *hw, u16 gpio_ctrl_handle, u8 pin_idx,
|
||||
bool *value, struct ice_sq_cd *cd);
|
||||
bool ice_is_100m_speed_supported(struct ice_hw *hw);
|
||||
int
|
||||
ice_aq_set_lldp_mib(struct ice_hw *hw, u8 mib_type, void *buf, u16 buf_size,
|
||||
struct ice_sq_cd *cd);
|
||||
|
|
|
|||
|
|
@ -1470,20 +1470,22 @@ ice_get_ethtool_stats(struct net_device *netdev,
|
|||
|
||||
/**
|
||||
* ice_mask_min_supported_speeds
|
||||
* @hw: pointer to the HW structure
|
||||
* @phy_types_high: PHY type high
|
||||
* @phy_types_low: PHY type low to apply minimum supported speeds mask
|
||||
*
|
||||
* Apply minimum supported speeds mask to PHY type low. These are the speeds
|
||||
* for ethtool supported link mode.
|
||||
*/
|
||||
static
|
||||
void ice_mask_min_supported_speeds(u64 phy_types_high, u64 *phy_types_low)
|
||||
static void
|
||||
ice_mask_min_supported_speeds(struct ice_hw *hw,
|
||||
u64 phy_types_high, u64 *phy_types_low)
|
||||
{
|
||||
/* if QSFP connection with 100G speed, minimum supported speed is 25G */
|
||||
if (*phy_types_low & ICE_PHY_TYPE_LOW_MASK_100G ||
|
||||
phy_types_high & ICE_PHY_TYPE_HIGH_MASK_100G)
|
||||
*phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_25G;
|
||||
else
|
||||
else if (!ice_is_100m_speed_supported(hw))
|
||||
*phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_1G;
|
||||
}
|
||||
|
||||
|
|
@ -1533,7 +1535,8 @@ ice_phy_type_to_ethtool(struct net_device *netdev,
|
|||
phy_types_low = le64_to_cpu(pf->nvm_phy_type_lo);
|
||||
phy_types_high = le64_to_cpu(pf->nvm_phy_type_hi);
|
||||
|
||||
ice_mask_min_supported_speeds(phy_types_high, &phy_types_low);
|
||||
ice_mask_min_supported_speeds(&pf->hw, phy_types_high,
|
||||
&phy_types_low);
|
||||
/* determine advertised modes based on link override only
|
||||
* if it's supported and if the FW doesn't abstract the
|
||||
* driver from having to account for link overrides
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user