Commit 51dac5f0 authored by Mateusz Kulikowski's avatar Mateusz Kulikowski Committed by Greg Kroah-Hartman

staging: rtl8192e: Add _rtl92e_wait_for_fw()

Add function waiting for firmware load/boot;
Remove _rtl92e_is_fw_ready() that is obsolete (can be replaced
with  _rtl92e_wait_for_fw().
Signed-off-by: default avatarMateusz Kulikowski <mateusz.kulikowski@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 58533b22
...@@ -19,6 +19,18 @@ ...@@ -19,6 +19,18 @@
#include "r8192E_firmware.h" #include "r8192E_firmware.h"
#include <linux/firmware.h> #include <linux/firmware.h>
static bool _rtl92e_wait_for_fw(struct net_device *dev, u32 mask, u32 timeout)
{
unsigned long deadline = jiffies + msecs_to_jiffies(timeout);
while (time_before(jiffies, deadline)) {
if (rtl92e_readl(dev, CPU_GEN) & mask)
return true;
mdelay(2);
}
return false;
}
static bool _rtl92e_fw_download_code(struct net_device *dev, static bool _rtl92e_fw_download_code(struct net_device *dev,
u8 *code_virtual_address, u32 buffer_len) u8 *code_virtual_address, u32 buffer_len)
{ {
...@@ -85,78 +97,30 @@ static bool _rtl92e_fw_download_code(struct net_device *dev, ...@@ -85,78 +97,30 @@ static bool _rtl92e_fw_download_code(struct net_device *dev,
static bool _rtl92e_fw_boot_cpu(struct net_device *dev) static bool _rtl92e_fw_boot_cpu(struct net_device *dev)
{ {
bool rt_status = true;
u32 CPU_status = 0; u32 CPU_status = 0;
unsigned long timeout;
timeout = jiffies + msecs_to_jiffies(200);
while (time_before(jiffies, timeout)) {
CPU_status = rtl92e_readl(dev, CPU_GEN);
if (CPU_status & CPU_GEN_PUT_CODE_OK)
break;
mdelay(2);
}
if (!(CPU_status&CPU_GEN_PUT_CODE_OK)) { if (!_rtl92e_wait_for_fw(dev, CPU_GEN_PUT_CODE_OK, 200)) {
netdev_err(dev, "Firmware download failed.\n"); netdev_err(dev, "Firmware download failed.\n");
goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; goto CPUCheckMainCodeOKAndTurnOnCPU_Fail;
} else {
RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n");
} }
RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n");
CPU_status = rtl92e_readl(dev, CPU_GEN); CPU_status = rtl92e_readl(dev, CPU_GEN);
rtl92e_writeb(dev, CPU_GEN, rtl92e_writeb(dev, CPU_GEN,
(u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff)); (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff));
mdelay(1); mdelay(1);
timeout = jiffies + msecs_to_jiffies(200); if (!_rtl92e_wait_for_fw(dev, CPU_GEN_BOOT_RDY, 200)) {
while (time_before(jiffies, timeout)) {
CPU_status = rtl92e_readl(dev, CPU_GEN);
if (CPU_status&CPU_GEN_BOOT_RDY)
break;
mdelay(2);
}
if (!(CPU_status&CPU_GEN_BOOT_RDY)) {
netdev_err(dev, "Firmware boot failed.\n"); netdev_err(dev, "Firmware boot failed.\n");
goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; goto CPUCheckMainCodeOKAndTurnOnCPU_Fail;
} }
RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n"); RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n");
return rt_status; return true;
CPUCheckMainCodeOKAndTurnOnCPU_Fail: CPUCheckMainCodeOKAndTurnOnCPU_Fail:
rt_status = false; return false;
return rt_status;
}
static bool _rtl92e_is_fw_ready(struct net_device *dev)
{
bool rt_status = true;
u32 CPU_status = 0;
unsigned long timeout;
timeout = jiffies + msecs_to_jiffies(20);
while (time_before(jiffies, timeout)) {
CPU_status = rtl92e_readl(dev, CPU_GEN);
if (CPU_status&CPU_GEN_FIRM_RDY)
break;
mdelay(2);
}
if (!(CPU_status&CPU_GEN_FIRM_RDY))
goto CPUCheckFirmwareReady_Fail;
else
RT_TRACE(COMP_FIRMWARE, "Download Firmware: Firmware ready!\n");
return rt_status;
CPUCheckFirmwareReady_Fail:
rt_status = false;
return rt_status;
} }
static bool _rtl92e_fw_check_ready(struct net_device *dev, static bool _rtl92e_fw_check_ready(struct net_device *dev,
...@@ -186,14 +150,13 @@ static bool _rtl92e_fw_check_ready(struct net_device *dev, ...@@ -186,14 +150,13 @@ static bool _rtl92e_fw_check_ready(struct net_device *dev,
pfirmware->status = FW_STATUS_4_MOVE_DATA_CODE; pfirmware->status = FW_STATUS_4_MOVE_DATA_CODE;
mdelay(1); mdelay(1);
rt_status = _rtl92e_is_fw_ready(dev); rt_status = _rtl92e_wait_for_fw(dev, CPU_GEN_FIRM_RDY, 20);
if (rt_status) if (rt_status)
pfirmware->status = FW_STATUS_5_READY; pfirmware->status = FW_STATUS_5_READY;
else else
RT_TRACE(COMP_FIRMWARE, RT_TRACE(COMP_FIRMWARE,
"_rtl92e_is_fw_ready fail(%d)!\n", "_rtl92e_is_fw_ready fail(%d)!\n",
rt_status); rt_status);
break; break;
default: default:
rt_status = false; rt_status = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment