mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
ice: Limit Max TCs on devices with more than 4 ports
This patch limits the max TCs set by the driver to the value provided by the firmware as per the capabilities of the device. Otherwise, hard coding to 8 TC max would fail the device configurations with more than 4 ports. Signed-off-by: Usha Ketineni <usha.k.ketineni@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
6a025730e0
commit
a257f188b7
@ -91,6 +91,7 @@ struct ice_aqc_list_caps_elem {
|
||||
#define ICE_AQC_CAPS_SRIOV 0x0012
|
||||
#define ICE_AQC_CAPS_VF 0x0013
|
||||
#define ICE_AQC_CAPS_VSI 0x0017
|
||||
#define ICE_AQC_CAPS_DCB 0x0018
|
||||
#define ICE_AQC_CAPS_RSS 0x0040
|
||||
#define ICE_AQC_CAPS_RXQS 0x0041
|
||||
#define ICE_AQC_CAPS_TXQS 0x0042
|
||||
|
@ -1594,6 +1594,18 @@ ice_parse_caps(struct ice_hw *hw, void *buf, u32 cap_count,
|
||||
prefix, func_p->guar_num_vsi);
|
||||
}
|
||||
break;
|
||||
case ICE_AQC_CAPS_DCB:
|
||||
caps->dcb = (number == 1);
|
||||
caps->active_tc_bitmap = logical_id;
|
||||
caps->maxtc = phys_id;
|
||||
ice_debug(hw, ICE_DBG_INIT,
|
||||
"%s: DCB = %d\n", prefix, caps->dcb);
|
||||
ice_debug(hw, ICE_DBG_INIT,
|
||||
"%s: active TC bitmap = %d\n", prefix,
|
||||
caps->active_tc_bitmap);
|
||||
ice_debug(hw, ICE_DBG_INIT,
|
||||
"%s: TC max = %d\n", prefix, caps->maxtc);
|
||||
break;
|
||||
case ICE_AQC_CAPS_RSS:
|
||||
caps->rss_table_size = number;
|
||||
caps->rss_table_entry_width = logical_id;
|
||||
|
@ -413,7 +413,7 @@ static int ice_dcb_sw_dflt_cfg(struct ice_pf *pf, bool locked)
|
||||
memset(&pi->local_dcbx_cfg, 0, sizeof(*dcbcfg));
|
||||
|
||||
dcbcfg->etscfg.willing = 1;
|
||||
dcbcfg->etscfg.maxtcs = 8;
|
||||
dcbcfg->etscfg.maxtcs = hw->func_caps.common_cap.maxtc;
|
||||
dcbcfg->etscfg.tcbwtable[0] = 100;
|
||||
dcbcfg->etscfg.tsatable[0] = ICE_IEEE_TSA_ETS;
|
||||
|
||||
@ -422,7 +422,7 @@ static int ice_dcb_sw_dflt_cfg(struct ice_pf *pf, bool locked)
|
||||
dcbcfg->etsrec.willing = 0;
|
||||
|
||||
dcbcfg->pfc.willing = 1;
|
||||
dcbcfg->pfc.pfccap = IEEE_8021QAZ_MAX_TCS;
|
||||
dcbcfg->pfc.pfccap = hw->func_caps.common_cap.maxtc;
|
||||
|
||||
dcbcfg->numapps = 1;
|
||||
dcbcfg->app[0].selector = ICE_APP_SEL_ETHTYPE;
|
||||
@ -454,6 +454,9 @@ int ice_init_pf_dcb(struct ice_pf *pf, bool locked)
|
||||
err = ice_init_dcb(hw);
|
||||
if (err) {
|
||||
/* FW LLDP is disabled, activate SW DCBX/LLDP mode */
|
||||
dev_info(&pf->pdev->dev,
|
||||
"DCB is enabled in the hardware, max number of TCs supported on this port are %d\n",
|
||||
pf->hw.func_caps.common_cap.maxtc);
|
||||
dev_info(&pf->pdev->dev,
|
||||
"FW LLDP is disabled, DCBx/LLDP in SW mode.\n");
|
||||
port_info->is_sw_lldp = true;
|
||||
@ -484,6 +487,9 @@ int ice_init_pf_dcb(struct ice_pf *pf, bool locked)
|
||||
if (err)
|
||||
goto dcb_init_err;
|
||||
|
||||
dev_info(&pf->pdev->dev,
|
||||
"DCB is enabled in the hardware, max number of TCs supported on this port are %d\n",
|
||||
pf->hw.func_caps.common_cap.maxtc);
|
||||
dev_info(&pf->pdev->dev, "DCBX offload supported\n");
|
||||
return err;
|
||||
|
||||
|
@ -139,6 +139,9 @@ struct ice_phy_info {
|
||||
/* Common HW capabilities for SW use */
|
||||
struct ice_hw_common_caps {
|
||||
u32 valid_functions;
|
||||
/* DCB capabilities */
|
||||
u32 active_tc_bitmap;
|
||||
u32 maxtc;
|
||||
|
||||
/* Tx/Rx queues */
|
||||
u16 num_rxq; /* Number/Total Rx queues */
|
||||
|
Loading…
Reference in New Issue
Block a user