mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
i40e: Fix basic support for X722 devices
Acquire NVM, before issuing an AQ read nvm command for X722. We need to acquire the NVM before issuing an AQ read to the NVM otherwise we will get EBUSY from the FW. Also release when done. This fixes the two X722 issues with respect to eeprom checksum verify and reading NVM version info. With this patch in place, i40e driver will provide basic support for X722 devices. Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com> Acked-by: Jesse Brandeburg <jesse.brandeburg@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
d08f55585f
commit
07f89be81f
3 changed files with 31 additions and 6 deletions
|
@ -958,6 +958,9 @@ i40e_status i40e_init_shared_code(struct i40e_hw *hw)
|
|||
else
|
||||
hw->pf_id = (u8)(func_rid & 0x7);
|
||||
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
hw->flags |= I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE;
|
||||
|
||||
status = i40e_init_nvm(hw);
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -290,9 +290,18 @@ static i40e_status i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
|
|||
i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
|
||||
u16 *data)
|
||||
{
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
return i40e_read_nvm_word_aq(hw, offset, data);
|
||||
return i40e_read_nvm_word_srctl(hw, offset, data);
|
||||
enum i40e_status_code ret_code = 0;
|
||||
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
|
||||
ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
|
||||
if (!ret_code) {
|
||||
ret_code = i40e_read_nvm_word_aq(hw, offset, data);
|
||||
i40e_release_nvm(hw);
|
||||
}
|
||||
} else {
|
||||
ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
|
||||
}
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -397,9 +406,19 @@ static i40e_status i40e_read_nvm_buffer_aq(struct i40e_hw *hw, u16 offset,
|
|||
i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
|
||||
u16 *words, u16 *data)
|
||||
{
|
||||
if (hw->mac.type == I40E_MAC_X722)
|
||||
return i40e_read_nvm_buffer_aq(hw, offset, words, data);
|
||||
return i40e_read_nvm_buffer_srctl(hw, offset, words, data);
|
||||
enum i40e_status_code ret_code = 0;
|
||||
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
|
||||
ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
|
||||
if (!ret_code) {
|
||||
ret_code = i40e_read_nvm_buffer_aq(hw, offset, words,
|
||||
data);
|
||||
i40e_release_nvm(hw);
|
||||
}
|
||||
} else {
|
||||
ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data);
|
||||
}
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -544,6 +544,9 @@ struct i40e_hw {
|
|||
struct i40e_dcbx_config remote_dcbx_config; /* Peer Cfg */
|
||||
struct i40e_dcbx_config desired_dcbx_config; /* CEE Desired Cfg */
|
||||
|
||||
#define I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE BIT_ULL(0)
|
||||
u64 flags;
|
||||
|
||||
/* debug mask */
|
||||
u32 debug_mask;
|
||||
char err_str[16];
|
||||
|
|
Loading…
Reference in a new issue