Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue

Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2024-06-11 (ice)

This series contains updates to ice driver only.

En-Wei Wu resolves IRQ collision during suspend.

Paul corrects 200Gbps speed being reported as unknown.

Wojciech adds retry mechanism when package download fails.

* '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
  ice: implement AQ download pkg retry
  ice: fix 200G link speed message log
  ice: avoid IRQ collision to fix init failure on ACPI S3 resume
====================

Link: https://lore.kernel.org/r/20240613154514.1948785-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2024-06-14 19:05:38 -07:00
commit 143492fce3
2 changed files with 30 additions and 3 deletions

View File

@ -1339,6 +1339,7 @@ ice_dwnld_cfg_bufs_no_lock(struct ice_hw *hw, struct ice_buf *bufs, u32 start,
for (i = 0; i < count; i++) {
bool last = false;
int try_cnt = 0;
int status;
bh = (struct ice_buf_hdr *)(bufs + start + i);
@ -1346,8 +1347,26 @@ ice_dwnld_cfg_bufs_no_lock(struct ice_hw *hw, struct ice_buf *bufs, u32 start,
if (indicate_last)
last = ice_is_last_download_buffer(bh, i, count);
status = ice_aq_download_pkg(hw, bh, ICE_PKG_BUF_SIZE, last,
&offset, &info, NULL);
while (1) {
status = ice_aq_download_pkg(hw, bh, ICE_PKG_BUF_SIZE,
last, &offset, &info,
NULL);
if (hw->adminq.sq_last_status != ICE_AQ_RC_ENOSEC &&
hw->adminq.sq_last_status != ICE_AQ_RC_EBADSIG)
break;
try_cnt++;
if (try_cnt == 5)
break;
msleep(20);
}
if (try_cnt)
dev_dbg(ice_hw_to_dev(hw),
"ice_aq_download_pkg number of retries: %d\n",
try_cnt);
/* Save AQ status from download package */
if (status) {

View File

@ -805,6 +805,9 @@ void ice_print_link_msg(struct ice_vsi *vsi, bool isup)
}
switch (vsi->port_info->phy.link_info.link_speed) {
case ICE_AQ_LINK_SPEED_200GB:
speed = "200 G";
break;
case ICE_AQ_LINK_SPEED_100GB:
speed = "100 G";
break;
@ -5564,7 +5567,7 @@ static int ice_suspend(struct device *dev)
*/
disabled = ice_service_task_stop(pf);
ice_unplug_aux_dev(pf);
ice_deinit_rdma(pf);
/* Already suspended?, then there is nothing to do */
if (test_and_set_bit(ICE_SUSPENDED, pf->state)) {
@ -5644,6 +5647,11 @@ static int ice_resume(struct device *dev)
if (ret)
dev_err(dev, "Cannot restore interrupt scheme: %d\n", ret);
ret = ice_init_rdma(pf);
if (ret)
dev_err(dev, "Reinitialize RDMA during resume failed: %d\n",
ret);
clear_bit(ICE_DOWN, pf->state);
/* Now perform PF reset and rebuild */
reset_type = ICE_RESET_PFR;