mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 18:53:52 +08:00
i40e: Check for LLDP AdminStatus before querying DCBX
This patch adds a check whether LLDP Agent's default AdminStatus is enabled or disabled on a given port. If it is disabled then it sets the DCBX status to disabled as well; and would not query firmware for any DCBX configuration data. Change-ID: I73c0b9f0adbf4cae177d14914b20a48c9a8f50fd Signed-off-by: Neerav Parikh <neerav.parikh@intel.com> Tested-By: Jack Morgan <jack.morgan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
9fa61dd215
commit
e1c4751ee2
@ -640,10 +640,27 @@ out:
|
|||||||
i40e_status i40e_init_dcb(struct i40e_hw *hw)
|
i40e_status i40e_init_dcb(struct i40e_hw *hw)
|
||||||
{
|
{
|
||||||
i40e_status ret = 0;
|
i40e_status ret = 0;
|
||||||
|
struct i40e_lldp_variables lldp_cfg;
|
||||||
|
u8 adminstatus = 0;
|
||||||
|
|
||||||
if (!hw->func_caps.dcb)
|
if (!hw->func_caps.dcb)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
/* Read LLDP NVM area */
|
||||||
|
ret = i40e_read_lldp_cfg(hw, &lldp_cfg);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* Get the LLDP AdminStatus for the current port */
|
||||||
|
adminstatus = lldp_cfg.adminstatus >> (hw->port * 4);
|
||||||
|
adminstatus &= 0xF;
|
||||||
|
|
||||||
|
/* LLDP agent disabled */
|
||||||
|
if (!adminstatus) {
|
||||||
|
hw->dcbx_status = I40E_DCBX_STATUS_DISABLED;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get DCBX status */
|
/* Get DCBX status */
|
||||||
ret = i40e_get_dcbx_status(hw, &hw->dcbx_status);
|
ret = i40e_get_dcbx_status(hw, &hw->dcbx_status);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -655,6 +672,8 @@ i40e_status i40e_init_dcb(struct i40e_hw *hw)
|
|||||||
case I40E_DCBX_STATUS_IN_PROGRESS:
|
case I40E_DCBX_STATUS_IN_PROGRESS:
|
||||||
/* Get current DCBX configuration */
|
/* Get current DCBX configuration */
|
||||||
ret = i40e_get_dcb_config(hw);
|
ret = i40e_get_dcb_config(hw);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
break;
|
break;
|
||||||
case I40E_DCBX_STATUS_DISABLED:
|
case I40E_DCBX_STATUS_DISABLED:
|
||||||
return ret;
|
return ret;
|
||||||
@ -671,3 +690,33 @@ i40e_status i40e_init_dcb(struct i40e_hw *hw)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i40e_read_lldp_cfg - read LLDP Configuration data from NVM
|
||||||
|
* @hw: pointer to the HW structure
|
||||||
|
* @lldp_cfg: pointer to hold lldp configuration variables
|
||||||
|
*
|
||||||
|
* Reads the LLDP configuration data from NVM
|
||||||
|
**/
|
||||||
|
i40e_status i40e_read_lldp_cfg(struct i40e_hw *hw,
|
||||||
|
struct i40e_lldp_variables *lldp_cfg)
|
||||||
|
{
|
||||||
|
i40e_status ret = 0;
|
||||||
|
u32 offset = (2 * I40E_NVM_LLDP_CFG_PTR);
|
||||||
|
|
||||||
|
if (!lldp_cfg)
|
||||||
|
return I40E_ERR_PARAM;
|
||||||
|
|
||||||
|
ret = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
|
||||||
|
if (ret)
|
||||||
|
goto err_lldp_cfg;
|
||||||
|
|
||||||
|
ret = i40e_aq_read_nvm(hw, I40E_SR_EMP_MODULE_PTR, offset,
|
||||||
|
sizeof(struct i40e_lldp_variables),
|
||||||
|
(u8 *)lldp_cfg,
|
||||||
|
true, NULL);
|
||||||
|
i40e_release_nvm(hw);
|
||||||
|
|
||||||
|
err_lldp_cfg:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -235,6 +235,8 @@ i40e_status i40e_aq_query_switch_comp_bw_config(struct i40e_hw *hw,
|
|||||||
struct i40e_asq_cmd_details *cmd_details);
|
struct i40e_asq_cmd_details *cmd_details);
|
||||||
i40e_status i40e_aq_resume_port_tx(struct i40e_hw *hw,
|
i40e_status i40e_aq_resume_port_tx(struct i40e_hw *hw,
|
||||||
struct i40e_asq_cmd_details *cmd_details);
|
struct i40e_asq_cmd_details *cmd_details);
|
||||||
|
i40e_status i40e_read_lldp_cfg(struct i40e_hw *hw,
|
||||||
|
struct i40e_lldp_variables *lldp_cfg);
|
||||||
/* i40e_common */
|
/* i40e_common */
|
||||||
i40e_status i40e_init_shared_code(struct i40e_hw *hw);
|
i40e_status i40e_init_shared_code(struct i40e_hw *hw);
|
||||||
i40e_status i40e_pf_reset(struct i40e_hw *hw);
|
i40e_status i40e_pf_reset(struct i40e_hw *hw);
|
||||||
|
@ -1377,6 +1377,18 @@ enum i40e_reset_type {
|
|||||||
I40E_RESET_EMPR = 3,
|
I40E_RESET_EMPR = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* IEEE 802.1AB LLDP Agent Variables from NVM */
|
||||||
|
#define I40E_NVM_LLDP_CFG_PTR 0xD
|
||||||
|
struct i40e_lldp_variables {
|
||||||
|
u16 length;
|
||||||
|
u16 adminstatus;
|
||||||
|
u16 msgfasttx;
|
||||||
|
u16 msgtxinterval;
|
||||||
|
u16 txparams;
|
||||||
|
u16 timers;
|
||||||
|
u16 crc8;
|
||||||
|
};
|
||||||
|
|
||||||
/* RSS Hash Table Size */
|
/* RSS Hash Table Size */
|
||||||
#define I40E_PFQF_CTL_0_HASHLUTSIZE_512 0x00010000
|
#define I40E_PFQF_CTL_0_HASHLUTSIZE_512 0x00010000
|
||||||
#endif /* _I40E_TYPE_H_ */
|
#endif /* _I40E_TYPE_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user