aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c29
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h1
3 files changed, 15 insertions, 18 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 8216e5ca918b..e202a40cbcb7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -2306,8 +2306,7 @@ int iwlagn_start_device(struct iwl_priv *priv)
2306{ 2306{
2307 int ret; 2307 int ret;
2308 2308
2309 iwl_prepare_card_hw(priv); 2309 if (iwl_prepare_card_hw(priv)) {
2310 if (!priv->hw_ready) {
2311 IWL_WARN(priv, "Exit HW not ready\n"); 2310 IWL_WARN(priv, "Exit HW not ready\n");
2312 return -EIO; 2311 return -EIO;
2313 } 2312 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index f30735b656c0..a4f1009cb137 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2367,9 +2367,10 @@ static void iwl_down(struct iwl_priv *priv)
2367 2367
2368#define HW_READY_TIMEOUT (50) 2368#define HW_READY_TIMEOUT (50)
2369 2369
2370/* Note: returns poll_bit return value, which is >= 0 if success */
2370static int iwl_set_hw_ready(struct iwl_priv *priv) 2371static int iwl_set_hw_ready(struct iwl_priv *priv)
2371{ 2372{
2372 int ret = 0; 2373 int ret;
2373 2374
2374 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, 2375 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
2375 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY); 2376 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY);
@@ -2379,25 +2380,21 @@ static int iwl_set_hw_ready(struct iwl_priv *priv)
2379 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY, 2380 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY,
2380 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY, 2381 CSR_HW_IF_CONFIG_REG_BIT_NIC_READY,
2381 HW_READY_TIMEOUT); 2382 HW_READY_TIMEOUT);
2382 if (ret != -ETIMEDOUT)
2383 priv->hw_ready = true;
2384 else
2385 priv->hw_ready = false;
2386 2383
2387 IWL_DEBUG_INFO(priv, "hardware %s\n", 2384 IWL_DEBUG_INFO(priv, "hardware%s ready\n", ret < 0 ? " not" : "");
2388 (priv->hw_ready == 1) ? "ready" : "not ready");
2389 return ret; 2385 return ret;
2390} 2386}
2391 2387
2388/* Note: returns standard 0/-ERROR code */
2392int iwl_prepare_card_hw(struct iwl_priv *priv) 2389int iwl_prepare_card_hw(struct iwl_priv *priv)
2393{ 2390{
2394 int ret = 0; 2391 int ret;
2395 2392
2396 IWL_DEBUG_INFO(priv, "iwl_prepare_card_hw enter\n"); 2393 IWL_DEBUG_INFO(priv, "iwl_prepare_card_hw enter\n");
2397 2394
2398 ret = iwl_set_hw_ready(priv); 2395 ret = iwl_set_hw_ready(priv);
2399 if (priv->hw_ready) 2396 if (ret >= 0)
2400 return ret; 2397 return 0;
2401 2398
2402 /* If HW is not ready, prepare the conditions to check again */ 2399 /* If HW is not ready, prepare the conditions to check again */
2403 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, 2400 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
@@ -2407,10 +2404,13 @@ int iwl_prepare_card_hw(struct iwl_priv *priv)
2407 ~CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE, 2404 ~CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE,
2408 CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE, 150000); 2405 CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE, 150000);
2409 2406
2410 /* HW should be ready by now, check again. */ 2407 if (ret < 0)
2411 if (ret != -ETIMEDOUT) 2408 return ret;
2412 iwl_set_hw_ready(priv);
2413 2409
2410 /* HW should be ready by now, check again. */
2411 ret = iwl_set_hw_ready(priv);
2412 if (ret >= 0)
2413 return 0;
2414 return ret; 2414 return ret;
2415} 2415}
2416 2416
@@ -3741,8 +3741,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3741 * PCI Tx retries from interfering with C3 CPU state */ 3741 * PCI Tx retries from interfering with C3 CPU state */
3742 pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); 3742 pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);
3743 3743
3744 iwl_prepare_card_hw(priv); 3744 if (iwl_prepare_card_hw(priv)) {
3745 if (!priv->hw_ready) {
3746 IWL_WARN(priv, "Failed, HW not ready\n"); 3745 IWL_WARN(priv, "Failed, HW not ready\n");
3747 goto out_iounmap; 3746 goto out_iounmap;
3748 } 3747 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 857eb0e9e397..197fa742f79a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1503,7 +1503,6 @@ struct iwl_priv {
1503 struct timer_list statistics_periodic; 1503 struct timer_list statistics_periodic;
1504 struct timer_list ucode_trace; 1504 struct timer_list ucode_trace;
1505 struct timer_list watchdog; 1505 struct timer_list watchdog;
1506 bool hw_ready;
1507 1506
1508 struct iwl_event_log event_log; 1507 struct iwl_event_log event_log;
1509 1508