summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm/mac80211.c
diff options
context:
space:
mode:
authorLiad Kaufman2014-12-02 10:16:04 +0100
committerEmmanuel Grumbach2014-12-28 19:00:16 +0100
commitaddfaada8fd044ad8cb365a792a09b1b3265376f (patch)
tree7d1569580caf9307d76b1bac3e288852827e92cb /drivers/net/wireless/iwlwifi/mvm/mac80211.c
parentiwlwifi: mvm: support additional nvm_file in family 8000 B step (diff)
downloadkernel-qcow2-linux-addfaada8fd044ad8cb365a792a09b1b3265376f.tar.gz
kernel-qcow2-linux-addfaada8fd044ad8cb365a792a09b1b3265376f.tar.xz
kernel-qcow2-linux-addfaada8fd044ad8cb365a792a09b1b3265376f.zip
iwlwifi: mvm: add smem content to dump data
In NICs that have SMEM - add its content to the dump data for later debug. Signed-off-by: Liad Kaufman <liad.kaufman@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/mac80211.c')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index f53bfd6e8df8..d5d1cdaa0310 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -774,9 +774,16 @@ void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm)
u32 file_len, rxf_len;
unsigned long flags;
int reg_val;
+ u32 smem_len = mvm->cfg->smem_len;
lockdep_assert_held(&mvm->mutex);
+ /* W/A for 8000 HW family A-step */
+ if (mvm->cfg->smem_len &&
+ mvm->cfg->device_family == IWL_DEVICE_FAMILY_8000 &&
+ CSR_HW_REV_STEP(mvm->trans->hw_rev) == SILICON_A_STEP)
+ smem_len = 0x38000;
+
fw_error_dump = kzalloc(sizeof(*fw_error_dump), GFP_KERNEL);
if (!fw_error_dump)
return;
@@ -806,6 +813,10 @@ void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm)
rxf_len +
sizeof(*dump_info);
+ /* Make room for the SMEM, if it exists */
+ if (smem_len)
+ file_len += sizeof(*dump_data) + smem_len;
+
dump_file = vzalloc(file_len);
if (!dump_file) {
kfree(fw_error_dump);
@@ -856,6 +867,14 @@ void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm)
iwl_trans_read_mem_bytes(mvm->trans, sram_ofs, dump_data->data,
sram_len);
+ if (smem_len) {
+ dump_data = iwl_fw_error_next_data(dump_data);
+ dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_SMEM);
+ dump_data->len = cpu_to_le32(smem_len);
+ iwl_trans_read_mem_bytes(mvm->trans, mvm->cfg->smem_offset,
+ dump_data->data, smem_len);
+ }
+
fw_error_dump->trans_ptr = iwl_trans_dump_data(mvm->trans);
fw_error_dump->op_mode_len = file_len;
if (fw_error_dump->trans_ptr)