From d3c07f0079b9a265784400d18e43dcd81f78bdf9 Mon Sep 17 00:00:00 2001 From: Josep Orga Date: Sun, 19 Apr 2020 12:20:17 +0200 Subject: [PATCH] =?utf8?q?net:=20wireless:=20Wilc=20add=20firmware=20reloa?= =?utf8?q?d=20retries.=20=09=C2=B7Based=20on=20the=20function=20wl12xx=5Fi?= =?utf8?q?nit=5Ffw=20in=20./drivers/net/wireless/ti/wlcore/main.c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Josep Orga --- drivers/net/wireless/mchp/wilc_netdev.c | 39 +++++++++++++++---------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/drivers/net/wireless/mchp/wilc_netdev.c b/drivers/net/wireless/mchp/wilc_netdev.c index 9c95f2c2a16b..a3e012885f28 100644 --- a/drivers/net/wireless/mchp/wilc_netdev.c +++ b/drivers/net/wireless/mchp/wilc_netdev.c @@ -18,6 +18,7 @@ #include "wilc_wfi_cfgoperations.h" #define WILC_MULTICAST_TABLE_SIZE 8 +#define WILC_BOOT_RETRIES 5 static int wilc_mac_open(struct net_device *ndev); static int wilc_mac_close(struct net_device *ndev); @@ -558,24 +559,32 @@ static int wilc_start_firmware(struct net_device *dev) struct wilc_vif *vif = netdev_priv(dev); struct wilc *wilc = vif->wilc; int ret = 0; + int retries = WILC_BOOT_RETRIES; + while (retries) { + retries--; + PRINT_INFO(vif->ndev, INIT_DBG, "Starting Firmware ...\n"); - PRINT_INFO(vif->ndev, INIT_DBG, "Starting Firmware ...\n"); - - ret = wilc_wlan_start(wilc); - if (ret < 0) { - PRINT_ER(dev, "Failed to start Firmware\n"); - return ret; - } - PRINT_INFO(vif->ndev, INIT_DBG, "Waiting for FW to get ready ...\n"); + ret = wilc_wlan_start(wilc); + if (ret < 0) { + PRINT_ER(dev, "Failed to start Firmware\n"); + return ret; + } + PRINT_INFO(vif->ndev, INIT_DBG, "Waiting for FW to get ready ...\n"); - if (!wait_for_completion_timeout(&wilc->sync_event, - msecs_to_jiffies(500))) { - PRINT_INFO(vif->ndev, INIT_DBG, "Firmware start timed out\n"); - return -ETIME; + if (!wait_for_completion_timeout(&wilc->sync_event, + msecs_to_jiffies(500))) { + PRINT_INFO(vif->ndev, INIT_DBG, "Firmware start timed out\n"); + ret = -ETIME; + } + else { + PRINT_INFO(vif->ndev, INIT_DBG, "Firmware successfully started\n"); + ret = 0; + goto out; + } + PRINT_INFO(vif->ndev, INIT_DBG, "Reload Firmware ...\n"); } - PRINT_INFO(vif->ndev, INIT_DBG, "Firmware successfully started\n"); - - return 0; +out: + return ret; } static int wilc_firmware_download(struct net_device *dev) -- 2.17.1