]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: Revert "wifi: iwlwifi: remove support of several iwl_ppag_table_cmd...
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 23 Jul 2025 06:45:15 +0000 (09:45 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 23 Jul 2025 11:10:57 +0000 (14:10 +0300)
It turns out that version 6 is still needed.
This change will be brought back once the FW that supports version 6 will no
longer be supported.

This reverts commit 24bc49d158c7 ("wifi: iwlwifi: remove support of several
iwl_ppag_table_cmd versions")

Link: https://patch.msgid.link/20250723064515.2084903-2-miriam.rachel.korenblit@intel.com
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/power.h
drivers/net/wireless/intel/iwlwifi/fw/regulatory.c

index ab84aac6605d46c31273e116bf7e2821931e8921..786b3bf4b448056c24da3f9f22c4d26b327d51d5 100644 (file)
@@ -571,7 +571,8 @@ enum iwl_ppag_flags {
 /**
  * union iwl_ppag_table_cmd - union for all versions of PPAG command
  * @v1: command version 1 structure.
- * @v2: command version 5 structure.
+ * @v2: command version from 2 to 6 are same structure as v2.
+ *     but has a different format of the flags bitmap
  * @v3: command version 7 structure.
  * @v1.flags: values from &enum iwl_ppag_flags
  * @v1.gain: table of antenna gain values per chain and sub-band
@@ -592,7 +593,9 @@ union iwl_ppag_table_cmd {
                __le32 flags;
                s8 gain[IWL_NUM_CHAIN_LIMITS][IWL_NUM_SUB_BANDS_V2];
                s8 reserved[2];
-       } __packed v2; /* PER_PLAT_ANTENNA_GAIN_CMD_API_S_VER_5 */
+       } __packed v2; /* PER_PLAT_ANTENNA_GAIN_CMD_API_S_VER_2, VER3, VER4,
+                       * VER5, VER6
+                       */
        struct {
                struct bios_value_u32 ppag_config_info;
                s8 gain[IWL_NUM_CHAIN_LIMITS][IWL_NUM_SUB_BANDS_V2];
@@ -600,11 +603,20 @@ union iwl_ppag_table_cmd {
        } __packed v3; /* PER_PLAT_ANTENNA_GAIN_CMD_API_S_VER_7 */
 } __packed;
 
-#define IWL_PPAG_CMD_V1_MASK (IWL_PPAG_ETSI_MASK | IWL_PPAG_CHINA_MASK)
-#define IWL_PPAG_CMD_V5_MASK (IWL_PPAG_CMD_V1_MASK | \
+#define IWL_PPAG_CMD_V4_MASK (IWL_PPAG_ETSI_MASK | IWL_PPAG_CHINA_MASK)
+#define IWL_PPAG_CMD_V5_MASK (IWL_PPAG_CMD_V4_MASK | \
                              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 80d8373fccfcd922be4eff039350400b831ea271..3d6d1a85bb51b3a2c8428bda036bfd46b8bb1bef 100644 (file)
@@ -344,18 +344,18 @@ int iwl_fill_ppag_table(struct iwl_fw_runtime *fwrt,
                num_sub_bands = IWL_NUM_SUB_BANDS_V1;
                gain = cmd->v1.gain[0];
                *cmd_size = sizeof(cmd->v1);
-               cmd->v1.flags = cpu_to_le32(fwrt->ppag_flags & IWL_PPAG_CMD_V1_MASK);
+               cmd->v1.flags = cpu_to_le32(fwrt->ppag_flags);
                if (fwrt->ppag_bios_rev >= 1) {
                        /* in this case FW supports revision 0 */
                        IWL_DEBUG_RADIO(fwrt,
                                        "PPAG table rev is %d, send truncated table\n",
                                        fwrt->ppag_bios_rev);
                }
-       } else if (cmd_ver == 5) {
+       } else if (cmd_ver >= 2 && cmd_ver <= 6) {
                num_sub_bands = IWL_NUM_SUB_BANDS_V2;
                gain = cmd->v2.gain[0];
                *cmd_size = sizeof(cmd->v2);
-               cmd->v2.flags = cpu_to_le32(fwrt->ppag_flags & IWL_PPAG_CMD_V5_MASK);
+               cmd->v2.flags = cpu_to_le32(fwrt->ppag_flags);
                if (fwrt->ppag_bios_rev == 0) {
                        /* in this case FW supports revisions 1,2 or 3 */
                        IWL_DEBUG_RADIO(fwrt,
@@ -378,9 +378,17 @@ int iwl_fill_ppag_table(struct iwl_fw_runtime *fwrt,
                        "PPAG MODE bits were read from bios: %d\n",
                        fwrt->ppag_flags);
 
-       if (cmd_ver == 1 &&
-           !fw_has_capa(&fwrt->fw->ucode_capa,
-                        IWL_UCODE_TLV_CAPA_PPAG_CHINA_BIOS_SUPPORT)) {
+       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);
+
+       if ((cmd_ver == 1 &&
+            !fw_has_capa(&fwrt->fw->ucode_capa,
+                         IWL_UCODE_TLV_CAPA_PPAG_CHINA_BIOS_SUPPORT)) ||
+           (cmd_ver == 2 && fwrt->ppag_bios_rev >= 2)) {
                cmd->v1.flags &= cpu_to_le32(IWL_PPAG_ETSI_MASK);
                IWL_DEBUG_RADIO(fwrt, "masking ppag China bit\n");
        } else {