Skip to contentSkip to conversation

wifi: iwlwifi: add Device Tree hardware integration information

PATCH In review Avinash Bhatt 2 participants 7 messages May 13

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v3 cover wifi: iwlwifi: add Device Tree hardware integration information

Add Device Tree support for Intel Wi-Fi hardware integration information on platforms that do not provide UEFI variables or ACPI methods.

Patch 1/3 adds the DT binding schema for the Intel iwlwifi compatible node. Patches 2/3 and 3/3 add the driver infrastructure and integrate DT as the lowest-priority fallback after UEFI and ACPI; they are included for reference to show how the binding is consumed by the driver and will be merged through the regular iwlwifi upstreaming process, not through the DT tree.

Changes since v2:

Binding (patch 1/3):
- Subject and title updated to describe the BE200 hardware
- Revision header cell removed from all properties; each property is now a scalar uint32 or plain fixed-size array
- intel,wrds: reduced to 49 cells (mode word + 4x12 SAR values)
- intel,uats: reduced to 338 bytes (26x13 country nibble matrix)
- Removed allOf/items const: 0 constraints from all properties
- intel,srd: changed from integer enum to string enum (active-scan/passive-scan/disabled)
- Removed "reserved, must be 0" annotations; bits with no assigned meaning are not documented
- Added allOf: $ref: /schemas/net/wireless/ieee80211.yaml#

Driver (patch 2/3):
- Removed dsm_func_to_prop_name() and all IWL_DT_PROP_* defines; each property function now calls of_property_read_*() directly with the literal property string
- Driver updated to match binding changes (no revision cells, string-based intel,srd, scalar uint32 DSM properties, 338-byte intel,uats)
- Added iwl_dt_init() to validate DT node compatible at probe time;

    all DT reads gated on fwrt->dt_compatible

- fw/dt.h now includes fw/runtime.h directly, making it self-contained

Fallback integration (patch 3/3):
- No changes from v2

Link to v2: https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/
Link to v1: https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/
Link to RFC: https://patchwork.kernel.org/project/devicetree/patch/[email protected]/

Avinash Bhatt (3):
dt-bindings: net: wireless: Add Intel Wi-Fi 7 BE200 PCIe adapter
wifi: iwlwifi: dt: add Device Tree BIOS configuration infrastructure
wifi: iwlwifi: dt: use Device Tree as fallback BIOS configuration source

 .../bindings/net/wireless/intel,iwlwifi.yaml  | 248 +++++++++++++++++
 MAINTAINERS                                   |   1 +
 drivers/net/wireless/intel/iwlwifi/Makefile   |   1 +
 drivers/net/wireless/intel/iwlwifi/fw/acpi.h  |   5 +-
 .../wireless/intel/iwlwifi/fw/api/nvm-reg.h   |   4 +-
 drivers/net/wireless/intel/iwlwifi/fw/dt.c    | 332 +++++++++++++++++++
 drivers/net/wireless/intel/iwlwifi/fw/dt.h    | 161 +++++++++
 drivers/net/wireless/intel/iwlwifi/fw/init.c  |   4 +-
 .../wireless/intel/iwlwifi/fw/regulatory.c    |   3 +++
 .../wireless/intel/iwlwifi/fw/regulatory.h    |   3 +-
 drivers/net/wireless/intel/iwlwifi/fw/runtime.h |  6 +-
 drivers/net/wireless/intel/iwlwifi/mld/mld.c |   3 +++
 .../intel/iwlwifi/mld/regulatory.c            |   5 ++-
 13 files changed, 772 insertions(+), 11 deletions(-)
Signature · 1 line
2.34.1
#1 lore raw

PATCH v3 1/3 dt-bindings: net: wireless: Add Intel Wi-Fi 7 BE200 PCIe adapter

The Intel Wi-Fi 7 BE200 is a discrete PCIe Wi-Fi adapter supporting 802.11be with tri-band operation including the 6 GHz band.

