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: Amine Najahi <anajahi@codeaurora.org> Signed-off-by: Samantha Tran <samtran@codeaurora.org>
This commit is contained in:

committed by
Samantha Tran

parent
ed6f9809d2
commit
0c7159de4f
@@ -112,6 +112,7 @@ struct sde_plane {
|
|||||||
struct sde_hw_pipe_cfg pipe_cfg;
|
struct sde_hw_pipe_cfg pipe_cfg;
|
||||||
struct sde_hw_sharp_cfg sharp_cfg;
|
struct sde_hw_sharp_cfg sharp_cfg;
|
||||||
struct sde_hw_pipe_qos_cfg pipe_qos_cfg;
|
struct sde_hw_pipe_qos_cfg pipe_qos_cfg;
|
||||||
|
struct sde_vbif_set_qos_params cached_qos_params;
|
||||||
uint32_t color_fill;
|
uint32_t color_fill;
|
||||||
bool is_error;
|
bool is_error;
|
||||||
bool is_rt_pipe;
|
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
|
* _sde_plane_set_vbif_qos - set vbif QoS for the given plane
|
||||||
* @plane: Pointer to drm 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_plane *psde;
|
||||||
struct sde_vbif_set_qos_params qos_params;
|
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 ?
|
qos_params.client_type = psde->is_rt_pipe ?
|
||||||
VBIF_RT_CLIENT : VBIF_NRT_CLIENT;
|
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",
|
SDE_DEBUG("plane%d pipe:%d vbif:%d xin:%d rt:%d, clk_ctrl:%d\n",
|
||||||
plane->base.id, qos_params.num,
|
plane->base.id, qos_params.num,
|
||||||
qos_params.vbif_idx,
|
qos_params.vbif_idx,
|
||||||
@@ -1751,7 +1762,7 @@ void sde_plane_secure_ctrl_xin_client(struct drm_plane *plane,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* do all VBIF programming for the sec-ui allowed SSPP */
|
/* 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);
|
_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_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 */
|
/* clear dirty */
|
||||||
pstate->dirty = 0x0;
|
pstate->dirty = 0x0;
|
||||||
|
Reference in New Issue
Block a user