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

Commit 6b718e66 authored by Chunhuan Zhan's avatar Chunhuan Zhan
Browse files

msm: ais: add ais_tracing_mark_write for systrace



Add ais_tracing mark_write, a mechanism like UMD.
If some sequence needs to be showed on systrace HTML,
add AIS_ATRACE_BEGIN and AIS_ATRACE_END pair.

Change-Id: Idcbed2036000cd71dd083fdafa5c432b4bf6d235
Signed-off-by: default avatarChunhuan Zhan <zhanc@codeaurora.org>
parent 5bf9dfa8
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -13,4 +13,26 @@


/* Instantiate tracepoints */
/* Instantiate tracepoints */
#define CREATE_TRACE_POINTS
#define CREATE_TRACE_POINTS

#include <linux/io.h>
#include <linux/module.h>

#include "ais_isp_trace.h"
#include "ais_isp_trace.h"

static uint debug_trace;
module_param(debug_trace, uint, 0644);

void ais_trace_print(char c, int value, const char *fmt, ...)
{
	if (debug_trace) {
		char str_buffer[256];
		va_list args;

		va_start(args, fmt);
		vsnprintf(str_buffer, 256, fmt, args);

		trace_ais_tracing_mark_write(c, current, str_buffer, value);
		va_end(args);
	}
}
+30 −0
Original line number Original line Diff line number Diff line
@@ -223,6 +223,36 @@ TRACE_EVENT(ais_isp_vfe_error,
	)
	)
);
);


TRACE_EVENT(ais_tracing_mark_write,
	TP_PROTO(char trace_type, const struct task_struct *task,
			 const char *name, int value),
	TP_ARGS(trace_type, task, name, value),
	TP_STRUCT__entry(
					__field(char, trace_type)
					__field(int, pid)
					__string(trace_name, name)
					__field(int, value)
	),
	TP_fast_assign(
					__entry->trace_type = trace_type;
					__entry->pid = task ? task->tgid : 0;
					__assign_str(trace_name, name);
					__entry->value = value;
	),
	TP_printk("%c|%d|%s|%d", __entry->trace_type,
			__entry->pid, __get_str(trace_name), __entry->value)
);

void ais_trace_print(char c, int value, const char *fmt, ...);

#define AIS_ATRACE_BEGIN(fmt, args...) ais_trace_print('B', 0, fmt, ##args)

#define AIS_ATRACE_END(fmt, args...) ais_trace_print('E', 0, fmt, ##args)