---
 .../bindings/net/wireless/intel,iwlwifi.yaml  | 248 ++++++++++++++++++
 MAINTAINERS                                   |   1 +
 2 files changed, 249 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml
Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml new file +248 -0
new file mode 100644
index 000000000000..e5ba5e7608e2
@@ -0,0 +1,248 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (c) 2026 Intel Corporation
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/wireless/intel,iwlwifi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Intel Wi-Fi 7 BE200 PCIe adapter
+
+maintainers:
+  - Avinash Bhatt <[email protected]>
+  - Miri Korenblit <[email protected]>
+
+description:
+  Intel Wi-Fi 7 BE200 (BE200NGW) IEEE 802.11be discrete PCIe adapter.
+
+allOf:
+  - $ref: /schemas/net/wireless/ieee80211.yaml#
+
+properties:
+  compatible:
+    enum:
+      - pci8086,272b
+
+  reg:
+    maxItems: 1
+
+  intel,wrds:
+    description: |
+      SAR (Specific Absorption Rate) transmit power limits per antenna chain
+      and frequency subband, in units of 0.125 dBm.
+
+      First cell is the mode word: bit 0 set enables SAR limiting, bit 0
+      clear disables it (device uses its certified maximum).
+
+      Followed by 48 limit values for four antenna chains in order:
+      chain A, chain B, CDB chain A, CDB chain B. Each chain has 12
+      subband values covering the following frequency ranges:
+
+        [0]  2.4 GHz  ch  1-13   (2412-2472 MHz)
+        [1]  5 GHz    ch 36-64   (5180-5320 MHz)
+        [2]  5 GHz    ch 68-96   (5340-5480 MHz)
+        [3]  5 GHz    ch 100-144 (5500-5720 MHz)
+        [4]  5 GHz    ch 149-177 (5745-5885 MHz)
+        [5]  6 GHz    ch  1-45   (5955-6175 MHz)
+        [6]  6 GHz    ch 49-93   (6195-6415 MHz)
+        [7]  6 GHz    ch 97-115  (6435-6525 MHz)
+        [8]  6 GHz    ch 117-151 (6535-6705 MHz)
+        [9]  6 GHz    ch 153-183 (6715-6865 MHz)
+        [10] 6 GHz    ch 185-233 (6875-7115 MHz)
+        [11] 6 GHz    ch 237-253 (7135-7215 MHz)
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 49
+    maxItems: 49
+
+  intel,uats:
+    description: |
+      Per-country enablement matrix for 6 GHz AP types. 338-byte array
+      encoding which AP types (AFC, VLP, LPI) are permitted per country.
+
+      Countries are identified by ISO 3166-1 alpha-2 code. The matrix
+      covers all 26x26 = 676 two-letter combinations (AA..ZZ), stored
+      column-major (all second-letter variants for first letter A first,
+      then B, and so on). 26 columns x 13 bytes = 338 bytes total.
+
+      Each country occupies 4 bits (a nibble); two countries are packed
+      per byte, low nibble first:
+        bit 0: AFC (Standard Power AP) permitted
+        bit 1: VLP (Very Low Power AP) permitted
+        bit 2: LPI (Low Power Indoor AP) permitted
+
+      A bit is only effective when the corresponding control bit in
+      intel,6e-uhb is also set (bit 30 for AFC, bit 29 for VLP,
+      bit 31 for LPI per-country mode).
+    $ref: /schemas/types.yaml#/definitions/uint8-array
+    minItems: 338
+    maxItems: 338
+
+  intel,srd:
+    description: |
+      ETSI 5.8 GHz SRD (Short Range Device) channel behaviour in the
+      5725-5875 MHz band for ETSI regulatory domains.
+
+        active-scan  - active scanning permitted (default)
+        passive-scan - device may associate and transfer data but must
+                       not transmit probe requests on SRD channels
+        disabled     - device must not scan, associate, or operate on
+                       any SRD channel
+    enum:
+      - active-scan
+      - passive-scan
+      - disabled
+
+  intel,6e-uhb:
+    description: |
+      6-7 GHz Ultra-High Band (UHB) per-country enable bitmask.
+
+        bit 0:     override control; 0 = use device defaults,
+                   1 = force-disable all countries not explicitly
+                   enabled in bits 1-25
+        bit  1:    USA
+        bit  2:    Rest of World (ROW)
+        bit  3:    EU
+        bit  4:    South Korea
+        bit  5:    Brazil
+        bit  6:    Chile
+        bit  7:    Japan
+        bit  8:    Canada
+        bit  9:    Morocco
+        bit 10:    Mongolia
+        bit 11:    Malaysia
+        bit 12:    Saudi Arabia
+        bit 13:    Mexico
+        bit 14:    Nigeria
+        bit 15:    Thailand
+        bit 16:    Singapore
+        bit 17:    Taiwan
+        bit 18:    South Africa
+        bit 19:    Philippines
+        bit 20:    Serbia
+        bit 21:    Indonesia
+        bit 22:    Azerbaijan
+        bit 23:    Paraguay
+        bit 24:    Vietnam
+        bit 25:    India
+        bit 27:    enable VLP active scan, SoftAP, and P2P-GO in Japan
+        bit 29:    enable VLP mode per intel,uats country table
+        bit 30:    enable AFC mode per intel,uats country table
+        bit 31:    use intel,uats country table for LPI (0 = group mode)
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,regulatory-special:
+    description: |
+      Special regulatory configuration flags.
+
+        bit 4:    enable Australia UHB band extension
+        bit 5:    Bangladesh 6 GHz UHB enablement
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,activate-channel:
+    description: |
+      Indoor channel activation bitmask. Enables specific frequency bands
+      for active use when the platform is operating indoors.
+
+        bit 0:    EU U-NII-1 (5150-5250 MHz)
+        bit 1:    Japan U-NII-1 (5150-5250 MHz)
+        bit 2:    China Mainland U-NII-1 (5150-5250 MHz)
+        bit 3:    USA U-NII-4 (5850-5925 MHz)
+        bit 4:    Worldwide U-NII-1 (5150-5250 MHz) for any country
+                  where the band is permitted indoors
+        bit 5:    Canada U-NII-4 (5850-5925 MHz)
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,force-disable-channels:
+    description: |
+      Per-band force-disable bitmask. Permanently disables specific
+      frequency bands regardless of regulatory domain.
+
+        bit  0:    2.4 GHz  (ch   1-13,  2412-2472 MHz)
+        bit  1:    5.2 GHz  (ch  36-48,  5180-5240 MHz)
+        bit  2:    5.3 GHz  (ch  52-64,  5260-5320 MHz)
+        bit  3:    5.5 GHz  (ch 100-144, 5500-5720 MHz)
+        bit  4:    5.8 GHz  (ch 149-165, 5745-5825 MHz)
+        bit  5:    5.9 GHz  (ch 169-177, 5845-5885 MHz)
+        bit  6:    6.2 GHz  (ch   1-93,  5955-6415 MHz)
+        bit  7:    6.5 GHz  (ch  97-113, 6435-6525 MHz)
+        bit  8:    6.6 GHz  (ch 117-153, 6535-6705 MHz)
+        bit  9:    6.8 GHz  (ch 157-185, 6715-6885 MHz)
+        bit 10:    7.0 GHz  (ch 185-233, 6875-7115 MHz)
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,11be:
+    description: |
+      802.11be (Wi-Fi 7) per-country enable bitmask.
+
+        bit 0:    China (CN)
+        bit 1:    South Korea
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,splc:
+    description:
+      Platform thermal power limit for the Wi-Fi core in mW. The device
+      will not exceed this limit regardless of regulatory maximums.
+    $ref: /schemas/types.yaml#/definitions/uint32
+    minimum: 1
+
+  intel,wcpe:
+    description: |
+      802.11be channel puncturing enable bitmask. When set, allows the
+      device to puncture (skip) sub-channels within a wide channel for
+      coexistence with incumbents, subject to country certification.
+
+        bit 0:    USA
+        bit 1:    Canada
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,wbem:
+    description: |
+      320 MHz channel bandwidth enable bitmask per country. Each bit
+      takes effect only if the installed module is certified for 320 MHz
+      in that country.
+
+        bit 0:    Japan
+        bit 1:    South Korea
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    pcie {
+        #address-cells = <3>;
+        #size-cells = <2>;
+
+        pcie@0 {
+            device_type = "pci";
+            reg = <0x0 0x0 0x0 0x0 0x0>;
+            #address-cells = <3>;
+            #size-cells = <2>;
+            ranges;
+            bus-range = <0x01 0xff>;
+
+            wifi@0 {
+                compatible = "pci8086,272b";
+                reg = <0x10000 0x0 0x0 0x0 0x0>;
+
+                /* SAR power limits: mode + 4 chains x 12 subbands */
+                intel,wrds = <
+                    0x01
+                    0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38
+                    0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38 0x38
+                    0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c
+                    0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c 0x3c
+                >;
+
+                intel,splc = <4500>;
+                intel,wcpe = <0x03>;
+                intel,wbem = <0x03>;
+                intel,srd = "passive-scan";
+                intel,activate-channel = <0x01>;
+                intel,6e-uhb = <0x06>;
+            };
+        };
+    };
MAINTAINERS +1 -0
index 77fdfcb55f06..674320ef137e 100644
@@ -13256,6 +13256,7 @@ L:	[email protected]
 S:	Supported
 W:	https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi
 T:	git https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next.git/
