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

Commit 508ceb1d authored by Camera Software Integration's avatar Camera Software Integration Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: ope: Add debug fs for dumping frame setting logs" into camera-kernel.lnx.3.1

parents 7d828d06 e2afd6fd
Loading
Loading
Loading
Loading
+43 −30
Original line number Diff line number Diff line
@@ -1791,15 +1791,14 @@ static void cam_ope_mgr_print_stripe_info(uint32_t batch,
{
	CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d: E",
		batch, io_buf, plane, stripe);
	CAM_DBG(CAM_OPE, "width: %d s_w: %u s_h: %u s_s: %u",
		stripe_info->width, stripe_info->width,
		stripe_info->height, stripe_info->stride);
	CAM_DBG(CAM_OPE, "width: %d s_h: %u s_s: %u",
		stripe_info->width, stripe_info->height,
		stripe_info->stride);
	CAM_DBG(CAM_OPE, "s_xinit = %u iova = %x s_loc = %u",
		 stripe_info->s_location, stripe_info->x_init,
		 iova_addr);
	CAM_DBG(CAM_OPE, "s_off = %u s_format = %u s_len = %u",
		stripe_info->x_init, iova_addr, stripe_info->s_location);
	CAM_DBG(CAM_OPE, "s_off = %u s_format = %u s_len = %u d_bus %d",
		stripe_info->offset, stripe_info->format,
		stripe_info->len);
		stripe_info->len, stripe_info->disable_bus);
	CAM_DBG(CAM_OPE, "s_align = %u s_pack = %u s_unpack = %u",
		stripe_info->alignment, stripe_info->pack_format,
		stripe_info->unpack_format);
@@ -1839,35 +1838,15 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr,
		in_frame_set = &in_frame_process->frame_set[i];
		for (j = 0; j < in_frame_set->num_io_bufs; j++) {
			in_io_buf = &in_frame_set->io_buf[j];
			CAM_DBG(CAM_OPE, "i:%d j:%d dir: %x rsc: %u plane: %d",
				i, j, in_io_buf->direction,
				in_io_buf->resource_type,
				in_io_buf->num_planes);
			for (k = 0; k < in_io_buf->num_planes; k++) {
				CAM_DBG(CAM_OPE, "i:%d j:%d k:%d numstripe: %d",
					i, j, k, in_io_buf->num_stripes[k]);
				CAM_DBG(CAM_OPE, "m_hdl: %d len: %d",
					in_io_buf->mem_handle[k],
					in_io_buf->length[k]);

				if (!in_io_buf->num_stripes[k]) {
					CAM_ERR(CAM_OPE, "Null num_stripes");
					return -EINVAL;
				}

				for (l = 0; l < in_io_buf->num_stripes[k];
					l++) {
					in_stripe_info =
						&in_io_buf->stripe_info[k][l];
					CAM_DBG(CAM_OPE, "i:%d j:%d k:%d l:%d",
						i, j, k, l);
					CAM_DBG(CAM_OPE, "%d s_loc:%d w:%d",
						in_stripe_info->x_init,
						in_stripe_info->stripe_location,
						in_stripe_info->width);
					CAM_DBG(CAM_OPE,  "s_off: %d d_bus: %d",
						in_stripe_info->offset,
						in_stripe_info->disable_bus);
				}
			}
		}
@@ -1925,9 +1904,6 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr,
				unpack_format = 0;
			}

			CAM_DBG(CAM_OPE, "i:%d j:%d dir:%d rsc type:%d fmt:%d",
				i, j, io_buf->direction, io_buf->resource_type,
				io_buf->format);
			for (k = 0; k < in_io_buf->num_planes; k++) {
				io_buf->num_stripes[k] =
					in_io_buf->num_stripes[k];
@@ -1954,6 +1930,11 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr,
					return -EINVAL;
				}
				iova_addr += in_io_buf->plane_offset[k];
				CAM_DBG(CAM_OPE,
					"E rsc %d stripes %d dir %d plane %d",
					in_io_buf->resource_type,
					in_io_buf->direction,
					in_io_buf->num_stripes[k], k);
				for (l = 0; l < in_io_buf->num_stripes[k];
					l++) {
					in_stripe_info =
@@ -1984,6 +1965,11 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr,
					cam_ope_mgr_print_stripe_info(i, j,
						k, l, stripe_info, iova_addr);
				}
				CAM_DBG(CAM_OPE,
					"X rsc %d stripes %d dir %d plane %d",
					in_io_buf->resource_type,
					in_io_buf->direction,
					in_io_buf->num_stripes[k], k);
			}
		}
	}
