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

Commit 0c7159de authored by Amine Najahi's avatar Amine Najahi Committed by Samantha Tran
Browse files

disp: msm: sde: cache vbif QoS parameters



Cache vbif QoS parameters to avoid unnecessary reprogramming
of plane vbif registers. This will reduce frame time and
frame drop count.

Change-Id: I20ed97bbac54fa9b11a8784d7a4004f1ccc00632
Signed-off-by: default avatarAmine Najahi <anajahi@codeaurora.org>
Signed-off-by: default avatarSamantha Tran <samtran@codeaurora.org>
parent ed6f9809
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ struct sde_plane {
	struct sde_hw_pipe_cfg pipe_cfg;
	struct sde_hw_sharp_cfg sharp_cfg;
	struct sde_hw_pipe_qos_cfg pipe_qos_cfg;
	struct sde_vbif_set_qos_params cached_qos_params;
	uint32_t color_fill;
	bool is_error;
	bool is_rt_pipe;
@@ -627,8 +628,9 @@ static void _sde_plane_set_ot_limit(struct drm_plane *plane,
/**
 * _sde_plane_set_vbif_qos - set vbif QoS for the given plane
 * @plane:		Pointer to drm plane
 * @force:		Force update of vbif QoS
 */
static void _sde_plane_set_qos_remap(struct drm_plane *plane)
static void _sde_plane_set_qos_remap(struct drm_plane *plane, bool force)
{
	struct sde_plane *psde;
	struct sde_vbif_set_qos_params qos_params;
@@ -661,6 +663,15 @@ static void _sde_plane_set_qos_remap(struct drm_plane *plane)
	qos_params.client_type = psde->is_rt_pipe ?
					VBIF_RT_CLIENT : VBIF_NRT_CLIENT;

	if (!force && !memcmp(&qos_params, &psde->cached_qos_params,
			sizeof(struct sde_vbif_set_qos_params))) {
		return;
	}
	SDE_DEBUG("changes in vbif QoS parameters, remap it\n");

	memcpy(&psde->cached_qos_params, &qos_params,
			sizeof(struct sde_vbif_set_qos_params));

	SDE_DEBUG("plane%d pipe:%d vbif:%d xin:%d rt:%d, clk_ctrl:%d\n",
			plane->base.id, qos_params.num,
			qos_params.vbif_idx,
@@ -1751,7 +1762,7 @@ void sde_plane_secure_ctrl_xin_client(struct drm_plane *plane,
		return;

	/* do all VBIF programming for the sec-ui allowed SSPP */
	_sde_plane_set_qos_remap(plane);
	_sde_plane_set_qos_remap(plane, true);
	_sde_plane_set_ot_limit(plane, crtc);
}

@@ -3094,7 +3105,10 @@ static void _sde_plane_update_properties(struct drm_plane *plane,
			_sde_plane_set_ts_prefill(plane, pstate);
	}

	_sde_plane_set_qos_remap(plane);
	if ((pstate->dirty & SDE_PLANE_DIRTY_ALL) == SDE_PLANE_DIRTY_ALL)
		_sde_plane_set_qos_remap(plane, true);
	else
		_sde_plane_set_qos_remap(plane, false);

	/* clear dirty */
	pstate->dirty = 0x0;