Loading drivers/net/wireless/cnss2/main.c +8 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,11 @@ int cnss_idle_restart(struct device *dev) return -ENODEV; } if (!mutex_trylock(&plat_priv->driver_ops_lock)) { cnss_pr_dbg("Another driver operation is in progress, ignore idle restart\n"); return -EBUSY; } cnss_pr_dbg("Doing idle restart\n"); reinit_completion(&plat_priv->power_up_complete); Loading Loading @@ -666,9 +671,11 @@ int cnss_idle_restart(struct device *dev) goto out; } mutex_unlock(&plat_priv->driver_ops_lock); return 0; out: mutex_unlock(&plat_priv->driver_ops_lock); return ret; } EXPORT_SYMBOL(cnss_idle_restart); Loading Loading @@ -2146,6 +2153,7 @@ static int cnss_misc_init(struct cnss_plat_data *plat_priv) init_completion(&plat_priv->rddm_complete); init_completion(&plat_priv->recovery_complete); mutex_init(&plat_priv->dev_lock); mutex_init(&plat_priv->driver_ops_lock); return 0; } Loading drivers/net/wireless/cnss2/main.h +1 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,7 @@ struct cnss_plat_data { struct completion power_up_complete; struct completion cal_complete; struct mutex dev_lock; /* mutex for register access through debugfs */ struct mutex driver_ops_lock; /* mutex for external driver ops */ u32 device_freq_hz; u32 diag_reg_read_addr; u32 diag_reg_read_mem_type; Loading drivers/net/wireless/cnss2/pci.c +10 −5 Original line number Diff line number Diff line Loading @@ -1458,6 +1458,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_LOADING, &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, &plat_priv->driver_state)) { ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, Loading Loading @@ -2157,6 +2158,7 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) } register_driver: reinit_completion(&plat_priv->power_up_complete); ret = cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_EVENT_SYNC_UNKILLABLE, Loading @@ -2177,20 +2179,21 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) return; } if (plat_priv->device_id == QCA6174_DEVICE_ID || !test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) goto skip_wait_idle_restart; mutex_lock(&plat_priv->driver_ops_lock); if (plat_priv->device_id == QCA6174_DEVICE_ID) goto skip_wait_power_up; timeout = cnss_get_qmi_timeout(plat_priv); ret = wait_for_completion_timeout(&plat_priv->power_up_complete, msecs_to_jiffies((timeout << 1) + WLAN_WD_TIMEOUT_MS)); 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); } skip_wait_idle_restart: skip_wait_power_up: if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) goto skip_wait_recovery; Loading @@ -2207,6 +2210,8 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_UNREGISTER_DRIVER, CNSS_EVENT_SYNC_UNKILLABLE, NULL); mutex_unlock(&plat_priv->driver_ops_lock); } EXPORT_SYMBOL(cnss_wlan_unregister_driver); Loading Loading
drivers/net/wireless/cnss2/main.c +8 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,11 @@ int cnss_idle_restart(struct device *dev) return -ENODEV; } if (!mutex_trylock(&plat_priv->driver_ops_lock)) { cnss_pr_dbg("Another driver operation is in progress, ignore idle restart\n"); return -EBUSY; } cnss_pr_dbg("Doing idle restart\n"); reinit_completion(&plat_priv->power_up_complete); Loading Loading @@ -666,9 +671,11 @@ int cnss_idle_restart(struct device *dev) goto out; } mutex_unlock(&plat_priv->driver_ops_lock); return 0; out: mutex_unlock(&plat_priv->driver_ops_lock); return ret; } EXPORT_SYMBOL(cnss_idle_restart); Loading Loading @@ -2146,6 +2153,7 @@ static int cnss_misc_init(struct cnss_plat_data *plat_priv) init_completion(&plat_priv->rddm_complete); init_completion(&plat_priv->recovery_complete); mutex_init(&plat_priv->dev_lock); mutex_init(&plat_priv->driver_ops_lock); return 0; } Loading
drivers/net/wireless/cnss2/main.h +1 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,7 @@ struct cnss_plat_data { struct completion power_up_complete; struct completion cal_complete; struct mutex dev_lock; /* mutex for register access through debugfs */ struct mutex driver_ops_lock; /* mutex for external driver ops */ u32 device_freq_hz; u32 diag_reg_read_addr; u32 diag_reg_read_mem_type; Loading
drivers/net/wireless/cnss2/pci.c +10 −5 Original line number Diff line number Diff line Loading @@ -1458,6 +1458,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_LOADING, &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, &plat_priv->driver_state)) { ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev, Loading Loading @@ -2157,6 +2158,7 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops) } register_driver: reinit_completion(&plat_priv->power_up_complete); ret = cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_REGISTER_DRIVER, CNSS_EVENT_SYNC_UNKILLABLE, Loading @@ -2177,20 +2179,21 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) return; } if (plat_priv->device_id == QCA6174_DEVICE_ID || !test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state)) goto skip_wait_idle_restart; mutex_lock(&plat_priv->driver_ops_lock); if (plat_priv->device_id == QCA6174_DEVICE_ID) goto skip_wait_power_up; timeout = cnss_get_qmi_timeout(plat_priv); ret = wait_for_completion_timeout(&plat_priv->power_up_complete, msecs_to_jiffies((timeout << 1) + WLAN_WD_TIMEOUT_MS)); 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); } skip_wait_idle_restart: skip_wait_power_up: if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && !test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) goto skip_wait_recovery; Loading @@ -2207,6 +2210,8 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops) cnss_driver_event_post(plat_priv, CNSS_DRIVER_EVENT_UNREGISTER_DRIVER, CNSS_EVENT_SYNC_UNKILLABLE, NULL); mutex_unlock(&plat_priv->driver_ops_lock); } EXPORT_SYMBOL(cnss_wlan_unregister_driver); Loading