Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12af0468 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Johannes Berg
Browse files

iwlwifi: print even more info when a queue is stuck



Since the queue gets stuck from time to time, we are trying
to get as much information as we can when this occurs.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 65fe593a
Loading
Loading
Loading
Loading
+22 −4
Original line number Original line Diff line number Diff line
@@ -315,10 +315,6 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
		jiffies_to_msecs(trans_pcie->wd_timeout));
		jiffies_to_msecs(trans_pcie->wd_timeout));
	IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n",
	IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n",
		txq->q.read_ptr, txq->q.write_ptr);
		txq->q.read_ptr, txq->q.write_ptr);
	IWL_ERR(trans, "Current HW read_ptr %d write_ptr %d\n",
		iwl_read_prph(trans, SCD_QUEUE_RDPTR(txq->q.id))
					& (TFD_QUEUE_SIZE_MAX - 1),
		iwl_read_prph(trans, SCD_QUEUE_WRPTR(txq->q.id)));


	iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf));
	iwl_read_targ_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf));


@@ -328,6 +324,28 @@ static void iwl_trans_pcie_queue_stuck_timer(unsigned long data)
		IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i,
		IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i,
			iwl_read_direct32(trans, FH_TX_TRB_REG(i)));
			iwl_read_direct32(trans, FH_TX_TRB_REG(i)));


	for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) {
		u32 status = iwl_read_prph(trans, SCD_QUEUE_STATUS_BITS(i));
		u8 fifo = (status >> SCD_QUEUE_STTS_REG_POS_TXF) & 0x7;
		bool active = !!(status & BIT(SCD_QUEUE_STTS_REG_POS_ACTIVE));
		u32 tbl_dw =
			iwl_read_targ_mem(trans,
					  trans_pcie->scd_base_addr +
					  SCD_TRANS_TBL_OFFSET_QUEUE(i));

		if (i & 0x1)
			tbl_dw = (tbl_dw & 0xFFFF0000) >> 16;
		else
			tbl_dw = tbl_dw & 0x0000FFFF;

		IWL_ERR(trans,
			"Q %d is %sactive and mapped to fifo %d ra_tid 0x%04x [%d,%d]\n",
			i, active ? "" : "in", fifo, tbl_dw,
			iwl_read_prph(trans,
				      SCD_QUEUE_RDPTR(i)) & (txq->q.n_bd - 1),
			iwl_read_prph(trans, SCD_QUEUE_WRPTR(i)));
	}

	iwl_op_mode_nic_error(trans->op_mode);
	iwl_op_mode_nic_error(trans->op_mode);
}
}