#define AIS_ATRACE_INT(value, fmt, args...) \
		ais_trace_print('C', value, fmt, ##args)


#endif /* _AIS_ISP_TRACE_H */
#endif /* _AIS_ISP_TRACE_H */


/* This part must be outside protection */
/* This part must be outside protection */
+14 −1
Original line number Original line Diff line number Diff line
@@ -1078,7 +1078,11 @@ static int ais_vfe_handle_sof(
		if (p_rdi->state != AIS_ISP_RESOURCE_STATE_STREAMING)
		if (p_rdi->state != AIS_ISP_RESOURCE_STATE_STREAMING)
			continue;
			continue;


		AIS_ATRACE_BEGIN("SOF_%u_%u_%lu",
			core_info->vfe_idx, path, p_rdi->frame_cnt);
		ais_vfe_handle_sof_rdi(core_info, work_data, path);
		ais_vfe_handle_sof_rdi(core_info, work_data, path);
		AIS_ATRACE_END("SOF_%u_%u_%lu",
			core_info->vfe_idx, path, p_rdi->frame_cnt);


		//enq buffers
		//enq buffers
		spin_lock_bh(&p_rdi->buffer_lock);
		spin_lock_bh(&p_rdi->buffer_lock);
@@ -1333,8 +1337,12 @@ static int ais_vfe_bus_handle_frame_done(


		if (client_mask & (0x1 << client)) {
		if (client_mask & (0x1 << client)) {
			//process frame done
			//process frame done
			AIS_ATRACE_BEGIN("FD_%u_%u_%lu",
				core_info->vfe_idx, client, p_rdi->frame_cnt);
			ais_vfe_bus_handle_client_frame_done(core_info,
			ais_vfe_bus_handle_client_frame_done(core_info,
				client, work_data->last_addr[client]);
				client, work_data->last_addr[client]);
			AIS_ATRACE_END("FD_%u_%u_%lu",
				core_info->vfe_idx, client, p_rdi->frame_cnt);
		}
		}
	}
	}


@@ -1406,8 +1414,11 @@ static int ais_vfe_handle_bus_wr_irq(struct cam_hw_info *vfe_hw,
		work_data->bus_wr_status[1],
		work_data->bus_wr_status[1],
		work_data->bus_wr_status[2]);
		work_data->bus_wr_status[2]);


	if (work_data->bus_wr_status[1])
	if (work_data->bus_wr_status[1]) {
		AIS_ATRACE_BEGIN("FD_%d", core_info->vfe_idx);
		ais_vfe_bus_handle_frame_done(core_info, work_data);
		ais_vfe_bus_handle_frame_done(core_info, work_data);
		AIS_ATRACE_END("FD_%d", core_info->vfe_idx);
	}


	if (work_data->bus_wr_status[0] & 0x7800) {
	if (work_data->bus_wr_status[0] & 0x7800) {
		CAM_ERR(CAM_ISP, "VFE%d: WR BUS error occurred status = 0x%x",
		CAM_ERR(CAM_ISP, "VFE%d: WR BUS error occurred status = 0x%x",
@@ -1456,7 +1467,9 @@ static int ais_vfe_process_irq_bh(void *priv, void *data)


	switch (work_data->evt_type) {
	switch (work_data->evt_type) {
	case AIS_VFE_HW_IRQ_EVENT_SOF:
	case AIS_VFE_HW_IRQ_EVENT_SOF:
		AIS_ATRACE_BEGIN("SOF_%d", core_info->vfe_idx);
		rc = ais_vfe_handle_sof(core_info, work_data);
		rc = ais_vfe_handle_sof(core_info, work_data);
		AIS_ATRACE_END("SOF_%d", core_info->vfe_idx);
		break;
		break;
	case AIS_VFE_HW_IRQ_EVENT_BUS_WR:
	case AIS_VFE_HW_IRQ_EVENT_BUS_WR:
		rc = ais_vfe_handle_bus_wr_irq(vfe_hw, core_info, work_data);
		rc = ais_vfe_handle_bus_wr_irq(vfe_hw, core_info, work_data);
+2 −1
Original line number Original line Diff line number Diff line
@@ -197,11 +197,12 @@ int ais_vfe_deinit_soc_resources(struct cam_hw_soc_info *soc_info)
	if (rc)
	if (rc)
		CAM_ERR(CAM_ISP, "CPAS0 unregistration failed rc=%d", rc);
		CAM_ERR(CAM_ISP, "CPAS0 unregistration failed rc=%d", rc);


	if (!rc && soc_private->cpas_version == CAM_CPAS_TITAN_175_V120)
	if (!rc && soc_private->cpas_version == CAM_CPAS_TITAN_175_V120) {
		rc = cam_cpas_unregister_client(soc_private->cpas_handle[1]);
		rc = cam_cpas_unregister_client(soc_private->cpas_handle[1]);
		if (rc)
		if (rc)
			CAM_ERR(CAM_ISP, "CPAS1 unregistration failed rc=%d",
			CAM_ERR(CAM_ISP, "CPAS1 unregistration failed rc=%d",
				rc);
				rc);
	}


	rc = ais_vfe_release_platform_resource(soc_info);
	rc = ais_vfe_release_platform_resource(soc_info);
	if (rc < 0)
	if (rc < 0)