iwlwifi:mvm: Add support for version 2 of the LARI_CONFIG_CHANGE command.
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 10 Feb 2021 12:29:27 +0000 (14:29 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 10 Feb 2021 12:39:43 +0000 (14:39 +0200)
Add support for version 2 of the LARI_CONFIG_CHANGE command.
this is needed to support UHB enable/disable from BIOS

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210210142629.8a0c951bfdea.I850f29d3ff3931388447bda635dfbc742ea1df61@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/nvm-reg.h
drivers/net/wireless/intel/iwlwifi/mvm/fw.c

index b270620..fbca9dd 100644 (file)
@@ -415,15 +415,26 @@ enum iwl_lari_config_masks {
 };
 
 /**
- * struct iwl_lari_config_change_cmd - change LARI configuration
+ * struct iwl_lari_config_change_cmd_v1 - change LARI configuration
  * @config_bitmap: bit map of the config commands. each bit will trigger a
  * different predefined FW config operation
  */
-struct iwl_lari_config_change_cmd {
+struct iwl_lari_config_change_cmd_v1 {
        __le32 config_bitmap;
 } __packed; /* LARI_CHANGE_CONF_CMD_S_VER_1 */
 
 /**
+ * struct iwl_lari_config_change_cmd_v2 - change LARI configuration
+ * @config_bitmap: bit map of the config commands. each bit will trigger a
+ * different predefined FW config operation
+ * @oem_uhb_allow_bitmap: bitmap of UHB enabled MCC sets
+ */
+struct iwl_lari_config_change_cmd_v2 {
+       __le32 config_bitmap;
+       __le32 oem_uhb_allow_bitmap;
+} __packed; /* LARI_CHANGE_CONF_CMD_S_VER_2 */
+
+/**
  * struct iwl_pnvm_init_complete_ntfy - PNVM initialization complete
  * @status: PNVM image loading status
  */
index 76c4608..20e93a9 100644 (file)
@@ -1196,7 +1196,7 @@ static void iwl_mvm_lari_cfg(struct iwl_mvm *mvm)
 {
        u8 ret;
        int cmd_ret;
-       struct iwl_lari_config_change_cmd cmd = {};
+       struct iwl_lari_config_change_cmd_v2 cmd = {};
 
        if (iwl_mvm_eval_dsm_indonesia_5g2(mvm) == DSM_VALUE_INDONESIA_ENABLE)
                cmd.config_bitmap |=
@@ -1214,11 +1214,18 @@ static void iwl_mvm_lari_cfg(struct iwl_mvm *mvm)
        /* apply more config masks here */
 
        if (cmd.config_bitmap) {
-               IWL_DEBUG_RADIO(mvm, "sending LARI_CONFIG_CHANGE\n");
+               size_t cmd_size = iwl_fw_lookup_cmd_ver(mvm->fw,
+                                                       REGULATORY_AND_NVM_GROUP,
+                                                       LARI_CONFIG_CHANGE, 1) == 2 ?
+                       sizeof(struct iwl_lari_config_change_cmd_v2) :
+                       sizeof(struct iwl_lari_config_change_cmd_v1);
+               IWL_DEBUG_RADIO(mvm,
+                               "sending LARI_CONFIG_CHANGE, config_bitmap=0x%x\n",
+                               le32_to_cpu(cmd.config_bitmap));
                cmd_ret = iwl_mvm_send_cmd_pdu(mvm,
                                               WIDE_ID(REGULATORY_AND_NVM_GROUP,
                                                       LARI_CONFIG_CHANGE),
-                                              0, sizeof(cmd), &cmd);
+                                              0, cmd_size, &cmd);
                if (cmd_ret < 0)
                        IWL_DEBUG_RADIO(mvm,
                                        "Failed to send LARI_CONFIG_CHANGE (%d)\n",