wifi: iwlwifi: fw: support reading PPAG BIOS table revision 4
authorPagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Wed, 30 Apr 2025 12:23:19 +0000 (15:23 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 6 May 2025 17:23:17 +0000 (20:23 +0300)
PPAG revision 4 data has more supported bits than supported in
version 6 of PPAG command. So, adjust by masking accordingly to
firmware acceptance.

Signed-off-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250430151952.f1cb31f9f6ab.I56d6887866f76fd02b2cd298e3de1189c6d3890e@changeid
drivers/net/wireless/intel/iwlwifi/fw/acpi.c
drivers/net/wireless/intel/iwlwifi/fw/api/power.h
drivers/net/wireless/intel/iwlwifi/fw/regulatory.c
drivers/net/wireless/intel/iwlwifi/fw/regulatory.h
drivers/net/wireless/intel/iwlwifi/fw/uefi.h

index 68b461297174dc2027eb54d8f9ea9172be85815a..a1c949d15d945db77155ffd96cd829fc95bac3d6 100644 (file)
@@ -847,12 +847,12 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
        if (IS_ERR(data))
                return PTR_ERR(data);
 
-       /* try to read ppag table rev 3, 2 or 1 (all have the same data size) */
+       /* try to read ppag table rev 1 to 4 (all have the same data size) */
        wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
                                ACPI_PPAG_WIFI_DATA_SIZE_V2, &tbl_rev);
 
        if (!IS_ERR(wifi_pkg)) {
-               if (tbl_rev >= 1 && tbl_rev <= 3) {
+               if (tbl_rev >= 1 && tbl_rev <= 4) {
                        num_sub_bands = IWL_NUM_SUB_BANDS_V2;
                        IWL_DEBUG_RADIO(fwrt,
                                        "Reading PPAG table (tbl_rev=%d)\n",
index 1238c23ac48b38b44f082f439cd5daa296bb8fe6..1c09c30055b1b5cdc4fb49f7303c8ec94aecbf96 100644 (file)
@@ -658,6 +658,15 @@ union iwl_ppag_table_cmd {
                              IWL_PPAG_ETSI_LPI_UHB_MASK | \
                              IWL_PPAG_USA_LPI_UHB_MASK)
 
+#define IWL_PPAG_CMD_V6_MASK (IWL_PPAG_CMD_V5_MASK |           \
+                             IWL_PPAG_ETSI_VLP_UHB_MASK |      \
+                             IWL_PPAG_ETSI_SP_UHB_MASK |       \
+                             IWL_PPAG_USA_VLP_UHB_MASK |       \
+                             IWL_PPAG_USA_SP_UHB_MASK |        \
+                             IWL_PPAG_CANADA_LPI_UHB_MASK |    \
+                             IWL_PPAG_CANADA_VLP_UHB_MASK |    \
+                             IWL_PPAG_CANADA_SP_UHB_MASK)
+
 #define MCC_TO_SAR_OFFSET_TABLE_ROW_SIZE       26
 #define MCC_TO_SAR_OFFSET_TABLE_COL_SIZE       13
 
index bb8ddfad8621e6d37427e3a4354d2eceacc1c1ba..4508de2508d7f7be42d58827ee9ae63027eb51d4 100644 (file)
@@ -374,7 +374,9 @@ int iwl_fill_ppag_table(struct iwl_fw_runtime *fwrt,
                        "PPAG MODE bits were read from bios: %d\n",
                        le32_to_cpu(cmd->v1.flags));
 
-       if (cmd_ver == 5)
+       if (cmd_ver == 6)
+               cmd->v1.flags &= cpu_to_le32(IWL_PPAG_CMD_V6_MASK);
+       else if (cmd_ver == 5)
                cmd->v1.flags &= cpu_to_le32(IWL_PPAG_CMD_V5_MASK);
        else if (cmd_ver < 5)
                cmd->v1.flags &= cpu_to_le32(IWL_PPAG_CMD_V4_MASK);
index 641b4463e898303a4d734b2b7d482a9ecab60718..bd5c0a27718cff0a10f034788064ba0cc47a1e7b 100644 (file)
@@ -226,6 +226,10 @@ int iwl_bios_get_dsm(struct iwl_fw_runtime *fwrt, enum iwl_dsm_funcs func,
 static inline u32 iwl_bios_get_ppag_flags(const u32 ppag_modes,
                                          const u8 ppag_bios_rev)
 {
+       /* For revision 4 and above driver is pipe */
+       if (ppag_bios_rev >= 4)
+               return ppag_modes;
+
        return ppag_modes & (ppag_bios_rev < 3 ? IWL_PPAG_ETSI_CHINA_MASK :
                                                 IWL_PPAG_REV3_MASK);
 }
index 37d2ced03ce12f2ee77f317ab5964cff5fc17532..ace36cb081e6f305e9b6f06ea4c5466a097990d9 100644 (file)
@@ -34,7 +34,7 @@
 #define IWL_UEFI_EWRD_REVISION         2
 #define IWL_UEFI_WGDS_REVISION         3
 #define IWL_UEFI_MIN_PPAG_REV          1
-#define IWL_UEFI_MAX_PPAG_REV          3
+#define IWL_UEFI_MAX_PPAG_REV          4
 #define IWL_UEFI_MIN_WTAS_REVISION     1
 #define IWL_UEFI_MAX_WTAS_REVISION     2
 #define IWL_UEFI_SPLC_REVISION         0