From ad61a825f2bb0ebafe73725255e98801624fdfca Mon Sep 17 00:00:00 2001 From: Josep Orga Date: Sun, 22 Mar 2020 19:06:42 +0100 Subject: [PATCH] =?utf8?q?ARM:=20wilc=5Fnetdev.c:=20Added=20firmware=20rel?= =?utf8?q?oad=20retries:=20=09=C2=B7Based=20on=20the=20function=20wl12xx?= =?utf8?q?=5Finit=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