aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/pcie/trans.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-06-10 12:36:18 -0400
committerJohannes Berg <johannes.berg@intel.com>2012-06-13 03:01:02 -0400
commitf22d33289ae61c79aa27170f7b9e4b2b2e95281d (patch)
tree868620482f5afaf38a41ab9e745973e7c90e8db6 /drivers/net/wireless/iwlwifi/pcie/trans.c
parente4b1681eafa62e2b34710f70ab3494c89cc03130 (diff)
iwlwifi: print more info when a queue is stuck
Print some more info from the SCD's SRAM and dump the TRB from the FH. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/trans.c')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
index 1eabb834e32a..1904fdaf3177 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
@@ -298,6 +298,10 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
298 struct iwl_tx_queue *txq = (void *)data; 298 struct iwl_tx_queue *txq = (void *)data;
299 struct iwl_trans_pcie *trans_pcie = txq->trans_pcie; 299 struct iwl_trans_pcie *trans_pcie = txq->trans_pcie;
300 struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie); 300 struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie);
301 u32 scd_sram_addr = trans_pcie->scd_base_addr +
302 SCD_TX_STTS_MEM_LOWER_BOUND + (16 * txq->q.id);
303 u8 buf[16];
304 int i;
301 305
302 spin_lock(&txq->lock); 306 spin_lock(&txq->lock);
303 /* check if triggered erroneously */ 307 /* check if triggered erroneously */
@@ -307,7 +311,6 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
307 } 311 }
308 spin_unlock(&txq->lock); 312 spin_unlock(&txq->lock);
309 313
310
311 IWL_ERR(trans, "Queue %d stuck for %u ms.\n", txq->q.id, 314 IWL_ERR(trans, "Queue %d stuck for %u ms.\n", txq->q.id,
312 jiffies_to_msecs(trans_pcie->wd_timeout)); 315 jiffies_to_msecs(trans_pcie->wd_timeout));
313 IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n", 316 IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n",
@@ -317,6 +320,14 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
317 & (TFD_QUEUE_SIZE_MAX - 1), 320 & (TFD_QUEUE_SIZE_MAX - 1),
318 iwl_read_prph(trans, SCD_QUEUE_WRPTR(txq->q.id))); 321 iwl_read_prph(trans, SCD_QUEUE_WRPTR(txq->q.id)));
319 322
323 iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf));
324
325 iwl_print_hex_error(trans, buf, sizeof(buf));
326
327 for (i = 0; i < FH_TCSR_CHNL_NUM; i++)
328 IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i,
329 iwl_read_direct32(trans, FH_TX_TRB_REG(i)));
330
320 iwl_op_mode_nic_error(trans->op_mode); 331 iwl_op_mode_nic_error(trans->op_mode);
321} 332}
322 333