|
@@ -61,47 +61,76 @@ static void __iomem *hfi_iface_addr(struct hfi_info *hfi)
|
|
return IS_ERR_OR_NULL(ret) ? NULL : ret;
|
|
return IS_ERR_OR_NULL(ret) ? NULL : ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void hfi_queue_dump(uint32_t *dwords, int count)
|
|
|
|
+{
|
|
|
|
+ int i;
|
|
|
|
+ int rows;
|
|
|
|
+ int remaining;
|
|
|
|
+
|
|
|
|
+ rows = count / 4;
|
|
|
|
+ remaining = count % 4;
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < rows; i++, dwords += 4)
|
|
|
|
+ CAM_DBG(CAM_HFI,
|
|
|
|
+ "word[%04d]: 0x%08x 0x%08x 0x%08x 0x%08x",
|
|
|
|
+ i * 4, dwords[0], dwords[1], dwords[2], dwords[3]);
|
|
|
|
+
|
|
|
|
+ if (remaining == 1)
|
|
|
|
+ CAM_DBG(CAM_HFI, "word[%04d]: 0x%08x", rows * 4, dwords[0]);
|
|
|
|
+ else if (remaining == 2)
|
|
|
|
+ CAM_DBG(CAM_HFI, "word[%04d]: 0x%08x 0x%08x",
|
|
|
|
+ rows * 4, dwords[0], dwords[1]);
|
|
|
|
+ else if (remaining == 3)
|
|
|
|
+ CAM_DBG(CAM_HFI, "word[%04d]: 0x%08x 0x%08x 0x%08x",
|
|
|
|
+ rows * 4, dwords[0], dwords[1], dwords[2]);
|
|
|
|
+}
|
|
|
|
+
|
|
void cam_hfi_queue_dump(void)
|
|
void cam_hfi_queue_dump(void)
|
|
{
|
|
{
|
|
|
|
+ struct hfi_mem_info *hfi_mem = &g_hfi->map;
|
|
struct hfi_qtbl *qtbl;
|
|
struct hfi_qtbl *qtbl;
|
|
- struct hfi_qtbl_hdr *qtbl_hdr;
|
|
|
|
- struct hfi_q_hdr *cmd_q_hdr, *msg_q_hdr;
|
|
|
|
- struct hfi_mem_info *hfi_mem = NULL;
|
|
|
|
- uint32_t *read_q, *read_ptr;
|
|
|
|
- int i;
|
|
|
|
|
|
+ struct hfi_q_hdr *q_hdr;
|
|
|
|
+ uint32_t *dwords;
|
|
|
|
+ int num_dwords;
|
|
|
|
|
|
- hfi_mem = &g_hfi->map;
|
|
|
|
if (!hfi_mem) {
|
|
if (!hfi_mem) {
|
|
- CAM_ERR(CAM_HFI, "Unable to dump queues hfi memory is NULL");
|
|
|
|
|
|
+ CAM_ERR(CAM_HFI, "hfi mem info NULL... unable to dump queues");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
qtbl = (struct hfi_qtbl *)hfi_mem->qtbl.kva;
|
|
qtbl = (struct hfi_qtbl *)hfi_mem->qtbl.kva;
|
|
- qtbl_hdr = &qtbl->q_tbl_hdr;
|
|
|
|
CAM_DBG(CAM_HFI,
|
|
CAM_DBG(CAM_HFI,
|
|
- "qtbl: version = %x size = %u num q = %u qhdr_size = %u",
|
|
|
|
- qtbl_hdr->qtbl_version, qtbl_hdr->qtbl_size,
|
|
|
|
- qtbl_hdr->qtbl_num_q, qtbl_hdr->qtbl_qhdr_size);
|
|
|
|
|
|
+ "qtbl header: version=0x%08x tbl_size=%u numq=%u qhdr_size=%u",
|
|
|
|
+ qtbl->q_tbl_hdr.qtbl_version,
|
|
|
|
+ qtbl->q_tbl_hdr.qtbl_size,
|
|
|
|
+ qtbl->q_tbl_hdr.qtbl_num_q,
|
|
|
|
+ qtbl->q_tbl_hdr.qtbl_qhdr_size);
|
|
|
|
|
|
- cmd_q_hdr = &qtbl->q_hdr[Q_CMD];
|
|
|
|
- CAM_DBG(CAM_HFI, "cmd: size = %u r_idx = %u w_idx = %u addr = %x",
|
|
|
|
- cmd_q_hdr->qhdr_q_size, cmd_q_hdr->qhdr_read_idx,
|
|
|
|
- cmd_q_hdr->qhdr_write_idx, hfi_mem->cmd_q.iova);
|
|
|
|
- read_q = (uint32_t *)g_hfi->map.cmd_q.kva;
|
|
|
|
- read_ptr = (uint32_t *)(read_q + 0);
|
|
|
|
- CAM_DBG(CAM_HFI, "CMD Q START");
|
|
|
|
- for (i = 0; i < ICP_CMD_Q_SIZE_IN_BYTES >> BYTE_WORD_SHIFT; i++)
|
|
|
|
- CAM_DBG(CAM_HFI, "Word: %d Data: 0x%08x ", i, read_ptr[i]);
|
|
|
|
|
|
+ q_hdr = &qtbl->q_hdr[Q_CMD];
|
|
|
|
+ CAM_DBG(CAM_HFI,
|
|
|
|
+ "cmd_q: addr=0x%08x size=%u read_idx=%u write_idx=%u",
|
|
|
|
+ hfi_mem->cmd_q.iova,
|
|
|
|
+ q_hdr->qhdr_q_size,
|
|
|
|
+ q_hdr->qhdr_read_idx,
|
|
|
|
+ q_hdr->qhdr_write_idx);
|
|
|
|
|
|
- msg_q_hdr = &qtbl->q_hdr[Q_MSG];
|
|
|
|
- CAM_DBG(CAM_HFI, "msg: size = %u r_idx = %u w_idx = %u addr = %x",
|
|
|
|
- msg_q_hdr->qhdr_q_size, msg_q_hdr->qhdr_read_idx,
|
|
|
|
- msg_q_hdr->qhdr_write_idx, hfi_mem->msg_q.iova);
|
|
|
|
- read_q = (uint32_t *)g_hfi->map.msg_q.kva;
|
|
|
|
- read_ptr = (uint32_t *)(read_q + 0);
|
|
|
|
- CAM_DBG(CAM_HFI, "MSG Q START");
|
|
|
|
- for (i = 0; i < ICP_MSG_Q_SIZE_IN_BYTES >> BYTE_WORD_SHIFT; i++)
|
|
|
|
- CAM_DBG(CAM_HFI, "Word: %d Data: 0x%08x ", i, read_ptr[i]);
|
|
|
|
|
|
+ dwords = (uint32_t *)hfi_mem->cmd_q.kva;
|
|
|
|
+ num_dwords = ICP_CMD_Q_SIZE_IN_BYTES >> BYTE_WORD_SHIFT;
|
|
|
|
+
|
|
|
|
+ hfi_queue_dump(dwords, num_dwords);
|
|
|
|
+
|
|
|
|
+ q_hdr = &qtbl->q_hdr[Q_MSG];
|
|
|
|
+ CAM_DBG(CAM_HFI,
|
|
|
|
+ "msg_q: addr=0x%08x size=%u read_idx=%u write_idx=%u",
|
|
|
|
+ hfi_mem->msg_q.iova,
|
|
|
|
+ q_hdr->qhdr_q_size,
|
|
|
|
+ q_hdr->qhdr_read_idx,
|
|
|
|
+ q_hdr->qhdr_write_idx);
|
|
|
|
+
|
|
|
|
+ dwords = (uint32_t *)hfi_mem->msg_q.kva;
|
|
|
|
+ num_dwords = ICP_MSG_Q_SIZE_IN_BYTES >> BYTE_WORD_SHIFT;
|
|
|
|
+
|
|
|
|
+ hfi_queue_dump(dwords, num_dwords);
|
|
}
|
|
}
|
|
|
|
|
|
int hfi_write_cmd(void *cmd_ptr)
|
|
int hfi_write_cmd(void *cmd_ptr)
|