diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index 55de963da189..a5c419a6c451 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -1971,6 +1971,7 @@ static ssize_t shutdown_store(struct kobject *kobj, set_bit(CNSS_IN_REBOOT, &plat_priv->driver_state); del_timer(&plat_priv->fw_boot_timer); complete_all(&plat_priv->power_up_complete); + complete_all(&plat_priv->cal_complete); } cnss_pr_dbg("Received shutdown notification\n"); @@ -2112,6 +2113,7 @@ static int cnss_reboot_notifier(struct notifier_block *nb, set_bit(CNSS_IN_REBOOT, &plat_priv->driver_state); del_timer(&plat_priv->fw_boot_timer); complete_all(&plat_priv->power_up_complete); + complete_all(&plat_priv->cal_complete); cnss_pr_dbg("Reboot is in progress with action %d\n", action); return NOTIFY_DONE; diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 723e57ddc18a..53601871de5a 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -2138,7 +2138,8 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) msecs_to_jiffies(timeout) << 2); if (!ret) { cnss_pr_err("Timeout waiting for calibration to complete\n"); - CNSS_ASSERT(0); + if (!test_bit(CNSS_IN_REBOOT, &plat_priv->driver_state)) + CNSS_ASSERT(0); cal_info = kzalloc(sizeof(*cal_info), GFP_KERNEL); if (!cal_info) @@ -2150,6 +2151,11 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) 0, cal_info); } + if (test_bit(CNSS_IN_REBOOT, &plat_priv->driver_state)) { + cnss_pr_dbg("Reboot or shutdown is in progress, ignore register driver\n"); + return -EINVAL; + } + register_driver: ret = cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_REGISTER_DRIVER, @@ -2205,7 +2211,7 @@ skip_wait_idle_restart: skip_wait_recovery: cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_UNREGISTER_DRIVER, - CNSS_EVENT_SYNC_UNINTERRUPTIBLE, NULL); + CNSS_EVENT_SYNC_UNKILLABLE, NULL); } EXPORT_SYMBOL(cnss_wlan_unregister_driver);