From: Josep Orga Date: Sun, 19 Apr 2020 10:20:17 +0000 (+0200) Subject: net: wireless: Wilc add firmware reload retries. X-Git-Tag: rel_imx_4.19.35_1.1.0-somdevices.0~11 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=d3c07f0079b9a265784400d18e43dcd81f78bdf9;p=linux.git net: wireless: Wilc add 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)