]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
iwlwifi: mvm: support fw reading empty OTP
authorLiad Kaufman <liad.kaufman@intel.com>
Mon, 5 Jun 2017 13:39:39 +0000 (16:39 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Tue, 1 Aug 2017 09:41:45 +0000 (12:41 +0300)
If the OTP is empty, the NVM_GET_INFO command returns
with flags' bit(0) on. This means the FW returns the
default values for working with. This is allowed, so
use this returned data.

Fixes: e9e1ba3dbf00 ("iwlwifi: mvm: support getting nvm data from firmware")
Signed-off-by: Liad Kaufman <liad.kaufman@intel.com>
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/nvm.c

index d4c01f3dce3214d03c4e3cdbd7c49bf4f899ff00..00bc7a25dece29bd80392383eef7186aa8b961c0 100644 (file)
@@ -163,9 +163,17 @@ struct iwl_nvm_get_info {
        __le32 reserved;
 } __packed; /* GRP_REGULATORY_NVM_GET_INFO_CMD_S_VER_1 */
 
+/**
+ * enum iwl_nvm_info_general_flags - flags in NVM_GET_INFO resp
+ * @NVM_GENERAL_FLAGS_EMPTY_OTP: 1 if OTP is empty
+ */
+enum iwl_nvm_info_general_flags {
+       NVM_GENERAL_FLAGS_EMPTY_OTP     = BIT(0),
+};
+
 /**
  * struct iwl_nvm_get_info_general - general NVM data
- * @flags: 1 - empty, 0 - valid
+ * @flags: bit 0: 1 - empty, 0 - non-empty
  * @nvm_version: nvm version
  * @board_type: board type
  * @reserved: reserved
index dac7e542a190641b736d83d7c31cedaef867477c..5cc749261ce3d84ffff14836304542709e63c9ce 100644 (file)
@@ -576,11 +576,8 @@ int iwl_mvm_nvm_get_from_fw(struct iwl_mvm *mvm)
        }
 
        rsp = (void *)hcmd.resp_pkt->data;
-       if (le32_to_cpu(rsp->general.flags)) {
-               IWL_ERR(mvm, "Invalid NVM data from FW\n");
-               ret = -EINVAL;
-               goto out;
-       }
+       if (le32_to_cpu(rsp->general.flags) & NVM_GENERAL_FLAGS_EMPTY_OTP)
+               IWL_INFO(mvm, "OTP is empty\n");
 
        mvm->nvm_data = kzalloc(sizeof(*mvm->nvm_data) +
                                sizeof(struct ieee80211_channel) *