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

Commit 2548b43a authored by Govindaraj Rajagopal's avatar Govindaraj Rajagopal
Browse files

msm: vidc: print session and codec type in dprintk



[1] Maintain log_ctxt cookie to track debug information.
[2] Print codec type and session type by default in logs.

Change-Id: I6c01f3238ba868fdc525f5c60f58545a07bdef3a
Signed-off-by: default avatarGovindaraj Rajagopal <grajagop@codeaurora.org>
parent c705bf58
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -657,7 +657,8 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
				"%s: session not supported\n", __func__);
			goto err_invalid_fmt;
		}

		update_log_ctxt(inst->sid, inst->session_type,
			mplane->pixelformat);
		memcpy(f, &fmt->v4l2_fmt, sizeof(struct v4l2_format));
	}

+2 −1
Original line number Diff line number Diff line
@@ -1323,7 +1323,8 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
				"%s: session not supported\n", __func__);
			goto exit;
		}

		update_log_ctxt(inst->sid, inst->session_type,
			mplane->pixelformat);
		memcpy(f, &fmt->v4l2_fmt, sizeof(struct v4l2_format));
	} else if (f->type == INPUT_MPLANE) {
		fmt = &inst->fmts[INPUT_PORT];
+14 −3
Original line number Diff line number Diff line
@@ -1528,10 +1528,17 @@ void *msm_vidc_open(int core_id, int session_type)
		rc = -ENOMEM;
		goto err_invalid_core;
	}
	inst->sid = hash32_ptr(inst);
	mutex_lock(&core->lock);
	rc = get_sid(&inst->sid, session_type);
	mutex_unlock(&core->lock);
	if (rc) {
		d_vpr_e("Total instances count reached to max value\n");
		goto err_invalid_sid;
	}

	pr_info(VIDC_DBG_TAG "Opening video instance: %pK, %d\n",
		"high", inst->sid, inst, session_type);
		"high", inst->sid, get_codec_name(inst->sid),
		inst, session_type);
	mutex_init(&inst->sync_lock);
	mutex_init(&inst->bufq[OUTPUT_PORT].lock);
	mutex_init(&inst->bufq[INPUT_PORT].lock);
@@ -1668,6 +1675,8 @@ void *msm_vidc_open(int core_id, int session_type)
	DEINIT_MSM_VIDC_LIST(&inst->fbd_data);
	DEINIT_MSM_VIDC_LIST(&inst->window_data);

err_invalid_sid:
	put_sid(inst->sid);
	kfree(inst);
	inst = NULL;
err_invalid_core:
@@ -1803,7 +1812,9 @@ int msm_vidc_destroy(struct msm_vidc_inst *inst)
	msm_vidc_debugfs_deinit_inst(inst);

	pr_info(VIDC_DBG_TAG "Closed video instance: %pK\n",
			"high", inst->sid, inst);
			"high", inst->sid, get_codec_name(inst->sid),
			inst);
	put_sid(inst->sid);
	kfree(inst);
	return 0;
}
+105 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ bool msm_vidc_cvp_usage = true;
	atomic_read(&__binfo->ref_count) >= 2 ? "video driver" : "firmware";\
})

static struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES];

struct core_inst_pair {
	struct msm_vidc_core *core;
	struct msm_vidc_inst *inst;
@@ -596,3 +598,106 @@ int msm_vidc_check_ratelimit(void)
	return __ratelimit(&_rs);
}

/**
 * get_sid() must be called under "&core->lock"
 * to avoid race condition in occurring empty slot.
 */
int get_sid(u32 *sid, u32 session_type)
{
	int i;

	for (i = 0; i < MAX_SUPPORTED_INSTANCES; i++) {
		if (!ctxt[i].used) {
			ctxt[i].used = 1;
			*sid = i+1;
			update_log_ctxt(*sid, session_type, 0);
			break;
		}
	}

	return (i == MAX_SUPPORTED_INSTANCES);
}

void put_sid(u32 sid)
{
	if (!sid || sid > MAX_SUPPORTED_INSTANCES) {
		d_vpr_e("%s: invalid sid %#x\n",
			__func__, sid);
		return;
	}
	if (ctxt[sid-1].used)
		ctxt[sid-1].used = 0;
}

inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc)
{
	const char *codec;
	char type;

	if (!sid || sid > MAX_SUPPORTED_INSTANCES) {
		d_vpr_e("%s: invalid sid %#x\n",
			__func__, sid);
	}

	switch (fourcc) {
	case V4L2_PIX_FMT_H264:
	case V4L2_PIX_FMT_H264_NO_SC:
		codec = "h264";
		break;
	case V4L2_PIX_FMT_H264_MVC:
		codec = " mvc";
		break;
	case V4L2_PIX_FMT_MPEG1:
		codec = "mpg1";
		break;
	case V4L2_PIX_FMT_MPEG2:
		codec = "mpg2";
		break;
	case V4L2_PIX_FMT_VP8:
		codec = " vp8";
		break;
	case V4L2_PIX_FMT_VP9:
		codec = " vp9";
		break;
	case V4L2_PIX_FMT_HEVC:
		codec = "h265";
		break;
	case V4L2_PIX_FMT_TME:
		codec = " tme";
		break;
	case V4L2_PIX_FMT_CVP:
		codec = " cvp";
		break;
	default:
		codec = "....";
		break;
	}

	switch (session_type) {
	case MSM_VIDC_ENCODER:
		type = 'e';
		break;
	case MSM_VIDC_DECODER:
		type = 'd';
		break;
	case MSM_VIDC_CVP:
		type = 'c';
	default:
		type = '.';
		break;
	}

	ctxt[sid-1].session_type = session_type;
	ctxt[sid-1].codec_type = fourcc;
	memcpy(&ctxt[sid-1].name, codec, 4);
	ctxt[sid-1].name[4] = type;
	ctxt[sid-1].name[5] = '\0';
}

char *get_codec_name(u32 sid)
{
	if (!sid || sid > MAX_SUPPORTED_INSTANCES)
		return ".....";

	return ctxt[sid-1].name;
}
+17 −4
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@
#define VIDC_DBG_SESSION_RATELIMIT_INTERVAL (1 * HZ)
#define VIDC_DBG_SESSION_RATELIMIT_BURST 6

#define VIDC_DBG_TAG VIDC_DBG_LABEL ": %6s: %8x: "
#define VIDC_DBG_TAG VIDC_DBG_LABEL ": %6s: %08x: %5s: "
#define FW_DBG_TAG VIDC_DBG_LABEL ": %6s: "
#define DEFAULT_SID ((u32)-1)

/* To enable messages OR these values and
@@ -69,6 +70,13 @@ extern bool msm_vidc_syscache_disable;
extern bool msm_vidc_lossless_encode;
extern bool msm_vidc_cvp_usage;

struct log_cookie {
	u32 used;
	u32 session_type;
	u32 codec_type;
	char name[20];
};

#define dprintk(__level, sid, __fmt, ...)	\
	do { \
		if (msm_vidc_debug & __level) { \
@@ -79,6 +87,7 @@ extern bool msm_vidc_cvp_usage;
					VIDC_DBG_TAG __fmt, \
					get_debug_level_str(__level), \
					sid, \
					get_codec_name(sid), \
					##__VA_ARGS__); \
				trace_msm_vidc_printf(trace_logbuf, \
					log_length); \
@@ -87,6 +96,7 @@ extern bool msm_vidc_cvp_usage;
				pr_info(VIDC_DBG_TAG __fmt, \
					get_debug_level_str(__level), \
					sid, \
					get_codec_name(sid), \
					##__VA_ARGS__); \
			} \
		} \
@@ -120,14 +130,14 @@ extern bool msm_vidc_cvp_usage;
			char trace_logbuf[MAX_TRACER_LOG_LENGTH]; \
			int log_length = snprintf(trace_logbuf, \
				MAX_TRACER_LOG_LENGTH, \
				VIDC_DBG_TAG __fmt, \
				FW_DBG_TAG __fmt, \
				"fw", \
				##__VA_ARGS__); \
			trace_msm_vidc_printf(trace_logbuf, \
				log_length); \
		} \
		if (__level & FW_PRINTK) { \
			pr_info(VIDC_DBG_TAG __fmt, \
			pr_info(FW_DBG_TAG __fmt, \
				"fw", \
				##__VA_ARGS__); \
		} \
@@ -146,7 +156,6 @@ extern bool msm_vidc_cvp_usage;
		BUG_ON(value);					\
	} while (0)


struct dentry *msm_vidc_debugfs_init_drv(void);
struct dentry *msm_vidc_debugfs_init_core(struct msm_vidc_core *core,
		struct dentry *parent);
@@ -156,6 +165,10 @@ void msm_vidc_debugfs_deinit_inst(struct msm_vidc_inst *inst);
void msm_vidc_debugfs_update(struct msm_vidc_inst *inst,
		enum msm_vidc_debugfs_event e);
int msm_vidc_check_ratelimit(void);
int get_sid(u32 *sid, u32 session_type);
void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc);
char *get_codec_name(u32 sid);
void put_sid(u32 sid);

static inline char *get_debug_level_str(int level)
{