diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index 4d4cbae83a0..d6a73179ebf 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
@@ -315,10 +315,6 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data) | |||
315 | jiffies_to_msecs(trans_pcie->wd_timeout)); | 315 | jiffies_to_msecs(trans_pcie->wd_timeout)); |
316 | 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 | txq->q.read_ptr, txq->q.write_ptr); | 317 | txq->q.read_ptr, txq->q.write_ptr); |
318 | IWL_ERR(trans, "Current HW read_ptr %d write_ptr %d\n", | ||
319 | iwl_read_prph(trans, SCD_QUEUE_RDPTR(txq->q.id)) | ||
320 | & (TFD_QUEUE_SIZE_MAX - 1), | ||
321 | iwl_read_prph(trans, SCD_QUEUE_WRPTR(txq->q.id))); | ||
322 | 318 | ||
323 | iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf)); | 319 | iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf)); |
324 | 320 | ||
@@ -328,6 +324,28 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data) | |||
328 | IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i, | 324 | IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i, |
329 | iwl_read_direct32(trans, FH_TX_TRB_REG(i))); | 325 | iwl_read_direct32(trans, FH_TX_TRB_REG(i))); |
330 | 326 | ||
327 | for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) { | ||
328 | u32 status = iwl_read_prph(trans, SCD_QUEUE_STATUS_BITS(i)); | ||
329 | u8 fifo = (status >> SCD_QUEUE_STTS_REG_POS_TXF) & 0x7; | ||
330 | bool active = !!(status & BIT(SCD_QUEUE_STTS_REG_POS_ACTIVE)); | ||
331 | u32 tbl_dw = | ||
332 | iwl_read_targ_mem(trans, | ||
333 | trans_pcie->scd_base_addr + | ||
334 | SCD_TRANS_TBL_OFFSET_QUEUE(i)); | ||
335 | |||
336 | if (i & 0x1) | ||
337 | tbl_dw = (tbl_dw & 0xFFFF0000) >> 16; | ||
338 | else | ||
339 | tbl_dw = tbl_dw & 0x0000FFFF; | ||
340 | |||
341 | IWL_ERR(trans, | ||
342 | "Q %d is %sactive and mapped to fifo %d ra_tid 0x%04x [%d,%d]\n", | ||
343 | i, active ? "" : "in", fifo, tbl_dw, | ||
344 | iwl_read_prph(trans, | ||
345 | SCD_QUEUE_RDPTR(i)) & (txq->q.n_bd - 1), | ||
346 | iwl_read_prph(trans, SCD_QUEUE_WRPTR(i))); | ||
347 | } | ||
348 | |||
331 | iwl_op_mode_nic_error(trans->op_mode); | 349 | iwl_op_mode_nic_error(trans->op_mode); |
332 | } | 350 | } |
333 | 351 | ||