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

Commit e8300ab4 authored by Maheshwar Ajja's avatar Maheshwar Ajja
Browse files

msm: vidc: Add secure usecase capabilities



Add secure usecase capabilities and corresponding
check conditions to reject sessions which are beyond
allowed capabilities.

Change-Id: I325dbc48aa6d94ed44324cd82e4925e3be23dc92
Signed-off-by: default avatarMaheshwar Ajja <majja@codeaurora.org>
parent eb0c0ec6
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -5377,6 +5377,7 @@ int msm_vidc_check_session_supported(struct msm_vidc_inst *inst)
	struct msm_vidc_core *core;
	u32 output_height, output_width, input_height, input_width;
	u32 width_min, width_max, height_min, height_max;
	u32 mbpf_max;

	if (!inst || !inst->core || !inst->core->device) {
		dprintk(VIDC_WARN, "%s: Invalid parameter\n", __func__);
@@ -5398,10 +5399,19 @@ int msm_vidc_check_session_supported(struct msm_vidc_inst *inst)
		return -ENOTSUPP;
	}

	if (is_secure_session(inst)) {
		width_min = capability->cap[CAP_SECURE_FRAME_WIDTH].min;
		width_max = capability->cap[CAP_SECURE_FRAME_WIDTH].max;
		height_min = capability->cap[CAP_SECURE_FRAME_HEIGHT].min;
		height_max = capability->cap[CAP_SECURE_FRAME_HEIGHT].max;
		mbpf_max = capability->cap[CAP_SECURE_MBS_PER_FRAME].max;
	} else {
		width_min = capability->cap[CAP_FRAME_WIDTH].min;
		width_max = capability->cap[CAP_FRAME_WIDTH].max;
		height_min = capability->cap[CAP_FRAME_HEIGHT].min;
		height_max = capability->cap[CAP_FRAME_HEIGHT].max;
		mbpf_max = capability->cap[CAP_MBS_PER_FRAME].max;
	}

	output_height = inst->prop.height[CAPTURE_PORT];
	output_width = inst->prop.width[CAPTURE_PORT];
@@ -5447,6 +5457,13 @@ int msm_vidc_check_session_supported(struct msm_vidc_inst *inst)
			width_max, height_max);
			rc = -ENOTSUPP;
		}
		if (!rc && NUM_MBS_PER_FRAME(input_width, input_height) >
			mbpf_max) {
			dprintk(VIDC_ERR, "Unsupported mbpf %d, max %d\n",
				NUM_MBS_PER_FRAME(input_width, input_height),
				mbpf_max);
			rc = -ENOTSUPP;
		}
	}
	if (rc) {
		dprintk(VIDC_ERR,
+5 −0
Original line number Diff line number Diff line
@@ -80,6 +80,11 @@ static inline bool is_realtime_session(struct msm_vidc_inst *inst)
	return !!(inst->flags & VIDC_REALTIME);
}

static inline bool is_secure_session(struct msm_vidc_inst *inst)
{
	return !!(inst->flags & VIDC_SECURE);
}

static inline bool is_decode_session(struct msm_vidc_inst *inst)
{
	return inst->session_type == MSM_VIDC_DECODER;
+6 −0
Original line number Diff line number Diff line
@@ -194,6 +194,12 @@ static struct msm_vidc_codec_capability kona_capabilities[] = {
	{CAP_MBS_PER_SECOND, DEC, MPEG2, 1, 244800, 1, 244800},
	{CAP_FRAMERATE, DEC, MPEG2, 1, 30, 1, 30},
	{CAP_BITRATE, DEC, MPEG2, 1, 40000000, 1, 20000000},

	/* Secure usecase specific */
	{CAP_SECURE_FRAME_WIDTH, DOMAINS_ALL, CODECS_ALL, 128, 4096, 1, 1920},
	{CAP_SECURE_FRAME_HEIGHT, DOMAINS_ALL, CODECS_ALL, 128, 4096, 1, 1080},
	/* (4096 * 2304) / 256 */
	{CAP_SECURE_MBS_PER_FRAME, DOMAINS_ALL, CODECS_ALL, 1, 36864, 1, 36864},
};

/*
+3 −0
Original line number Diff line number Diff line
@@ -272,6 +272,9 @@ enum hal_capability {
	CAP_MAX_VIDEOCORES,
	CAP_MAX_WORKMODES,
	CAP_UBWC_CR_STATS,
	CAP_SECURE_FRAME_WIDTH,
	CAP_SECURE_FRAME_HEIGHT,
	CAP_SECURE_MBS_PER_FRAME,
	CAP_MAX,
};