|
|
@@ -64,6 +64,7 @@
|
|
|
|
|
|
#include "iwl-debug.h"
|
|
|
#include "iwl-io.h"
|
|
|
+#include "iwl-prph.h"
|
|
|
|
|
|
#include "mvm.h"
|
|
|
#include "fw-api-rs.h"
|
|
|
@@ -469,6 +470,8 @@ void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
|
|
|
mvm->status, table.valid);
|
|
|
}
|
|
|
|
|
|
+ /* Do not change this output - scripts rely on it */
|
|
|
+
|
|
|
IWL_ERR(mvm, "Loaded firmware version: %s\n", mvm->fw->fw_version);
|
|
|
|
|
|
trace_iwlwifi_dev_ucode_error(trans->dev, table.error_id, table.tsf_low,
|
|
|
@@ -522,7 +525,7 @@ void iwl_mvm_fw_error_sram_dump(struct iwl_mvm *mvm)
|
|
|
u32 ofs, sram_len;
|
|
|
void *sram;
|
|
|
|
|
|
- if (!mvm->ucode_loaded || mvm->fw_error_sram)
|
|
|
+ if (!mvm->ucode_loaded || mvm->fw_error_sram || mvm->fw_error_dump)
|
|
|
return;
|
|
|
|
|
|
img = &mvm->fw->img[mvm->cur_ucode];
|
|
|
@@ -538,6 +541,47 @@ void iwl_mvm_fw_error_sram_dump(struct iwl_mvm *mvm)
|
|
|
mvm->fw_error_sram_len = sram_len;
|
|
|
}
|
|
|
|
|
|
+void iwl_mvm_fw_error_rxf_dump(struct iwl_mvm *mvm)
|
|
|
+{
|
|
|
+ int i, reg_val;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ if (!mvm->ucode_loaded || mvm->fw_error_rxf || mvm->fw_error_dump)
|
|
|
+ return;
|
|
|
+
|
|
|
+ /* reading buffer size */
|
|
|
+ reg_val = iwl_trans_read_prph(mvm->trans, RXF_SIZE_ADDR);
|
|
|
+ mvm->fw_error_rxf_len =
|
|
|
+ (reg_val & RXF_SIZE_BYTE_CNT_MSK) >> RXF_SIZE_BYTE_CND_POS;
|
|
|
+
|
|
|
+ /* the register holds the value divided by 128 */
|
|
|
+ mvm->fw_error_rxf_len = mvm->fw_error_rxf_len << 7;
|
|
|
+
|
|
|
+ if (!mvm->fw_error_rxf_len)
|
|
|
+ return;
|
|
|
+
|
|
|
+ mvm->fw_error_rxf = kzalloc(mvm->fw_error_rxf_len, GFP_ATOMIC);
|
|
|
+ if (!mvm->fw_error_rxf) {
|
|
|
+ mvm->fw_error_rxf_len = 0;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!iwl_trans_grab_nic_access(mvm->trans, false, &flags)) {
|
|
|
+ kfree(mvm->fw_error_rxf);
|
|
|
+ mvm->fw_error_rxf = NULL;
|
|
|
+ mvm->fw_error_rxf_len = 0;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 0; i < (mvm->fw_error_rxf_len / sizeof(u32)); i++) {
|
|
|
+ iwl_trans_write_prph(mvm->trans, RXF_LD_FENCE_OFFSET_ADDR,
|
|
|
+ i * sizeof(u32));
|
|
|
+ mvm->fw_error_rxf[i] =
|
|
|
+ iwl_trans_read_prph(mvm->trans, RXF_FIFO_RD_FENCE_ADDR);
|
|
|
+ }
|
|
|
+ iwl_trans_release_nic_access(mvm->trans, &flags);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* iwl_mvm_send_lq_cmd() - Send link quality command
|
|
|
* @init: This command is sent as part of station initialization right
|