diff options
Diffstat (limited to 'fwdl.c')
-rw-r--r-- | fwdl.c | 29 |
1 files changed, 8 insertions, 21 deletions
@@ -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) && |