+F:	Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml
 F:	drivers/net/wireless/intel/iwlwifi/
 
 INTEL VISION SENSING CONTROLLER DRIVER
Signature · 1 line
2.34.1
#2 lore raw

Re: [PATCH v3 1/3] dt-bindings: net: wireless: Add Intel Wi-Fi 7 BE200 PCIe adapter

Quoted 5 lines · Avinash Bhatt

The Intel Wi-Fi 7 BE200 is a discrete PCIe Wi-Fi adapter supporting 802.11be with tri-band operation including the 6 GHz band.

---

You sent v2 on 4th of May.

I replied one day later, on 4th of May.

It took you entire week to reply to my comments, but then you do not wait for my replies one week. You send v3 the next day.

DO NOT POST new versions while discussion is going.

Best regards,
Krzysztof

#3 lore raw

Re: [PATCH v3 1/3] dt-bindings: net: wireless: Add Intel Wi-Fi 7 BE200 PCIe adapter

Quoted 9 lines · Krzysztof Kozlowski
Quoted 5 lines · Avinash Bhatt

The Intel Wi-Fi 7 BE200 is a discrete PCIe Wi-Fi adapter supporting 802.11be with tri-band operation including the 6 GHz band.

---

You sent v2 on 4th of May.

I replied one day later, on 4th of May.