@@ -3755,6 +3741,31 @@ static int cam_ope_mgr_create_wq(void)
	return rc;
}

static int cam_ope_create_debug_fs(void)
{
	ope_hw_mgr->dentry = debugfs_create_dir("camera_ope",
		NULL);

	if (!ope_hw_mgr->dentry) {
		CAM_ERR(CAM_OPE, "failed to create dentry");
		return -ENOMEM;
	}

	if (!debugfs_create_bool("frame_dump_enable",
		0644,
		ope_hw_mgr->dentry,
		&ope_hw_mgr->frame_dump_enable)) {
		CAM_ERR(CAM_OPE,
			"failed to create dump_enable_debug");
		goto err;
	}

	return 0;
err:
	debugfs_remove_recursive(ope_hw_mgr->dentry);
	return -ENOMEM;
}


int cam_ope_hw_mgr_init(struct device_node *of_node, uint64_t *hw_mgr_hdl,
	int *iommu_hdl)
@@ -3860,6 +3871,8 @@ int cam_ope_hw_mgr_init(struct device_node *of_node, uint64_t *hw_mgr_hdl,
	if (rc)
		goto ope_wq_create_failed;

	cam_ope_create_debug_fs();

	if (iommu_hdl)
		*iommu_hdl = ope_hw_mgr->iommu_hdl;

+2 −0
Original line number Diff line number Diff line
@@ -529,6 +529,8 @@ struct cam_ope_hw_mgr {
	struct cam_hw_intf *ope_dev_intf[OPE_DEV_MAX];
	struct cam_soc_reg_map *cdm_reg_map[OPE_DEV_MAX][OPE_BASE_MAX];
	struct cam_ope_clk_info clk_info;
	struct dentry *dentry;
	bool   frame_dump_enable;
};

/**
+20 −31
Original line number Diff line number Diff line
@@ -190,16 +190,18 @@ static uint32_t *cam_ope_bus_rd_update(struct ope_hw *ope_hw_info,
	cdm_ops = ctx_data->ope_cdm.cdm_ops;

	ope_request = ctx_data->req_list[req_idx];
	CAM_DBG(CAM_OPE, "req_idx = %d req_id = %lld KMDbuf %x offset %d",
		req_idx, ope_request->request_id,
		kmd_buf, prepare->kmd_buf_offset);

	bus_rd_ctx = &bus_rd->bus_rd_ctx[ctx_id];
	io_port_info = &bus_rd_ctx->io_port_info;
	rd_reg = ope_hw_info->bus_rd_reg;
	rd_reg_val = ope_hw_info->bus_rd_reg_val;

	io_buf = ope_request->io_buf[batch_idx][io_idx];

	CAM_DBG(CAM_OPE,
		"req_idx = %d req_id = %lld KMDbuf 0x%x offset %d rsc %d",
		req_idx, ope_request->request_id,
		kmd_buf, prepare->kmd_buf_offset,
		io_buf->resource_type);
	CAM_DBG(CAM_OPE, "batch:%d iobuf:%d direction:%d",
		batch_idx, io_idx, io_buf->direction);
	io_port_cdm =
@@ -307,20 +309,15 @@ static uint32_t *cam_ope_bus_rd_update(struct ope_hw *ope_hw_info,
				sizeof(temp));
			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			for (m = 0; m < count; m++)
				CAM_DBG(CAM_OPE, "%d:temp:%x",
					m, temp_reg[m]);
			for (m = 0; m < count; m += 2)
				CAM_DBG(CAM_OPE, "%d: off: 0x%x val: 0x%x",
					m, temp_reg[m], temp_reg[m+1]);
			CAM_DBG(CAM_OPE, "kmd_buf:%x offset:%d",
				kmd_buf, prepare->kmd_buf_offset);
			CAM_DBG(CAM_OPE, "%x count: %d size:%d",
				 temp_reg, count, header_size);
			CAM_DBG(CAM_OPE, "RD cmdbufs:%d off:%d",
			CAM_DBG(CAM_OPE, "RD cmdbufs:%d off:%d len %d",
				io_port_cdm->num_s_cmd_bufs[l],
			io_port_cdm->s_cdm_info[l][idx].offset);
			CAM_DBG(CAM_OPE, "len:%d",
				io_port_cdm->s_cdm_info[l][idx].offset,
				io_port_cdm->s_cdm_info[l][idx].len);
			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			count = 0;
		}
	}
@@ -372,8 +369,9 @@ static uint32_t *cam_ope_bus_rm_disable(struct ope_hw *ope_hw_info,
	io_port_cdm_batch = &bus_rd_ctx->io_port_cdm_batch;
	rd_reg = ope_hw_info->bus_rd_reg;

	CAM_DBG(CAM_OPE, "kmd_buf = %x req_idx = %d offset = %d",
		kmd_buf, req_idx, prepare->kmd_buf_offset);
	CAM_DBG(CAM_OPE,
		"kmd_buf = 0x%x req_idx = %d offset = %d rd_idx %d b %d",
		kmd_buf, req_idx, prepare->kmd_buf_offset, rm_idx, batch_idx);

	io_port_cdm =
		&bus_rd_ctx->io_port_cdm_batch.io_port_cdm[batch_idx];
@@ -402,20 +400,11 @@ static uint32_t *cam_ope_bus_rm_disable(struct ope_hw *ope_hw_info,
		prepare->kmd_buf_offset += ((count + header_size) *
			sizeof(temp));

		CAM_DBG(CAM_OPE, "b:%d s:%d",
			batch_idx, l);
		CAM_DBG(CAM_OPE, "kmdbuf:%x, offset:%d",
			kmd_buf, prepare->kmd_buf_offset);
		CAM_DBG(CAM_OPE, "count:%d temp_reg:%x",
			count, temp_reg, header_size);
		CAM_DBG(CAM_OPE, "header_size:%d", header_size);
		CAM_DBG(CAM_OPE, "RD cmd bufs = %d",
			io_port_cdm->num_s_cmd_bufs[l]);
		CAM_DBG(CAM_OPE, "off:%d len:%d",
			io_port_cdm->s_cdm_info[l][idx].offset,
		CAM_DBG(CAM_OPE, "stripe %d off:%d len:%d",
			l, io_port_cdm->s_cdm_info[l][idx].offset,
			io_port_cdm->s_cdm_info[l][idx].len);
		CAM_DBG(CAM_OPE, "b:%d s:%d",
			batch_idx, l);
		count = 0;
	}

+13 −28
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ static uint32_t *cam_ope_bus_wr_update(struct ope_hw *ope_hw_info,
	int batch_idx, int io_idx,
	uint32_t *kmd_buf, uint32_t *num_stripes)
{
	int k, l, out_port_idx;
	int k, l, m, out_port_idx;
	uint32_t idx;
	uint32_t num_wm_ports;
	uint32_t comb_idx;
@@ -226,8 +226,8 @@ static uint32_t *cam_ope_bus_wr_update(struct ope_hw *ope_hw_info,
		prepare->kmd_buf_offset);

	io_buf = ope_request->io_buf[batch_idx][io_idx];
	CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d",
		batch_idx, io_idx, io_buf->direction);
	CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d rsc %d",
		batch_idx, io_idx, io_buf->direction, io_buf->resource_type);

	io_port_cdm =
		&bus_wr_ctx->io_port_cdm_batch.io_port_cdm[batch_idx];
@@ -335,19 +335,15 @@ static uint32_t *cam_ope_bus_wr_update(struct ope_hw *ope_hw_info,

			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			for (m = 0; m < count; m += 2)
				CAM_DBG(CAM_OPE, "%d: off: 0x%x val: 0x%x",
					m, temp_reg[m], temp_reg[m+1]);
			CAM_DBG(CAM_OPE, "kmdbuf:%x, offset:%d",
				kmd_buf, prepare->kmd_buf_offset);
			CAM_DBG(CAM_OPE, "count:%d temp_reg:%x",
				count, temp_reg, header_size);
			CAM_DBG(CAM_OPE, "header_size:%d", header_size);

			CAM_DBG(CAM_OPE, "WR cmd bufs = %d",
				io_port_cdm->num_s_cmd_bufs[l]);
			CAM_DBG(CAM_OPE, "off:%d len:%d",
			CAM_DBG(CAM_OPE, "WR cmd bufs = %d off:%d len:%d",
				io_port_cdm->num_s_cmd_bufs[l],
				io_port_cdm->s_cdm_info[l][idx].offset,
				io_port_cdm->s_cdm_info[l][idx].len);
			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			count = 0;
		}
	}
@@ -398,8 +394,9 @@ static uint32_t *cam_ope_bus_wm_disable(struct ope_hw *ope_hw_info,
	io_port_cdm_batch = &bus_wr_ctx->io_port_cdm_batch;
	wr_reg = ope_hw_info->bus_wr_reg;

	CAM_DBG(CAM_OPE, "kmd_buf = %x req_idx = %d offset = %d",
		kmd_buf, req_idx, prepare->kmd_buf_offset);
	CAM_DBG(CAM_OPE,
		"kmd_buf = %x req_idx = %d offset = %d out_idx %d b %d",
		kmd_buf, req_idx, prepare->kmd_buf_offset, io_idx, batch_idx);

	io_port_cdm =
		&bus_wr_ctx->io_port_cdm_batch.io_port_cdm[batch_idx];
@@ -409,8 +406,6 @@ static uint32_t *cam_ope_bus_wm_disable(struct ope_hw *ope_hw_info,

	for (k = 0; k < num_wm_ports; k++) {
		for (l = 0; l < num_stripes; l++) {
			CAM_DBG(CAM_OPE, "comb_idx = %d p_idx = %d s_idx = %d",
				comb_idx, k, l);
			/* frame level info */
			/* stripe level info */
			wm_port_id = out_port_to_wm->wm_port_id[comb_idx][k];
@@ -436,21 +431,11 @@ static uint32_t *cam_ope_bus_wm_disable(struct ope_hw *ope_hw_info,
			prepare->kmd_buf_offset += ((count + header_size) *
				sizeof(temp));

			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			CAM_DBG(CAM_OPE, "kmdbuf:%x, offset:%d",
				kmd_buf, prepare->kmd_buf_offset);
			CAM_DBG(CAM_OPE, "count:%d temp_reg:%x",
				count, temp_reg, header_size);
			CAM_DBG(CAM_OPE, "header_size:%d", header_size);

			CAM_DBG(CAM_OPE, "WR cmd bufs = %d",
				io_port_cdm->num_s_cmd_bufs[l]);
			CAM_DBG(CAM_OPE, "off:%d len:%d",
				io_port_cdm->s_cdm_info[l][idx].offset,
			CAM_DBG(CAM_OPE, "s:%d off:%d len:%d",
				l, io_port_cdm->s_cdm_info[l][idx].offset,
				io_port_cdm->s_cdm_info[l][idx].len);
			CAM_DBG(CAM_OPE, "b:%d io:%d p:%d s:%d",
				batch_idx, io_idx, k, l);
			count = 0;
		}
	}
+30 −25
Original line number Diff line number Diff line
@@ -427,7 +427,7 @@ static int dump_dmi_cmd(uint32_t print_idx,
	return 0;
}

static int dump_frame_direct(uint32_t print_idx,
static int dump_direct_cmd(uint32_t print_idx,
	uint32_t *print_ptr,
	struct ope_frame_process *frm_proc,
	int batch_idx, int cmd_buf_idx)
@@ -569,7 +569,7 @@ static uint32_t *ope_create_frame_cmd_batch(struct cam_ope_hw_mgr *hw_mgr,
				iova_addr,
				frm_proc->cmd_buf[i][j].length);
			print_ptr = (uint32_t *)cpu_addr;
			dump_frame_direct(print_idx, print_ptr,
			dump_direct_cmd(print_idx, print_ptr,
				frm_proc, i, j);
		} else {
			num_dmi = frm_proc->cmd_buf[i][j].length /
@@ -591,6 +591,7 @@ static uint32_t *ope_create_frame_cmd_batch(struct cam_ope_hw_mgr *hw_mgr,
					0, dmi_cmd->DMIAddr,
					dmi_cmd->DMISel, dmi_cmd->addr,
					dmi_cmd->length);
				if (hw_mgr->frame_dump_enable)
					dump_dmi_cmd(print_idx,
						print_ptr, dmi_cmd, temp);
				print_ptr +=
@@ -599,6 +600,7 @@ static uint32_t *ope_create_frame_cmd_batch(struct cam_ope_hw_mgr *hw_mgr,
			}
			CAM_DBG(CAM_OPE, "Frame DB : In direct: X");
		}
		if (hw_mgr->frame_dump_enable)
			dump_frame_cmd(frm_proc, i, j,
				iova_addr, kmd_buf, buf_len);
	}
@@ -724,7 +726,8 @@ static uint32_t *ope_create_frame_cmd(struct cam_ope_hw_mgr *hw_mgr,
					iova_addr,
					frm_proc->cmd_buf[i][j].length);
				print_ptr = (uint32_t *)cpu_addr;
				dump_frame_direct(print_idx, print_ptr,
				if (hw_mgr->frame_dump_enable)
					dump_direct_cmd(print_idx, print_ptr,
						frm_proc, i, j);
			} else {
				num_dmi = frm_proc->cmd_buf[i][j].length /
@@ -747,14 +750,17 @@ static uint32_t *ope_create_frame_cmd(struct cam_ope_hw_mgr *hw_mgr,
						0, dmi_cmd->DMIAddr,
						dmi_cmd->DMISel, dmi_cmd->addr,
						dmi_cmd->length);
					if (hw_mgr->frame_dump_enable)
						dump_dmi_cmd(print_idx,
						print_ptr, dmi_cmd, temp);
							print_ptr, dmi_cmd,
							temp);
					print_ptr +=
						sizeof(struct cdm_dmi_cmd) /
						sizeof(uint32_t);
				}
				CAM_DBG(CAM_OPE, "Frame DB : In direct: X");
			}
			if (hw_mgr->frame_dump_enable)
				dump_frame_cmd(frm_proc, i, j,
					iova_addr, kmd_buf, buf_len);
		}
