.credit_size_workaround = false,
                .tx_stats_over_pktlog = true,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA988X_HW_2_0_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = true,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9887_HW_1_0_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA6174_HW_3_2_VERSION,
                .bmi_large_size_download = true,
                .supports_peer_stats_info = true,
                .dynamic_sar_support = true,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA6174_HW_2_1_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA6174_HW_2_1_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA6174_HW_3_0_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA6174_HW_3_2_VERSION,
                .tx_stats_over_pktlog = false,
                .supports_peer_stats_info = true,
                .dynamic_sar_support = true,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA99X0_HW_2_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9984_HW_1_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9888_HW_2_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9377_HW_1_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9377_HW_1_1_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA9377_HW_1_1_DEV_VERSION,
                .uart_pin_workaround = true,
                .credit_size_workaround = true,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = QCA4019_HW_1_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = false,
+               .hw_restart_disconnect = false,
        },
        {
                .id = WCN3990_HW_1_0_DEV_VERSION,
                .credit_size_workaround = false,
                .tx_stats_over_pktlog = false,
                .dynamic_sar_support = true,
+               .hw_restart_disconnect = true,
        },
 };
 
 static void ath10k_core_restart(struct work_struct *work)
 {
        struct ath10k *ar = container_of(work, struct ath10k, restart_work);
+       struct ath10k_vif *arvif;
        int ret;
 
        set_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags);
                ar->state = ATH10K_STATE_RESTARTING;
                ath10k_halt(ar);
                ath10k_scan_finish(ar);
+               if (ar->hw_params.hw_restart_disconnect) {
+                       list_for_each_entry(arvif, &ar->arvifs, list) {
+                               if (arvif->is_up &&
+                                   arvif->vdev_type == WMI_VDEV_TYPE_STA)
+                                       ieee80211_hw_restart_disconnect(arvif->vif);
+                       }
+               }
+
                ieee80211_restart_hw(ar->hw);
                break;
        case ATH10K_STATE_OFF: