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

Commit c63742c8 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 171f8043 on remote branch

Change-Id: If108155c0fbff698ae59c013bee137ea8caaecf4
parents 35795cf9 171f8043
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
 */

#include <linux/module.h>
@@ -492,6 +492,12 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev)

	core->id = MSM_VIDC_CORE_VENUS;

	vidc_driver->ctxt = kcalloc(core->platform_data->max_inst_count,
		sizeof(*vidc_driver->ctxt), GFP_KERNEL);
	if (!vidc_driver->ctxt)
		goto err_vidc_context;
	vidc_driver->num_ctxt = core->platform_data->max_inst_count;

	rc = v4l2_device_register(&pdev->dev, &core->v4l2_dev);
	if (rc) {
		d_vpr_e("Failed to register v4l2 device\n");
@@ -588,6 +594,8 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev)
err_dec:
	v4l2_device_unregister(&core->v4l2_dev);
err_v4l2_register:
	kfree(vidc_driver->ctxt);
err_vidc_context:
	sysfs_remove_group(&pdev->dev.kobj, &msm_vidc_core_attr_group);
err_core_init:
	dev_set_drvdata(&pdev->dev, NULL);
@@ -660,6 +668,7 @@ static int msm_vidc_remove(struct platform_device *pdev)
	mutex_destroy(&core->resources.cb_lock);
	mutex_destroy(&core->lock);
	kfree(core);
	kfree(vidc_driver->ctxt);
	return rc;
}

+11 −15
Original line number Diff line number Diff line
@@ -1237,9 +1237,11 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst)
		return -EINVAL;
	}

	latency.enable = false;
	hdev = inst->core->device;
	if (inst->clk_data.low_latency_mode) {
		pdata.video_work_mode = HFI_WORKMODE_1;
		latency.enable = true;
		goto decision_done;
	}

@@ -1259,20 +1261,25 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst)
		}
	} else if (inst->session_type == MSM_VIDC_ENCODER) {
		pdata.video_work_mode = HFI_WORKMODE_1;
		/* For WORK_MODE_1, set Low Latency mode by default */
		latency.enable = true;
		if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR ||
				inst->rc_type ==
					V4L2_MPEG_VIDEO_BITRATE_MODE_MBR ||
				inst->rc_type ==
					V4L2_MPEG_VIDEO_BITRATE_MODE_MBR_VFR ||
				inst->rc_type ==
					V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
					V4L2_MPEG_VIDEO_BITRATE_MODE_CQ) {
			pdata.video_work_mode = HFI_WORKMODE_2;
			latency.enable = false;
		}
	} else {
		return -EINVAL;
	}

decision_done:

	s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u",
			pdata.video_work_mode, latency.enable);
	inst->clk_data.work_mode = pdata.video_work_mode;
	rc = call_hfi_op(hdev, session_set_property,
			(void *)inst->session, HFI_PROPERTY_PARAM_WORK_MODE,
@@ -1280,22 +1287,12 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst)
	if (rc)
		s_vpr_e(inst->sid, "Failed to configure Work Mode\n");

	/* For WORK_MODE_1, set Low Latency mode by default to HW. */

	latency.enable = false;
	if (inst->session_type == MSM_VIDC_ENCODER &&
			inst->clk_data.work_mode == HFI_WORKMODE_1) {
		latency.enable = true;
	if (inst->session_type == MSM_VIDC_ENCODER && latency.enable) {
		rc = call_hfi_op(hdev, session_set_property,
			(void *)inst->session,
			HFI_PROPERTY_PARAM_VENC_LOW_LATENCY_MODE,
			(void *)&latency, sizeof(latency));
	}

	s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u",
			pdata.video_work_mode,
			latency.enable);

	rc = msm_comm_scale_clocks_and_bus(inst, 1);

	return rc;
