ice: Remove and replace ice speed defines with ethtool.h versions
The driver is currently using ICE_LINK_SPEED_* defines that mirror what ethtool.h defines, with one exception ICE_LINK_SPEED_UNKNOWN. This issue is fixed by the following changes: 1. replace ICE_LINK_SPEED_UNKNOWN with 0 because SPEED_UNKNOWN in ethtool.h is "-1" and that doesn't match the driver's expected behavior 2. transform ICE_LINK_SPEED_*MBPS to SPEED_* using static tables and fls()-1 to convert from BIT() to an index in a table. Suggested-by: Alexander Lobakin <alexandr.lobakin@intel.com> Signed-off-by: Brett Creeley <brett.creeley@intel.com> Co-developed-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
a711a3288c
commit
1d0e28a9be
5 changed files with 69 additions and 109 deletions
|
@ -2948,8 +2948,8 @@ bool ice_is_100m_speed_supported(struct ice_hw *hw)
|
||||||
* Note: In the structure of [phy_type_low, phy_type_high], there should
|
* Note: In the structure of [phy_type_low, phy_type_high], there should
|
||||||
* be one bit set, as this function will convert one PHY type to its
|
* be one bit set, as this function will convert one PHY type to its
|
||||||
* speed.
|
* speed.
|
||||||
* If no bit gets set, ICE_LINK_SPEED_UNKNOWN will be returned
|
* If no bit gets set, ICE_AQ_LINK_SPEED_UNKNOWN will be returned
|
||||||
* If more than one bit gets set, ICE_LINK_SPEED_UNKNOWN will be returned
|
* If more than one bit gets set, ICE_AQ_LINK_SPEED_UNKNOWN will be returned
|
||||||
*/
|
*/
|
||||||
static u16
|
static u16
|
||||||
ice_get_link_speed_based_on_phy_type(u64 phy_type_low, u64 phy_type_high)
|
ice_get_link_speed_based_on_phy_type(u64 phy_type_low, u64 phy_type_high)
|
||||||
|
@ -5515,3 +5515,40 @@ bool ice_fw_supports_report_dflt_cfg(struct ice_hw *hw)
|
||||||
ICE_FW_API_REPORT_DFLT_CFG_MIN,
|
ICE_FW_API_REPORT_DFLT_CFG_MIN,
|
||||||
ICE_FW_API_REPORT_DFLT_CFG_PATCH);
|
ICE_FW_API_REPORT_DFLT_CFG_PATCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* each of the indexes into the following array match the speed of a return
|
||||||
|
* value from the list of AQ returned speeds like the range:
|
||||||
|
* ICE_AQ_LINK_SPEED_10MB .. ICE_AQ_LINK_SPEED_100GB excluding
|
||||||
|
* ICE_AQ_LINK_SPEED_UNKNOWN which is BIT(15) and maps to BIT(14) in this
|
||||||
|
* array. The array is defined as 15 elements long because the link_speed
|
||||||
|
* returned by the firmware is a 16 bit * value, but is indexed
|
||||||
|
* by [fls(speed) - 1]
|
||||||
|
*/
|
||||||
|
static const u32 ice_aq_to_link_speed[15] = {
|
||||||
|
SPEED_10, /* BIT(0) */
|
||||||
|
SPEED_100,
|
||||||
|
SPEED_1000,
|
||||||
|
SPEED_2500,
|
||||||
|
SPEED_5000,
|
||||||
|
SPEED_10000,
|
||||||
|
SPEED_20000,
|
||||||
|
SPEED_25000,
|
||||||
|
SPEED_40000,
|
||||||
|
SPEED_50000,
|
||||||
|
SPEED_100000, /* BIT(10) */
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0 /* BIT(14) */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_get_link_speed - get integer speed from table
|
||||||
|
* @index: array index from fls(aq speed) - 1
|
||||||
|
*
|
||||||
|
* Returns: u32 value containing integer speed
|
||||||
|
*/
|
||||||
|
u32 ice_get_link_speed(u16 index)
|
||||||
|
{
|
||||||
|
return ice_aq_to_link_speed[index];
|
||||||
|
}
|
||||||
|
|
|
@ -163,6 +163,7 @@ int
|
||||||
ice_aq_sff_eeprom(struct ice_hw *hw, u16 lport, u8 bus_addr,
|
ice_aq_sff_eeprom(struct ice_hw *hw, u16 lport, u8 bus_addr,
|
||||||
u16 mem_addr, u8 page, u8 set_page, u8 *data, u8 length,
|
u16 mem_addr, u8 page, u8 set_page, u8 *data, u8 length,
|
||||||
bool write, struct ice_sq_cd *cd);
|
bool write, struct ice_sq_cd *cd);
|
||||||
|
u32 ice_get_link_speed(u16 index);
|
||||||
|
|
||||||
int
|
int
|
||||||
ice_cfg_vsi_rdma(struct ice_port_info *pi, u16 vsi_handle, u16 tc_bitmap,
|
ice_cfg_vsi_rdma(struct ice_port_info *pi, u16 vsi_handle, u16 tc_bitmap,
|
||||||
|
|
|
@ -908,17 +908,5 @@ static inline struct ice_rx_ptype_decoded ice_decode_rx_desc_ptype(u16 ptype)
|
||||||
return ice_ptype_lkup[ptype];
|
return ice_ptype_lkup[ptype];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ICE_LINK_SPEED_UNKNOWN 0
|
|
||||||
#define ICE_LINK_SPEED_10MBPS 10
|
|
||||||
#define ICE_LINK_SPEED_100MBPS 100
|
|
||||||
#define ICE_LINK_SPEED_1000MBPS 1000
|
|
||||||
#define ICE_LINK_SPEED_2500MBPS 2500
|
|
||||||
#define ICE_LINK_SPEED_5000MBPS 5000
|
|
||||||
#define ICE_LINK_SPEED_10000MBPS 10000
|
|
||||||
#define ICE_LINK_SPEED_20000MBPS 20000
|
|
||||||
#define ICE_LINK_SPEED_25000MBPS 25000
|
|
||||||
#define ICE_LINK_SPEED_40000MBPS 40000
|
|
||||||
#define ICE_LINK_SPEED_50000MBPS 50000
|
|
||||||
#define ICE_LINK_SPEED_100000MBPS 100000
|
|
||||||
|
|
||||||
#endif /* _ICE_LAN_TX_RX_H_ */
|
#endif /* _ICE_LAN_TX_RX_H_ */
|
||||||
|
|
|
@ -3850,33 +3850,11 @@ int ice_clear_dflt_vsi(struct ice_vsi *vsi)
|
||||||
*/
|
*/
|
||||||
int ice_get_link_speed_mbps(struct ice_vsi *vsi)
|
int ice_get_link_speed_mbps(struct ice_vsi *vsi)
|
||||||
{
|
{
|
||||||
switch (vsi->port_info->phy.link_info.link_speed) {
|
unsigned int link_speed;
|
||||||
case ICE_AQ_LINK_SPEED_100GB:
|
|
||||||
return SPEED_100000;
|
link_speed = vsi->port_info->phy.link_info.link_speed;
|
||||||
case ICE_AQ_LINK_SPEED_50GB:
|
|
||||||
return SPEED_50000;
|
return (int)ice_get_link_speed(fls(link_speed) - 1);
|
||||||
case ICE_AQ_LINK_SPEED_40GB:
|
|
||||||
return SPEED_40000;
|
|
||||||
case ICE_AQ_LINK_SPEED_25GB:
|
|
||||||
return SPEED_25000;
|
|
||||||
case ICE_AQ_LINK_SPEED_20GB:
|
|
||||||
return SPEED_20000;
|
|
||||||
case ICE_AQ_LINK_SPEED_10GB:
|
|
||||||
return SPEED_10000;
|
|
||||||
case ICE_AQ_LINK_SPEED_5GB:
|
|
||||||
return SPEED_5000;
|
|
||||||
case ICE_AQ_LINK_SPEED_2500MB:
|
|
||||||
return SPEED_2500;
|
|
||||||
case ICE_AQ_LINK_SPEED_1000MB:
|
|
||||||
return SPEED_1000;
|
|
||||||
case ICE_AQ_LINK_SPEED_100MB:
|
|
||||||
return SPEED_100;
|
|
||||||
case ICE_AQ_LINK_SPEED_10MB:
|
|
||||||
return SPEED_10;
|
|
||||||
case ICE_AQ_LINK_SPEED_UNKNOWN:
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -39,6 +39,24 @@ ice_aq_send_msg_to_vf(struct ice_hw *hw, u16 vfid, u32 v_opcode, u32 v_retval,
|
||||||
return ice_sq_send_cmd(hw, &hw->mailboxq, &desc, msg, msglen, cd);
|
return ice_sq_send_cmd(hw, &hw->mailboxq, &desc, msg, msglen, cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const u32 ice_legacy_aq_to_vc_speed[15] = {
|
||||||
|
VIRTCHNL_LINK_SPEED_100MB, /* BIT(0) */
|
||||||
|
VIRTCHNL_LINK_SPEED_100MB,
|
||||||
|
VIRTCHNL_LINK_SPEED_1GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_1GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_1GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_10GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_20GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_25GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_40GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_40GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_40GB,
|
||||||
|
VIRTCHNL_LINK_SPEED_UNKNOWN,
|
||||||
|
VIRTCHNL_LINK_SPEED_UNKNOWN,
|
||||||
|
VIRTCHNL_LINK_SPEED_UNKNOWN,
|
||||||
|
VIRTCHNL_LINK_SPEED_UNKNOWN /* BIT(14) */
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_conv_link_speed_to_virtchnl
|
* ice_conv_link_speed_to_virtchnl
|
||||||
* @adv_link_support: determines the format of the returned link speed
|
* @adv_link_support: determines the format of the returned link speed
|
||||||
|
@ -55,78 +73,16 @@ u32 ice_conv_link_speed_to_virtchnl(bool adv_link_support, u16 link_speed)
|
||||||
{
|
{
|
||||||
u32 speed;
|
u32 speed;
|
||||||
|
|
||||||
if (adv_link_support)
|
if (adv_link_support) {
|
||||||
switch (link_speed) {
|
/* convert a BIT() value into an array index */
|
||||||
case ICE_AQ_LINK_SPEED_10MB:
|
speed = ice_get_link_speed(fls(link_speed) - 1);
|
||||||
speed = ICE_LINK_SPEED_10MBPS;
|
} else {
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_100MB:
|
|
||||||
speed = ICE_LINK_SPEED_100MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_1000MB:
|
|
||||||
speed = ICE_LINK_SPEED_1000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_2500MB:
|
|
||||||
speed = ICE_LINK_SPEED_2500MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_5GB:
|
|
||||||
speed = ICE_LINK_SPEED_5000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_10GB:
|
|
||||||
speed = ICE_LINK_SPEED_10000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_20GB:
|
|
||||||
speed = ICE_LINK_SPEED_20000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_25GB:
|
|
||||||
speed = ICE_LINK_SPEED_25000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_40GB:
|
|
||||||
speed = ICE_LINK_SPEED_40000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_50GB:
|
|
||||||
speed = ICE_LINK_SPEED_50000MBPS;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_100GB:
|
|
||||||
speed = ICE_LINK_SPEED_100000MBPS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
speed = ICE_LINK_SPEED_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* Virtchnl speeds are not defined for every speed supported in
|
/* Virtchnl speeds are not defined for every speed supported in
|
||||||
* the hardware. To maintain compatibility with older AVF
|
* the hardware. To maintain compatibility with older AVF
|
||||||
* drivers, while reporting the speed the new speed values are
|
* drivers, while reporting the speed the new speed values are
|
||||||
* resolved to the closest known virtchnl speeds
|
* resolved to the closest known virtchnl speeds
|
||||||
*/
|
*/
|
||||||
switch (link_speed) {
|
speed = ice_legacy_aq_to_vc_speed[fls(link_speed) - 1];
|
||||||
case ICE_AQ_LINK_SPEED_10MB:
|
|
||||||
case ICE_AQ_LINK_SPEED_100MB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_100MB;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_1000MB:
|
|
||||||
case ICE_AQ_LINK_SPEED_2500MB:
|
|
||||||
case ICE_AQ_LINK_SPEED_5GB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_1GB;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_10GB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_10GB;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_20GB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_20GB;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_25GB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_25GB;
|
|
||||||
break;
|
|
||||||
case ICE_AQ_LINK_SPEED_40GB:
|
|
||||||
case ICE_AQ_LINK_SPEED_50GB:
|
|
||||||
case ICE_AQ_LINK_SPEED_100GB:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_40GB;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
speed = (u32)VIRTCHNL_LINK_SPEED_UNKNOWN;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return speed;
|
return speed;
|
||||||
|
|
Loading…
Add table
Reference in a new issue