4th -> 5th of May

Quoted 5 lines

It took you entire week to reply to my comments, but then you do not wait for my replies one week. You send v3 the next day.

DO NOT POST new versions while discussion is going.

Best regards,
Krzysztof

#4 lore raw

Re: [PATCH v3 1/3] dt-bindings: net: wireless: Add Intel Wi-Fi 7 BE200 PCIe adapter

In reply to Avinash Bhatt
Quoted 5 lines · Avinash Bhatt
Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml new file +5 -0
+        bit 23:    Paraguay
+        bit 24:    Vietnam
+        bit 25:    India
+        bit 27:    enable VLP active scan, SoftAP, and P2P-GO in Japan
+        bit 29:    enable VLP mode per intel,uats country table

Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml line 137

Quoted 10 lines
Documentation/devicetree/bindings/net/wireless/intel,iwlwifi.yaml new file +10 -0
+        bit 30:    enable AFC mode per intel,uats country table
+        bit 31:    use intel,uats country table for LPI (0 = group mode)
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  intel,regulatory-special:
+    description: |
+      Special regulatory configuration flags.
+
+        bit 4:    enable Australia UHB band extension
+        bit 5:    Bangladesh 6 GHz UHB enablement

I already NAK-ed this.

You took one week to reply to my comments but then gave me only one day to disagree.

This is not how it works.

Implement previous comments. v2 discussion is still going, but this time read netiquette and configure your email systems correctly.

