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

Commit 400bfcec authored by Shravya Samala's avatar Shravya Samala Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: isp: Add trace event in case of irq delay detected



Added trace event and called this trace
when irq delay is detected.

CRs-Fixed: 2688566
Change-Id: Ifcc27fca2db3d003edada46adf4cef28f8f9efcd
Signed-off-by: default avatarShravya Samala <shravyas@codeaurora.org>
parent 1e25bb79
Loading
Loading
Loading
Loading
+49 −7
Original line number Diff line number Diff line
@@ -596,8 +596,14 @@ static int __cam_isp_ctx_handle_buf_done_in_activated_state(
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = done->irq_mono_boot_time;
	else if (ctx_isp->fps && ((done->irq_mono_boot_time -
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at buf_done",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(done->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = done->irq_mono_boot_time;

@@ -851,8 +857,14 @@ static int __cam_isp_ctx_reg_upd_in_epoch_state(
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
	return 0;
@@ -906,8 +918,14 @@ static int __cam_isp_ctx_reg_upd_in_activated_state(
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
end:
@@ -1091,8 +1109,14 @@ static int __cam_isp_ctx_sof_in_activated_state(
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((sof_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at sof",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(sof_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time;

@@ -1138,8 +1162,14 @@ static int __cam_isp_ctx_reg_upd_in_sof(struct cam_isp_context *ctx_isp,
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at reg_upd",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(rup_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = rup_event_data->irq_mono_boot_time;
end:
@@ -1228,8 +1258,14 @@ static int __cam_isp_ctx_epoch_in_applied(struct cam_isp_context *ctx_isp,
		ctx_isp->irq_timestamps =
			epoch_hw_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((epoch_hw_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at epoch",
			ctx, req->request_id,
			ctx_isp->substate_activated,
			(epoch_hw_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = epoch_hw_event_data->irq_mono_boot_time;

@@ -1268,8 +1304,14 @@ static int __cam_isp_ctx_sof_in_epoch(struct cam_isp_context *ctx_isp,
	if (ctx_isp->frame_id == 1)
		ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time;
	else if (ctx_isp->fps && ((sof_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps)))
		ctx_isp->irq_timestamps) > ((1000*1000)/ctx_isp->fps))) {
		ctx_isp->irq_delay_detect = true;
		trace_cam_isp_irq_delay_detect("IRQ delay at sof",
			ctx, 0,
			ctx_isp->substate_activated,
			(sof_event_data->irq_mono_boot_time -
			ctx_isp->irq_timestamps));
	}

	ctx_isp->irq_timestamps = sof_event_data->irq_mono_boot_time;

+29 −1
Original line number Diff line number Diff line
/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -286,6 +286,34 @@ TRACE_EVENT(cam_irq_handled,
	)
);

TRACE_EVENT(cam_isp_irq_delay_detect,
	TP_PROTO(const char *text, struct cam_context *ctx,
		uint64_t request_id, uint32_t substate,
		uint64_t timestamp),
	TP_ARGS(text, ctx, request_id, substate, timestamp),
	TP_STRUCT__entry(
		__string(text, text)
		__field(uint32_t, ctx_id)
		__field(uint64_t, dev_id)
		__field(uint64_t, req_id)
		__field(uint32_t, substate)
		__field(uint64_t, ts)
	),
	TP_fast_assign(
		__assign_str(text, text);
		__entry->ctx_id = ctx->ctx_id;
		__entry->dev_id = ctx->dev_id;
		__entry->req_id = request_id;
		__entry->substate = substate;
		__entry->ts = timestamp;
	),
	TP_printk(
		"ISP: %s ctx=%u dev_id=%u req_id=%lld substate=%u event=%u delay_by=%llu",
			__get_str(text), __entry->ctx_id, __entry->dev_id,
			__entry->req_id, __entry->substate, __entry->ts
	)
);

TRACE_EVENT(cam_cdm_cb,
	TP_PROTO(const char *entity, uint32_t status),
	TP_ARGS(entity, status),