Commit 03e7e72c authored by David S. Miller's avatar David S. Miller

Merge branch '100GbE' of https://github.com/anguy11/net-queue

Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2020-09-30

This series contains updates to ice driver only.

Jake increases the wait time for firmware response as it can take longer
than the current wait time. Preserves the NVM capabilities of the device in
safe mode so the device reports its NVM update capabilities properly
when in this state.

v2: Added cover letter
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 1f25c9bb be49b1ad
...@@ -2288,26 +2288,28 @@ void ice_set_safe_mode_caps(struct ice_hw *hw) ...@@ -2288,26 +2288,28 @@ void ice_set_safe_mode_caps(struct ice_hw *hw)
{ {
struct ice_hw_func_caps *func_caps = &hw->func_caps; struct ice_hw_func_caps *func_caps = &hw->func_caps;
struct ice_hw_dev_caps *dev_caps = &hw->dev_caps; struct ice_hw_dev_caps *dev_caps = &hw->dev_caps;
u32 valid_func, rxq_first_id, txq_first_id; struct ice_hw_common_caps cached_caps;
u32 msix_vector_first_id, max_mtu;
u32 num_funcs; u32 num_funcs;
/* cache some func_caps values that should be restored after memset */ /* cache some func_caps values that should be restored after memset */
valid_func = func_caps->common_cap.valid_functions; cached_caps = func_caps->common_cap;
txq_first_id = func_caps->common_cap.txq_first_id;
rxq_first_id = func_caps->common_cap.rxq_first_id;
msix_vector_first_id = func_caps->common_cap.msix_vector_first_id;
max_mtu = func_caps->common_cap.max_mtu;
/* unset func capabilities */ /* unset func capabilities */
memset(func_caps, 0, sizeof(*func_caps)); memset(func_caps, 0, sizeof(*func_caps));
#define ICE_RESTORE_FUNC_CAP(name) \
func_caps->common_cap.name = cached_caps.name
/* restore cached values */ /* restore cached values */
func_caps->common_cap.valid_functions = valid_func; ICE_RESTORE_FUNC_CAP(valid_functions);
func_caps->common_cap.txq_first_id = txq_first_id; ICE_RESTORE_FUNC_CAP(txq_first_id);
func_caps->common_cap.rxq_first_id = rxq_first_id; ICE_RESTORE_FUNC_CAP(rxq_first_id);
func_caps->common_cap.msix_vector_first_id = msix_vector_first_id; ICE_RESTORE_FUNC_CAP(msix_vector_first_id);
func_caps->common_cap.max_mtu = max_mtu; ICE_RESTORE_FUNC_CAP(max_mtu);
ICE_RESTORE_FUNC_CAP(nvm_unified_update);
ICE_RESTORE_FUNC_CAP(nvm_update_pending_nvm);
ICE_RESTORE_FUNC_CAP(nvm_update_pending_orom);
ICE_RESTORE_FUNC_CAP(nvm_update_pending_netlist);
/* one Tx and one Rx queue in safe mode */ /* one Tx and one Rx queue in safe mode */
func_caps->common_cap.num_rxq = 1; func_caps->common_cap.num_rxq = 1;
...@@ -2318,22 +2320,25 @@ void ice_set_safe_mode_caps(struct ice_hw *hw) ...@@ -2318,22 +2320,25 @@ void ice_set_safe_mode_caps(struct ice_hw *hw)
func_caps->guar_num_vsi = 1; func_caps->guar_num_vsi = 1;
/* cache some dev_caps values that should be restored after memset */ /* cache some dev_caps values that should be restored after memset */
valid_func = dev_caps->common_cap.valid_functions; cached_caps = dev_caps->common_cap;
txq_first_id = dev_caps->common_cap.txq_first_id;
rxq_first_id = dev_caps->common_cap.rxq_first_id;
msix_vector_first_id = dev_caps->common_cap.msix_vector_first_id;
max_mtu = dev_caps->common_cap.max_mtu;
num_funcs = dev_caps->num_funcs; num_funcs = dev_caps->num_funcs;
/* unset dev capabilities */ /* unset dev capabilities */
memset(dev_caps, 0, sizeof(*dev_caps)); memset(dev_caps, 0, sizeof(*dev_caps));
#define ICE_RESTORE_DEV_CAP(name) \
dev_caps->common_cap.name = cached_caps.name
/* restore cached values */ /* restore cached values */
dev_caps->common_cap.valid_functions = valid_func; ICE_RESTORE_DEV_CAP(valid_functions);
dev_caps->common_cap.txq_first_id = txq_first_id; ICE_RESTORE_DEV_CAP(txq_first_id);
dev_caps->common_cap.rxq_first_id = rxq_first_id; ICE_RESTORE_DEV_CAP(rxq_first_id);
dev_caps->common_cap.msix_vector_first_id = msix_vector_first_id; ICE_RESTORE_DEV_CAP(msix_vector_first_id);
dev_caps->common_cap.max_mtu = max_mtu; ICE_RESTORE_DEV_CAP(max_mtu);
ICE_RESTORE_DEV_CAP(nvm_unified_update);
ICE_RESTORE_DEV_CAP(nvm_update_pending_nvm);
ICE_RESTORE_DEV_CAP(nvm_update_pending_orom);
ICE_RESTORE_DEV_CAP(nvm_update_pending_netlist);
dev_caps->num_funcs = num_funcs; dev_caps->num_funcs = num_funcs;
/* one Tx and one Rx queue per function in safe mode */ /* one Tx and one Rx queue per function in safe mode */
......
...@@ -289,7 +289,13 @@ ice_write_one_nvm_block(struct ice_pf *pf, u16 module, u32 offset, ...@@ -289,7 +289,13 @@ ice_write_one_nvm_block(struct ice_pf *pf, u16 module, u32 offset,
return -EIO; return -EIO;
} }
err = ice_aq_wait_for_event(pf, ice_aqc_opc_nvm_write, HZ, &event); /* In most cases, firmware reports a write completion within a few
* milliseconds. However, it has been observed that a completion might
* take more than a second to complete in some cases. The timeout here
* is conservative and is intended to prevent failure to update when
* firmware is slow to respond.
*/
err = ice_aq_wait_for_event(pf, ice_aqc_opc_nvm_write, 15 * HZ, &event);
if (err) { if (err) {
dev_err(dev, "Timed out waiting for firmware write completion for module 0x%02x, err %d\n", dev_err(dev, "Timed out waiting for firmware write completion for module 0x%02x, err %d\n",
module, err); module, err);
...@@ -513,7 +519,7 @@ static int ice_switch_flash_banks(struct ice_pf *pf, u8 activate_flags, ...@@ -513,7 +519,7 @@ static int ice_switch_flash_banks(struct ice_pf *pf, u8 activate_flags,
return -EIO; return -EIO;
} }
err = ice_aq_wait_for_event(pf, ice_aqc_opc_nvm_write_activate, HZ, err = ice_aq_wait_for_event(pf, ice_aqc_opc_nvm_write_activate, 30 * HZ,
&event); &event);
if (err) { if (err) {
dev_err(dev, "Timed out waiting for firmware to switch active flash banks, err %d\n", dev_err(dev, "Timed out waiting for firmware to switch active flash banks, err %d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment