]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mld: disallow puncturing in US/CA for WH
authorPagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Fri, 15 May 2026 12:09:48 +0000 (15:09 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 26 May 2026 12:17:12 +0000 (15:17 +0300)
FM continues to follow the BIOS/MCC policy, while WH sets
DISALLOW_PUNCTURING for US/CA and clears it for other MCC values.
Update the MCC handling accordingly.

Signed-off-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Link: https://patch.msgid.link/20260515150751.df1f1fdd141f.I900c9e2e3dd722619db12ba10d0879a56a2a55f2@changeid
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
drivers/net/wireless/intel/iwlwifi/mld/mcc.c

index 16bb1b4904f9972069af468c654d515e2639ea84..8502129abe49398999cf8c2b13d0e7e3ff55336a 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
 /*
- * Copyright (C) 2024-2025 Intel Corporation
+ * Copyright (C) 2024-2026 Intel Corporation
  */
 
 #include <net/cfg80211.h>
@@ -129,7 +129,7 @@ iwl_mld_get_regdomain(struct iwl_mld *mld,
 
        mld->mcc_src = resp->source_id;
 
-       /* FM is the earliest supported and later always do puncturing */
+       /* FM follows BIOS/MCC policy, WH disallows puncturing only in US/CA. */
        if (CSR_HW_RFID_TYPE(mld->trans->info.hw_rf_id) == IWL_CFG_RF_TYPE_FM) {
                if (!iwl_puncturing_is_allowed_in_bios(mld->bios_enable_puncturing,
                                                       le16_to_cpu(resp->mcc)))
@@ -137,6 +137,15 @@ iwl_mld_get_regdomain(struct iwl_mld *mld,
                else
                        __clear_bit(IEEE80211_HW_DISALLOW_PUNCTURING,
                                    mld->hw->flags);
+       } else if (CSR_HW_RFID_TYPE(mld->trans->info.hw_rf_id) ==
+                       IWL_CFG_RF_TYPE_WH) {
+               u16 mcc = le16_to_cpu(resp->mcc);
+
+               if (mcc == IWL_MCC_US || mcc == IWL_MCC_CANADA)
+                       ieee80211_hw_set(mld->hw, DISALLOW_PUNCTURING);
+               else
+                       __clear_bit(IEEE80211_HW_DISALLOW_PUNCTURING,
+                                   mld->hw->flags);
        }
 
 out: