From 094f1d2ff30cec65916196ae9d6ea9fb735a569a Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Thu, 9 Jul 2020 15:35:04 -0700 Subject: [PATCH] cnss2: Add debug assert on idle restart timeout On idle restart failure, power down the device and assert for debug. Change-Id: I0b77a9d2087e08bfa3051367a7789999c070bf00 Signed-off-by: Manikandan Mohan --- drivers/net/wireless/cnss2/main.c | 16 +++++++++++++--- drivers/net/wireless/cnss2/main.h | 2 +- drivers/net/wireless/cnss2/pci.c | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index f528e73b6538..98f59f1a209e 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -656,12 +656,22 @@ int cnss_idle_restart(struct device *dev) } timeout = cnss_get_boot_timeout(dev); + /* In Idle restart power up sequence, we have fw_boot_timer to handle + * FW initialization failure. It uses WLAN_DRIVER_LOAD_TIMEOUT. + * Thus setup 3x that completion wait time to account for FW reinit / + * dump collection on retry. + */ ret = wait_for_completion_timeout(&plat_priv->power_up_complete, - msecs_to_jiffies((timeout << 1) + - WLAN_WD_TIMEOUT_MS)); + msecs_to_jiffies(timeout + + WLAN_MISSION_MODE_TIMEOUT * 3)); if (!ret) { - cnss_pr_err("Timeout waiting for idle restart to complete\n"); + /* This exception occurs after attempting retry of FW recovery. + * Thus we can safely power off the device. + */ + cnss_fatal_err("Timeout for idle restart to complete\n"); ret = -ETIMEDOUT; + cnss_power_down(dev); + CNSS_ASSERT(0); goto out; } diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h index be90950b7cec..871cc35ba8a9 100644 --- a/drivers/net/wireless/cnss2/main.h +++ b/drivers/net/wireless/cnss2/main.h @@ -26,7 +26,7 @@ #define RECOVERY_TIMEOUT 60000 #define WLAN_WD_TIMEOUT_MS 60000 #define WLAN_COLD_BOOT_CAL_TIMEOUT 60000 -#define WLAN_DRIVER_LOAD_TIMEOUT 90000 +#define WLAN_MISSION_MODE_TIMEOUT 30000 #define TIME_CLOCK_FREQ_HZ 19200000 #define CNSS_RAMDUMP_MAGIC 0x574C414E #define CNSS_RAMDUMP_VERSION 0 diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index f7040432f9ce..83fc44947e0a 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -1919,7 +1919,7 @@ retry: if (test_bit(CNSS_IN_COLD_BOOT_CAL, &plat_priv->driver_state)) timeout += WLAN_COLD_BOOT_CAL_TIMEOUT; else - timeout += WLAN_DRIVER_LOAD_TIMEOUT; + timeout += WLAN_MISSION_MODE_TIMEOUT; mod_timer(&plat_priv->fw_boot_timer, jiffies + msecs_to_jiffies(timeout)); }