ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
 }
 
+void ath10k_mac_update_channel_list(struct ath10k *ar,
+                                   struct ieee80211_supported_band *band)
+{
+       int i;
+
+       if (ar->low_5ghz_chan && ar->high_5ghz_chan) {
+               for (i = 0; i < band->n_channels; i++) {
+                       if (band->channels[i].center_freq < ar->low_5ghz_chan ||
+                           band->channels[i].center_freq > ar->high_5ghz_chan)
+                               band->channels[i].flags |=
+                                       IEEE80211_CHAN_DISABLED;
+               }
+       }
+}
+
 static void ath10k_reg_notifier(struct wiphy *wiphy,
                                struct regulatory_request *request)
 {
        if (ar->state == ATH10K_STATE_ON)
                ath10k_regd_update(ar);
        mutex_unlock(&ar->conf_mutex);
+
+       if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
+               ath10k_mac_update_channel_list(ar,
+                               ar->hw->wiphy->bands[NL80211_BAND_5GHZ]);
 }
 
 /***************/
 
        arg->phy_capab = ev->phy_capability;
        arg->num_rf_chains = ev->num_rf_chains;
        arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd;
+       arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan;
+       arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan;
        arg->num_mem_reqs = ev->num_mem_reqs;
        arg->service_map = ev->wmi_service_bitmap;
        arg->service_map_len = sizeof(ev->wmi_service_bitmap);
        arg->phy_capab = ev->phy_capability;
        arg->num_rf_chains = ev->num_rf_chains;
        arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd;
+       arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan;
+       arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan;
        arg->num_mem_reqs = ev->num_mem_reqs;
        arg->service_map = ev->wmi_service_bitmap;
        arg->service_map_len = sizeof(ev->wmi_service_bitmap);
        ar->phy_capability = __le32_to_cpu(arg.phy_capab);
        ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains);
        ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd);
+       ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan);
+       ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan);
 
        ath10k_dbg_dump(ar, ATH10K_DBG_WMI, NULL, "wmi svc: ",
                        arg.service_map, arg.service_map_len);