Commit 143492fc authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files
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: default avatarJakub Kicinski <kuba@kernel.org>
parents 7ed352d3 a27f6ac9
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -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) {
+9 −1
Original line number Diff line number Diff line
@@ -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;