Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe9b6b72 authored by Ron Rindjunsky's avatar Ron Rindjunsky Committed by John W. Linville
Browse files

iwlwifi: activate status ready timeout only for run time ucode



This patch makes driver state timeout checks on ucode alive response
only if run time ucode have been loaded.

Signed-off-by: default avatarRon Rindjunsky <ron.rindjunsky@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7c616cba
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -156,6 +156,8 @@ static int iwl4965_load_bsm(struct iwl_priv *priv)

	IWL_DEBUG_INFO("Begin load bsm\n");

	priv->ucode_type = UCODE_RT;

	/* make sure bootstrap program is no larger than BSM's SRAM size */
	if (len > IWL_MAX_BSM_SIZE)
		return -EINVAL;
@@ -221,8 +223,6 @@ static int iwl4965_load_bsm(struct iwl_priv *priv)

	iwl_release_nic_access(priv);

	priv->ucode_type = UCODE_INIT;

	return 0;
}

@@ -269,8 +269,6 @@ static int iwl4965_set_ucode_ptrs(struct iwl_priv *priv)

	IWL_DEBUG_INFO("Runtime uCode pointers are set.\n");

	priv->ucode_type = UCODE_RT;

	return ret;
}

+4 −1
Original line number Diff line number Diff line
@@ -804,8 +804,11 @@ static int iwl5000_alive_notify(struct iwl_priv *priv)

	iwl5000_send_Xtal_calib(priv);

	if (priv->ucode_type == UCODE_RT)
	if (priv->ucode_type == UCODE_RT) {
		iwl5000_send_calib_results(priv);
		set_bit(STATUS_READY, &priv->status);
		priv->is_open = 1;
	}

	return 0;
}
+14 −12
Original line number Diff line number Diff line
@@ -4074,14 +4074,15 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw)
	if (test_bit(STATUS_IN_SUSPEND, &priv->status))
		return 0;

	/* Wait for START_ALIVE from ucode. Otherwise callbacks from
	/* Wait for START_ALIVE from Run Time ucode. Otherwise callbacks from
	 * mac80211 will not be run successfully. */
	if (priv->ucode_type == UCODE_RT) {
		ret = wait_event_interruptible_timeout(priv->wait_command_queue,
				test_bit(STATUS_READY, &priv->status),
				UCODE_READY_TIMEOUT);
		if (!ret) {
			if (!test_bit(STATUS_READY, &priv->status)) {
			IWL_ERROR("Wait for START_ALIVE timeout after %dms.\n",
				IWL_ERROR("START_ALIVE timeout after %dms.\n",
					jiffies_to_msecs(UCODE_READY_TIMEOUT));
				ret = -ETIMEDOUT;
				goto out_release_irq;
@@ -4089,6 +4090,7 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw)
		}

		priv->is_open = 1;
	}
	IWL_DEBUG_MAC80211("leave\n");
	return 0;