Best regards,
Krzysztof

#5 lore raw

PATCH v3 2/3 wifi: iwlwifi: dt: add Device Tree BIOS configuration infrastructure

In reply to Avinash Bhatt

On platforms that use Device Tree and do not provide UEFI variables or ACPI methods, discrete Intel Wi-Fi adapters have no way to receive BIOS configuration. Add Device Tree as a supported configuration source for SAR limits and 6 GHz AP type support, with stub hooks for TAS and per-platform antenna gain tables.

DT support is gated on CONFIG_OF and is a no-op on x86. BIOS_SOURCE_DT is added to enum bios_source to track the configuration origin.

---
 drivers/net/wireless/intel/iwlwifi/Makefile   |   1 +
 drivers/net/wireless/intel/iwlwifi/fw/acpi.h  |   5 +-
 .../wireless/intel/iwlwifi/fw/api/nvm-reg.h   |   4 +-
 drivers/net/wireless/intel/iwlwifi/fw/dt.c    | 332 ++++++++++++++++++
 drivers/net/wireless/intel/iwlwifi/fw/dt.h    | 161 +++++++++
 drivers/net/wireless/intel/iwlwifi/fw/init.c  |   4 +-
 .../wireless/intel/iwlwifi/fw/regulatory.h    |   3 +-
 .../net/wireless/intel/iwlwifi/fw/runtime.h   |   6 +-
 intc-scripts/publishable-files                |   2 +
 9 files changed, 510 insertions(+), 8 deletions(-)
 create mode 100644 drivers/net/wireless/intel/iwlwifi/fw/dt.c
 create mode 100644 drivers/net/wireless/intel/iwlwifi/fw/dt.h
drivers/net/wireless/intel/iwlwifi/Makefile +1 -0
index 060604fa6c..c7a2d5ee66 100644
@@ -18,6 +18,7 @@ iwlwifi-$(CPTCFG_IWLMVM) += fw/paging.o fw/smem.o fw/init.o
 iwlwifi-$(CPTCFG_IWLMLD) += fw/smem.o fw/init.o
 iwlwifi-$(CONFIG_ACPI) += fw/acpi.o
 iwlwifi-$(CONFIG_EFI)	+= fw/uefi.o
+iwlwifi-$(CONFIG_OF)	+= fw/dt.o
 
 iwlwifi-$(CPTCFG_IWLXVT)	+= fw/paging.o fw/smem.o
 iwlwifi-$(CPTCFG_IWLPROD)	+= fw/init.o
drivers/net/wireless/intel/iwlwifi/fw/acpi.h +1 -4
index a1f89ced15..2356365db2 100644
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
  * Copyright (C) 2017 Intel Deutschland GmbH
- * Copyright (C) 2018-2023, 2025 Intel Corporation
+ * Copyright (C) 2018-2023, 2025-2026 Intel Corporation
  */
 #ifndef __iwl_fw_acpi__
 #define __iwl_fw_acpi__
@@ -115,9 +115,6 @@
 #define ACPI_PPAG_WIFI_DATA_SIZE_V3	((ACPI_PPAG_NUM_CHAINS * \
 					  ACPI_PPAG_NUM_BANDS_V3) + 2)
 
-#define IWL_SAR_ENABLE_MSK		BIT(0)
-#define IWL_REDUCE_POWER_FLAGS_POS	1
-
 /* The Inidcator whether UEFI WIFI GUID tables are locked is read from ACPI */
 #define UEFI_WIFI_GUID_UNLOCKED		0
 
drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h +3 -1
index 2bec56937c..4b3b97f137 100644
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2012-2014, 2018-2025 Intel Corporation
+ * Copyright (C) 2012-2014, 2018-2026 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2016-2017 Intel Deutschland GmbH
  */
