]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: acpi: add support for WRDS rev 3 table
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 19 Mar 2026 18:48:45 +0000 (20:48 +0200)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 25 Mar 2026 09:31:56 +0000 (11:31 +0200)
This table includes another sub-band for UNII-9.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260319204647.06543ec65e00.I73135c7d61bff9b46ad9862d93f4faf923983fd4@changeid
drivers/net/wireless/intel/iwlwifi/fw/acpi.c
drivers/net/wireless/intel/iwlwifi/fw/acpi.h

index 4d0a9383233624061623dff343e0a435a7655c92..debbba22a90939f110f883fc8c943a61ed300b37 100644 (file)
@@ -535,7 +535,23 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
        if (IS_ERR(data))
                return PTR_ERR(data);
 
-       /* start by trying to read revision 2 */
+       /* start by trying to read revision 3 */
+       wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
+                                        ACPI_WRDS_WIFI_DATA_SIZE_REV3,
+                                        &tbl_rev);
+       if (!IS_ERR(wifi_pkg)) {
+               if (tbl_rev != 3) {
+                       ret = -EINVAL;
+                       goto out_free;
+               }
+
+               num_chains = ACPI_SAR_NUM_CHAINS_REV2;
+               num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV3;
+
+               goto read_table;
+       }
+
+       /* then try revision 2 */
        wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
                                         ACPI_WRDS_WIFI_DATA_SIZE_REV2,
                                         &tbl_rev);
@@ -592,6 +608,13 @@ read_table:
                goto out_free;
        }
 
+       if (WARN_ON(num_chains * num_sub_bands >
+                   ARRAY_SIZE(fwrt->sar_profiles[0].chains) *
+                   ARRAY_SIZE(fwrt->sar_profiles[0].chains[0].subbands))) {
+               ret = -EINVAL;
+               goto out_free;
+       }
+
        IWL_DEBUG_RADIO(fwrt, "Reading WRDS tbl_rev=%d\n", tbl_rev);
 
        flags = wifi_pkg->package.elements[1].integer.value;
index 138fdb9a5273e7452cac900e78d7930aa18c7731..ec6af1b58098b7ab3bb8cea7adbf5d063fb4d4c0 100644 (file)
@@ -39,6 +39,7 @@
 #define ACPI_SAR_NUM_SUB_BANDS_REV0    5
 #define ACPI_SAR_NUM_SUB_BANDS_REV1    11
 #define ACPI_SAR_NUM_SUB_BANDS_REV2    11
+#define ACPI_SAR_NUM_SUB_BANDS_REV3    12
 
 #define ACPI_WRDS_WIFI_DATA_SIZE_REV0  (ACPI_SAR_NUM_CHAINS_REV0 * \
                                         ACPI_SAR_NUM_SUB_BANDS_REV0 + 2)
@@ -46,6 +47,8 @@
                                         ACPI_SAR_NUM_SUB_BANDS_REV1 + 2)
 #define ACPI_WRDS_WIFI_DATA_SIZE_REV2  (ACPI_SAR_NUM_CHAINS_REV2 * \
                                         ACPI_SAR_NUM_SUB_BANDS_REV2 + 2)
+#define ACPI_WRDS_WIFI_DATA_SIZE_REV3  (ACPI_SAR_NUM_CHAINS_REV2 * \
+                                        ACPI_SAR_NUM_SUB_BANDS_REV3 + 2)
 #define ACPI_EWRD_WIFI_DATA_SIZE_REV0  ((ACPI_SAR_PROFILE_NUM - 1) * \
                                         ACPI_SAR_NUM_CHAINS_REV0 * \
                                         ACPI_SAR_NUM_SUB_BANDS_REV0 + 3)