diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-08-25 01:40:50 +0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-15 23:02:32 +0400 |
commit | fa052e912d4d575b86a7fd3623380aba897a1a8e (patch) | |
tree | 21639a0600344bd6b55691566d56b5b95473e424 /drivers | |
parent | 3ef5a262ad0061d6147da7e3ee03aead7c160d91 (diff) | |
download | linux-fa052e912d4d575b86a7fd3623380aba897a1a8e.tar.xz |
Staging: rtl8192e: fix timeouts on firmware download
We need to actually wait a specific ammount of time, not just hope that
a set number of loops will be long enough.
Based on a conversation with Ralink, and a proposed patch for their
older kernel driver.
Cc: david woo <xinhua_wu@realsil.com.cn>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/rtl8192e/r819xE_firmware.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/staging/rtl8192e/r819xE_firmware.c b/drivers/staging/rtl8192e/r819xE_firmware.c index 72f679274bc4..1f9e413bcd49 100644 --- a/drivers/staging/rtl8192e/r819xE_firmware.c +++ b/drivers/staging/rtl8192e/r819xE_firmware.c @@ -122,19 +122,19 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address, */ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev) { + unsigned long timeout; bool rt_status = true; - int check_putcodeOK_time = 200000; - int check_bootOk_time = 200000; u32 CPU_status = 0; /* Check whether put code OK */ - do { + timeout = jiffies + msecs_to_jiffies(20); + while (time_before(jiffies, timeout)) { CPU_status = read_nic_dword(dev, CPU_GEN); if (CPU_status & CPU_GEN_PUT_CODE_OK) break; - - } while (check_putcodeOK_time--); + msleep(2); + } if (!(CPU_status & CPU_GEN_PUT_CODE_OK)) { RT_TRACE(COMP_ERR, "Download Firmware: Put code fail!\n"); @@ -150,12 +150,14 @@ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev) mdelay(1); /* Check whether CPU boot OK */ - do { + timeout = jiffies + msecs_to_jiffies(20); + while (time_before(jiffies, timeout)) { CPU_status = read_nic_dword(dev, CPU_GEN); if (CPU_status & CPU_GEN_BOOT_RDY) break; - } while (check_bootOk_time--); + msleep(2); + } if (!(CPU_status & CPU_GEN_BOOT_RDY)) goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; @@ -172,19 +174,19 @@ CPUCheckMainCodeOKAndTurnOnCPU_Fail: static bool CPUcheck_firmware_ready(struct net_device *dev) { - - bool rt_status = true; - int check_time = 200000; - u32 CPU_status = 0; + unsigned long timeout; + bool rt_status = true; + u32 CPU_status = 0; /* Check Firmware Ready */ - do { + timeout = jiffies + msecs_to_jiffies(20); + while (time_before(jiffies, timeout)) { CPU_status = read_nic_dword(dev, CPU_GEN); if (CPU_status & CPU_GEN_FIRM_RDY) break; - - } while (check_time--); + msleep(2); + } if (!(CPU_status & CPU_GEN_FIRM_RDY)) goto CPUCheckFirmwareReady_Fail; |