@@ -1401,8 +1398,7 @@ int msm_vidc_decide_work_mode_iris2(struct msm_vidc_inst *inst)
	}

	s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u",
			pdata.video_work_mode,
			latency.enable);
			pdata.video_work_mode, latency.enable);

	if (inst->session_type == MSM_VIDC_ENCODER) {
		rc = call_hfi_op(hdev, session_set_property,
+0 −1
Original line number Diff line number Diff line
@@ -3014,7 +3014,6 @@ static int msm_comm_init_core(struct msm_vidc_inst *inst)
	core->state = VIDC_CORE_INIT;
	core->smmu_fault_handled = false;
	core->trigger_ssr = false;
	core->resources.max_inst_count = MAX_SUPPORTED_INSTANCES;
	core->resources.max_secure_inst_count =
		core->resources.max_secure_inst_count ?
		core->resources.max_secure_inst_count :
+11 −13
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
 */

#define CREATE_TRACE_POINTS
@@ -31,8 +31,6 @@ int msm_vidc_vpp_delay;
	atomic_read(&__binfo->ref_count) >= 2 ? "video driver" : "firmware";\
})

struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES];

struct core_inst_pair {
	struct msm_vidc_core *core;
	struct msm_vidc_inst *inst;
@@ -614,16 +612,16 @@ 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;
	for (i = 0; i < vidc_driver->num_ctxt; i++) {
		if (!vidc_driver->ctxt[i].used) {
			vidc_driver->ctxt[i].used = 1;
			*sid = i+1;
			update_log_ctxt(*sid, session_type, 0);
			break;
		}
	}

	return (i == MAX_SUPPORTED_INSTANCES);
	return (i == vidc_driver->num_ctxt);
}

inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc)
@@ -632,7 +630,7 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc)
	char type;
	u32 s_type = 0;

	if (!sid || sid > MAX_SUPPORTED_INSTANCES) {
	if (!sid || sid > vidc_driver->num_ctxt) {
		d_vpr_e("%s: invalid sid %#x\n",
			__func__, sid);
	}
@@ -679,11 +677,11 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc)
		break;
	}

	ctxt[sid-1].session_type = s_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';
	vidc_driver->ctxt[sid-1].session_type = s_type;
	vidc_driver->ctxt[sid-1].codec_type = fourcc;
	memcpy(&vidc_driver->ctxt[sid-1].name, codec, 4);
	vidc_driver->ctxt[sid-1].name[4] = type;
	vidc_driver->ctxt[sid-1].name[5] = '\0';
}

/* Mock all the missing parts for successful compilation starts here */
+8 −16
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
 */

#ifndef __MSM_VIDC_DEBUG__
@@ -92,13 +92,6 @@ enum vidc_err_recovery_disable {
	VIDC_DISABLE_NON_NOC_ERR_RECOV = 0x0002
};

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

extern int msm_vidc_debug;
extern int msm_vidc_fw_debug_mode;
extern bool msm_vidc_fw_coverage;
@@ -109,7 +102,6 @@ extern bool msm_vidc_lossless_encode;
extern bool msm_vidc_cvp_usage;
extern int msm_vidc_err_recovery_disable;
extern int msm_vidc_vpp_delay;
extern struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES];

#define dprintk(__level, sid, __fmt, ...)	\
	do { \
@@ -237,10 +229,10 @@ static inline bool is_print_allowed(u32 sid, u32 level)
	if (!((msm_vidc_debug >> 8) & 0xF))
		return true;

	if (!sid || sid > MAX_SUPPORTED_INSTANCES)
	if (!sid || sid > vidc_driver->num_ctxt)
		return true;

	if (ctxt[sid-1].session_type & msm_vidc_debug)
	if (vidc_driver->ctxt[sid-1].session_type & msm_vidc_debug)
		return true;

	return false;
@@ -248,21 +240,21 @@ static inline bool is_print_allowed(u32 sid, u32 level)

static inline char *get_codec_name(u32 sid)
{
	if (!sid || sid > MAX_SUPPORTED_INSTANCES)
	if (!sid || sid > vidc_driver->num_ctxt)
		return ".....";

	return ctxt[sid-1].name;
	return vidc_driver->ctxt[sid-1].name;
}

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

static inline void tic(struct msm_vidc_inst *i, enum profiling_points p,
Loading