summaryrefslogtreecommitdiff
path: root/fwdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fwdl.c')
-rw-r--r--fwdl.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/fwdl.c b/fwdl.c
index e305031..f4d5fa1 100644
--- a/fwdl.c
+++ b/fwdl.c
@@ -22,9 +22,6 @@
#include "sysadpt.h"
#include "dev.h"
#include "fwcmd.h"
-#ifdef SUPPORT_MFG
-#include "mfg.h"
-#endif
#include "fwdl.h"
#define FW_DOWNLOAD_BLOCK_SIZE 256
@@ -60,12 +57,7 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
u32 size_fw_downloaded = 0;
u32 int_code = 0;
u32 len = 0;
-#ifdef SUPPORT_MFG
- u32 fwreadysignature = (priv->mfg_mode && priv->chip_type == MWL8897) ?
- MFG_FW_READY_SIGNATURE : HOSTCMD_SOFTAP_FWRDY_SIGNATURE;
-#else
u32 fwreadysignature = HOSTCMD_SOFTAP_FWRDY_SIGNATURE;
-#endif
fw = priv->fw_ucode;
@@ -74,7 +66,7 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
/* FW before jumping to boot rom, it will enable PCIe transaction retry,
* wait for boot code to stop it.
*/
- mdelay(FW_CHECK_MSECS);
+ usleep_range(FW_CHECK_MSECS * 1000, FW_CHECK_MSECS * 2000);
writel(MACREG_A2HRIC_BIT_MASK,
priv->iobase1 + MACREG_REG_A2H_INTERRUPT_CLEAR_SEL);
@@ -95,7 +87,7 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
/* make sure SCRATCH2 C40 is clear, in case we are too quick */
while (readl(priv->iobase1 + 0xc40) == 0)
- ;
+ cond_resched();
while (size_fw_downloaded < fw->size) {
len = readl(priv->iobase1 + 0xc40);
@@ -125,6 +117,7 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
int_code = readl(priv->iobase1 + 0xc1c);
if (int_code != 0)
break;
+ cond_resched();
curr_iteration--;
} while (curr_iteration);
@@ -133,6 +126,7 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
if ((int_code & MACREG_H2ARIC_BIT_DOOR_BELL) !=
MACREG_H2ARIC_BIT_DOOR_BELL)
break;
+ cond_resched();
curr_iteration--;
} while (curr_iteration);
@@ -162,19 +156,12 @@ int mwl_fwdl_download_firmware(struct ieee80211_hw *hw)
*((u32 *)&priv->pcmd_buf[1]) = 0;
mwl_fwdl_trig_pcicmd(priv);
curr_iteration = FW_MAX_NUM_CHECKS;
- if (priv->mfg_mode && priv->chip_type == MWL8897)
- writel(fwreadysignature, priv->iobase1 + 0xcf0);
do {
curr_iteration--;
- if (priv->mfg_mode && priv->chip_type == MWL8897) {
- mdelay(FW_CHECK_MSECS);
- int_code = readl(priv->iobase1 + 0xc44);
- } else {
- writel(HOSTCMD_SOFTAP_MODE,
- priv->iobase1 + MACREG_REG_GEN_PTR);
- mdelay(FW_CHECK_MSECS);
- int_code = readl(priv->iobase1 + MACREG_REG_INT_CODE);
- }
+ writel(HOSTCMD_SOFTAP_MODE,
+ priv->iobase1 + MACREG_REG_GEN_PTR);
+ usleep_range(FW_CHECK_MSECS * 1000, FW_CHECK_MSECS * 2000);
+ int_code = readl(priv->iobase1 + MACREG_REG_INT_CODE);
if (!(curr_iteration % 0xff) && (int_code != 0))
wiphy_err(hw->wiphy, "%x;", int_code);
} while ((curr_iteration) &&