From: Josep Orga Date: Sun, 22 Mar 2020 18:06:42 +0000 (+0100) Subject: ARM: wilc_netdev.c: Added firmware reload retries: X-Git-Tag: C0P2-H0.0--20200415~4 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=ad61a825f2bb0ebafe73725255e98801624fdfca;p=linux.git ARM: wilc_netdev.c: Added firmware reload retries: ·Based on the function wl12xx_init_fw in ./drivers/net/wireless/ti/wlcore/main.c. Signed-off-by: Josep Orga --- 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)