@@ -527,11 +527,13 @@ struct iwl_tas_config_cmd_v2_v4 {
  * @BIOS_SOURCE_NONE: BIOS source is not defined
  * @BIOS_SOURCE_ACPI: BIOS source is ACPI
  * @BIOS_SOURCE_UEFI: BIOS source is UEFI
+ * @BIOS_SOURCE_DT: BIOS source is Device Tree
  */
 enum bios_source {
 	BIOS_SOURCE_NONE,
 	BIOS_SOURCE_ACPI,
 	BIOS_SOURCE_UEFI,
+	BIOS_SOURCE_DT,
 };
 
 /**
drivers/net/wireless/intel/iwlwifi/fw/dt.c new file +332 -0

332 lines not on this page · raw message

drivers/net/wireless/intel/iwlwifi/fw/dt.h new file +161 -0

161 lines not on this page · raw message

drivers/net/wireless/intel/iwlwifi/fw/init.c +3 -1
index d1d8058ad2..7d365947b3 100644
@@ -1,12 +1,13 @@
 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
 /*
  * Copyright (C) 2017 Intel Deutschland GmbH
- * Copyright (C) 2019-2021, 2024-2025 Intel Corporation
+ * Copyright (C) 2019-2021, 2024-2026 Intel Corporation
  */
 #include "iwl-drv.h"
 #include "runtime.h"
 #include "dbg.h"
 #include "debugfs.h"
+#include "dt.h"
 
 #include "fw/api/system.h"
 #include "fw/api/commands.h"
@@ -36,6 +37,7 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
 		INIT_DELAYED_WORK(&fwrt->dump.wks[i].wk, iwl_fw_error_dump_wk);
 	}
 	iwl_fwrt_dbgfs_register(fwrt, dbgfs_dir);
+	iwl_dt_init(fwrt);
 }
 IWL_EXPORT_SYMBOL(iwl_fw_runtime_init);
 
drivers/net/wireless/intel/iwlwifi/fw/regulatory.h +2 -1
index 0f6bc61142..a6add973ba 100644
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2023-2025 Intel Corporation
+ * Copyright (C) 2023-2026 Intel Corporation
  */
 
 #ifndef __fw_regulatory_h__
@@ -30,6 +30,7 @@
 #define BIOS_GEO_MIN_PROFILE_NUM	3
 
 #define IWL_SAR_ENABLE_MSK		BIT(0)
+#define IWL_REDUCE_POWER_FLAGS_POS	1
 
 /* PPAG gain value bounds in 1/8 dBm */
 #define IWL_PPAG_MIN_LB	-16
drivers/net/wireless/intel/iwlwifi/fw/runtime.h +5 -1
index cc976195b1..28161da63c 100644
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
  * Copyright (C) 2017 Intel Deutschland GmbH
- * Copyright (C) 2018-2025 Intel Corporation
+ * Copyright (C) 2018-2026 Intel Corporation
  */
 #ifndef __iwl_fw_runtime_h__
 #define __iwl_fw_runtime_h__
