--- ./drivers/net/wireless/intel/iwlwifi/mvm/nvm.c.orig 2025-05-20 12:11:23.204174879 -0400 +++ ./drivers/net/wireless/intel/iwlwifi/mvm/nvm.c 2025-05-22 16:13:57.489312732 -0400 @@ -236,8 +236,8 @@ regulatory_type = NVM_SECTION_TYPE_REGULATORY; /* SW and REGULATORY sections are mandatory */ - if (!mvm->nvm_sections[NVM_SECTION_TYPE_SW].data || - !mvm->nvm_sections[regulatory_type].data) { + if (!mvm->nvm_sections[NVM_SECTION_TYPE_SW].data/* || + !mvm->nvm_sections[regulatory_type].data*/) { IWL_ERR(mvm, "Can't parse empty family 8000 OTP/NVM sections\n"); return NULL; --- ./drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c.orig 2025-05-22 16:13:25.152916296 -0400 +++ ./drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c 2025-05-22 16:24:22.490936889 -0400 @@ -373,7 +373,9 @@ enum nl80211_band band = iwl_nl80211_band_from_channel_idx(ch_idx); - if (v4) + if (!nvm_ch_flags) { + ch_flags = 0; + } else if (v4) ch_flags = __le32_to_cpup((const __le32 *)nvm_ch_flags + ch_idx); else @@ -1188,11 +1190,11 @@ u8 tx_chains, u8 rx_chains) { struct iwl_nvm_data *data; - bool lar_enabled; + bool lar_enabled = true; u32 sku, radio_cfg; u32 sbands_flags = 0; u16 lar_config; - const __le16 *ch_section; + const __le16 *ch_section = NULL; if (cfg->uhb_supported) data = kzalloc(struct_size(data, channels, @@ -1239,15 +1241,17 @@ return NULL; } - ch_section = cfg->nvm_type == IWL_NVM_SDP ? + if (regulatory) { + ch_section = cfg->nvm_type == IWL_NVM_SDP ? ®ulatory[NVM_CHANNELS_SDP] : &nvm_sw[NVM_CHANNELS]; + } /* in family 8000 Xtal calibration values moved to OTP */ data->xtal_calib[0] = *(nvm_calib + XTAL_CALIB); data->xtal_calib[1] = *(nvm_calib + XTAL_CALIB + 1); lar_enabled = true; - } else { + } else if (regulatory) { u16 lar_offset = data->nvm_version < 0xE39 ? NVM_LAR_OFFSET_OLD : NVM_LAR_OFFSET;