Loading drivers/net/wireless/cnss2/pci.c +7 −4 Original line number Original line Diff line number Diff line Loading @@ -1403,6 +1403,7 @@ int cnss_pci_call_driver_probe(struct cnss_pci_data *pci_priv) clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state); set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state); set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state); complete_all(&plat_priv->power_up_complete); } else if (test_bit(CNSS_DRIVER_IDLE_RESTART, } else if (test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) { &plat_priv->driver_state)) { ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, Loading Loading @@ -2075,6 +2076,7 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) } } register_driver: register_driver: reinit_completion(&plat_priv->power_up_complete); ret = cnss_driver_event_post(plat_priv, ret = cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_EVENT_SYNC_UNINTERRUPTIBLE, CNSS_EVENT_SYNC_UNINTERRUPTIBLE, Loading @@ -2100,19 +2102,20 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) } } if (plat_priv->device_id == QCA6174_DEVICE_ID || if (plat_priv->device_id == QCA6174_DEVICE_ID || !test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) !(test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state) || goto skip_wait_idle_restart; test_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state))) goto skip_wait_power_up; timeout = cnss_get_qmi_timeout(plat_priv); timeout = cnss_get_qmi_timeout(plat_priv); ret = wait_for_completion_timeout(&plat_priv->power_up_complete, ret = wait_for_completion_timeout(&plat_priv->power_up_complete, msecs_to_jiffies((timeout << 1) + msecs_to_jiffies((timeout << 1) + WLAN_WD_TIMEOUT_MS)); WLAN_WD_TIMEOUT_MS)); if (!ret) { if (!ret) { cnss_pr_err("Timeout waiting for idle restart to complete\n"); cnss_pr_err("Timeout waiting for driver power up to complete\n"); CNSS_ASSERT(0); CNSS_ASSERT(0); } } skip_wait_idle_restart: skip_wait_power_up: if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) goto skip_wait_recovery; goto skip_wait_recovery; Loading Loading
drivers/net/wireless/cnss2/pci.c +7 −4 Original line number Original line Diff line number Diff line Loading @@ -1403,6 +1403,7 @@ int cnss_pci_call_driver_probe(struct cnss_pci_data *pci_priv) clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state); set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state); set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state); complete_all(&plat_priv->power_up_complete); } else if (test_bit(CNSS_DRIVER_IDLE_RESTART, } else if (test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) { &plat_priv->driver_state)) { ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, Loading Loading @@ -2075,6 +2076,7 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) } } register_driver: register_driver: reinit_completion(&plat_priv->power_up_complete); ret = cnss_driver_event_post(plat_priv, ret = cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_EVENT_SYNC_UNINTERRUPTIBLE, CNSS_EVENT_SYNC_UNINTERRUPTIBLE, Loading @@ -2100,19 +2102,20 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) } } if (plat_priv->device_id == QCA6174_DEVICE_ID || if (plat_priv->device_id == QCA6174_DEVICE_ID || !test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) !(test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state) || goto skip_wait_idle_restart; test_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state))) goto skip_wait_power_up; timeout = cnss_get_qmi_timeout(plat_priv); timeout = cnss_get_qmi_timeout(plat_priv); ret = wait_for_completion_timeout(&plat_priv->power_up_complete, ret = wait_for_completion_timeout(&plat_priv->power_up_complete, msecs_to_jiffies((timeout << 1) + msecs_to_jiffies((timeout << 1) + WLAN_WD_TIMEOUT_MS)); WLAN_WD_TIMEOUT_MS)); if (!ret) { if (!ret) { cnss_pr_err("Timeout waiting for idle restart to complete\n"); cnss_pr_err("Timeout waiting for driver power up to complete\n"); CNSS_ASSERT(0); CNSS_ASSERT(0); } } skip_wait_idle_restart: skip_wait_power_up: if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) goto skip_wait_recovery; goto skip_wait_recovery; Loading