@@ -108,6 +108,7 @@ struct iwl_txf_iter_data {
  * @dump: debug dump data
  * @ap_type_cmd: AP type tables (for enablement on 6 GHz)
  * @ap_type_cmd_valid: if &ap_type_cmd is valid
+ * @dt_compatible: true if the DT node compatible matches a supported device
  * @uefi_tables_lock_status: The status of the WIFI GUID UEFI variables lock:
  *	0: Unlocked, 1 and 2: Locked.
  *	Only read the UEFI variables if locked.
@@ -217,6 +218,9 @@ struct iwl_fw_runtime {
 	bool sgom_enabled;
 	struct iwl_mcc_allowed_ap_type_cmd ap_type_cmd;
 	bool ap_type_cmd_valid;
+#if IS_ENABLED(CONFIG_OF)
+	bool dt_compatible;
+#endif
 	u8 uefi_tables_lock_status;
 	struct iwl_phy_specific_cfg phy_filters;
 	enum bios_source dsm_source;
intc-scripts/publishable-files +2 -0
index 81871178ba..91fc3f4d15 100644
@@ -76,6 +76,8 @@ drivers/net/wireless/intel/iwlwifi/fw/dbg.h
 drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
 drivers/net/wireless/intel/iwlwifi/fw/debugfs.h
 drivers/net/wireless/intel/iwlwifi/fw/dhc-utils.h
+drivers/net/wireless/intel/iwlwifi/fw/dt.c
+drivers/net/wireless/intel/iwlwifi/fw/dt.h
 drivers/net/wireless/intel/iwlwifi/fw/dump.c
 drivers/net/wireless/intel/iwlwifi/fw/error-dump.h
 drivers/net/wireless/intel/iwlwifi/fw/file.h
Signature · 1 line
2.34.1
#6 lore raw

PATCH v3 3/3 wifi: iwlwifi: dt: use Device Tree as fallback BIOS configuration source

In reply to Avinash Bhatt

When neither UEFI variables nor ACPI methods provide a BIOS configuration table, fall back to Device Tree. This preserves the existing UEFI -> ACPI priority order and extends it with DT as the lowest-priority source.

---
 drivers/net/wireless/intel/iwlwifi/fw/regulatory.c  | 3 +++
 drivers/net/wireless/intel/iwlwifi/mld/mld.c        | 3 +++
 drivers/net/wireless/intel/iwlwifi/mld/regulatory.c | 5 ++++-
 3 files changed, 10 insertions(+), 1 deletion(-)
drivers/net/wireless/intel/iwlwifi/fw/regulatory.c +3 -0
index 640e729091..d7ead787c2 100644
@@ -8,6 +8,7 @@
 #include "regulatory.h"
 #include "fw/runtime.h"
 #include "fw/uefi.h"
+#include "fw/dt.h"
 
 #define GET_BIOS_TABLE(__name, ...)					\
 do {									\
@@ -16,6 +17,8 @@ do {									\
 		ret = iwl_uefi_get_ ## __name(__VA_ARGS__);		\
 	if (ret < 0)							\
 		ret = iwl_acpi_get_ ## __name(__VA_ARGS__);		\
+	if (ret < 0 && iwl_dt_is_compatible(fwrt))			\
+		ret = iwl_dt_get_ ## __name(__VA_ARGS__);		\
 	return ret;							\
 } while (0)
 
drivers/net/wireless/intel/iwlwifi/mld/mld.c +3 -0
index 130eba60b4..1a95b19d33 100644
@@ -12,6 +12,7 @@
 #include "fw/api/coex.h"
 #include "fw/dbg.h"
 #include "fw/uefi.h"
+#include "fw/dt.h"
 
 #include "mld.h"
 #include "mlo.h"
@@ -466,6 +467,8 @@ iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg,
 	iwl_mld_get_bios_tables(mld);
 	iwl_uefi_get_sgom_table(trans, &mld->fwrt);
 	mld->bios_enable_puncturing = iwl_uefi_get_puncturing(&mld->fwrt);
+	if (!mld->bios_enable_puncturing && iwl_dt_is_compatible(&mld->fwrt))
+		mld->bios_enable_puncturing = iwl_dt_get_puncturing(&mld->fwrt);
 	mld->rfi.bios_enabled = iwl_rfi_is_enabled_in_bios(&mld->fwrt);
 
 	iwl_mld_hw_set_regulatory(mld);
drivers/net/wireless/intel/iwlwifi/mld/regulatory.c +4 -1
index 97b2283f51..ce539a0be7 100644
@@ -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 <linux/dmi.h>
@@ -8,6 +8,7 @@
 #include "fw/regulatory.h"
 #include "fw/acpi.h"
 #include "fw/uefi.h"
+#include "fw/dt.h"
 
 #include "regulatory.h"
 #include "mld.h"
@@ -64,6 +65,8 @@ void iwl_mld_get_bios_tables(struct iwl_mld *mld)
 	}
 
 	iwl_uefi_get_uats_table(mld->trans, &mld->fwrt);
+	if (!mld->fwrt.ap_type_cmd_valid && iwl_dt_is_compatible(&mld->fwrt))
+		iwl_dt_get_uats_table(&mld->fwrt);
 	iwl_uefi_get_uneb_table(mld->trans, &mld->fwrt);
 
 	iwl_bios_get_phy_filters(&mld->fwrt);
Signature · 1 line
2.34.1