wcn36xx: Wait longer for SMD commands to complete
authorPontus Fuchs <pontus.fuchs@gmail.com>
Wed, 12 Feb 2014 19:04:42 +0000 (19:04 +0000)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 13 Feb 2014 20:20:17 +0000 (15:20 -0500)
On some wcnss firmwares the start command can take up to 300ms to
complete. Currently there is a 200ms timeout for SMD command to
complete which causes the start to fail.

Increase the timeout to 500ms. Also improve debug information
regarding SMD command completion time.

Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wcn36xx/smd.c
drivers/net/wireless/ath/wcn36xx/smd.h

index 425365ce6139d788aa65823f9c9e08a10855ce29..ad93cc791110847712331d22d218c17df10bd658 100644 (file)
@@ -195,9 +195,11 @@ static void wcn36xx_smd_set_sta_params(struct wcn36xx *wcn,
 static int wcn36xx_smd_send_and_wait(struct wcn36xx *wcn, size_t len)
 {
        int ret = 0;
+       unsigned long start;
        wcn36xx_dbg_dump(WCN36XX_DBG_SMD_DUMP, "HAL >>> ", wcn->hal_buf, len);
 
        init_completion(&wcn->hal_rsp_compl);
+       start = jiffies;
        ret = wcn->ctrl_ops->tx(wcn->hal_buf, len);
        if (ret) {
                wcn36xx_err("HAL TX failed\n");
@@ -205,10 +207,13 @@ static int wcn36xx_smd_send_and_wait(struct wcn36xx *wcn, size_t len)
        }
        if (wait_for_completion_timeout(&wcn->hal_rsp_compl,
                msecs_to_jiffies(HAL_MSG_TIMEOUT)) <= 0) {
-               wcn36xx_err("Timeout while waiting SMD response\n");
+               wcn36xx_err("Timeout! No SMD response in %dms\n",
+                           HAL_MSG_TIMEOUT);
                ret = -ETIME;
                goto out;
        }
+       wcn36xx_dbg(WCN36XX_DBG_SMD, "SMD command completed in %dms",
+                   jiffies_to_msecs(jiffies - start));
 out:
        return ret;
 }
index e7c39019c6f1aece7d149b410a77bc42ae05093d..c46246f8acb9e751298f67a8a52014dcdbb7de68 100644 (file)
@@ -24,7 +24,7 @@
 
 #define WCN36XX_HAL_BUF_SIZE                           4096
 
-#define HAL_MSG_TIMEOUT 200
+#define HAL_MSG_TIMEOUT 500
 #define WCN36XX_SMSM_WLAN_TX_ENABLE                    0x00000400
 #define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY               0x00000200
 /* The PNO version info be contained in the rsp msg */