@@ -831,12 +837,9 @@ static uint32_t *ope_create_stripe_cmd(struct cam_ope_hw_mgr *hw_mgr,
			print_ptr = (uint32_t *)cpu_addr;
			CAM_DBG(CAM_OPE, "Stripe:%d direct:E",
				stripe_idx);
			for (print_idx = 0; print_idx <
				frm_proc->cmd_buf[i][k].length / 4;
				print_idx++) {
				CAM_DBG(CAM_OPE, "%d: %x", print_idx,
					print_ptr[print_idx]);
			}
			if (hw_mgr->frame_dump_enable)
				dump_direct_cmd(print_idx, print_ptr,
					frm_proc, i, k);
			CAM_DBG(CAM_OPE, "Stripe:%d direct:X", stripe_idx);
		} else if (frm_proc->cmd_buf[i][k].type ==
			OPE_CMD_BUF_TYPE_INDIRECT) {
@@ -856,6 +859,7 @@ static uint32_t *ope_create_stripe_cmd(struct cam_ope_hw_mgr *hw_mgr,
				kmd_buf = cdm_ops->cdm_write_dmi(kmd_buf,
					0, dmi_cmd->DMIAddr, dmi_cmd->DMISel,
					dmi_cmd->addr, dmi_cmd->length);
				if (hw_mgr->frame_dump_enable)
					dump_dmi_cmd(print_idx,
						print_ptr, dmi_cmd, temp);
				print_ptr += sizeof(struct cdm_dmi_cmd) /
@@ -863,6 +867,7 @@ static uint32_t *ope_create_stripe_cmd(struct cam_ope_hw_mgr *hw_mgr,
			}
			CAM_DBG(CAM_OPE, "Stripe:%d Indirect:X", stripe_idx);
		}
		if (hw_mgr->frame_dump_enable)
			dump_stripe_cmd(frm_proc, stripe_idx, i, k,
				iova_addr, kmd_buf, buf_len);
	}