|
@@ -454,6 +454,7 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
int t = 0;
|
|
int t = 0;
|
|
|
|
+ int iter;
|
|
|
|
|
|
IWL_DEBUG_INFO(trans, "iwl_trans_prepare_card_hw enter\n");
|
|
IWL_DEBUG_INFO(trans, "iwl_trans_prepare_card_hw enter\n");
|
|
|
|
|
|
@@ -462,18 +463,23 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
|
if (ret >= 0)
|
|
if (ret >= 0)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- /* If HW is not ready, prepare the conditions to check again */
|
|
|
|
- iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
|
|
|
- CSR_HW_IF_CONFIG_REG_PREPARE);
|
|
|
|
|
|
+ for (iter = 0; iter < 10; iter++) {
|
|
|
|
+ /* If HW is not ready, prepare the conditions to check again */
|
|
|
|
+ iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
|
|
|
+ CSR_HW_IF_CONFIG_REG_PREPARE);
|
|
|
|
+
|
|
|
|
+ do {
|
|
|
|
+ ret = iwl_pcie_set_hw_ready(trans);
|
|
|
|
+ if (ret >= 0)
|
|
|
|
+ return 0;
|
|
|
|
|
|
- do {
|
|
|
|
- ret = iwl_pcie_set_hw_ready(trans);
|
|
|
|
- if (ret >= 0)
|
|
|
|
- return 0;
|
|
|
|
|
|
+ usleep_range(200, 1000);
|
|
|
|
+ t += 200;
|
|
|
|
+ } while (t < 150000);
|
|
|
|
+ msleep(25);
|
|
|
|
+ }
|
|
|
|
|
|
- usleep_range(200, 1000);
|
|
|
|
- t += 200;
|
|
|
|
- } while (t < 150000);
|
|
|
|
|
|
+ IWL_DEBUG_INFO(trans, "got NIC after %d iterations\n", iter);
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|