summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorAbhijit Kulkarni <kabhijit@codeaurora.org>2016-11-22 20:32:06 -0800
committerAbhijit Kulkarni <kabhijit@codeaurora.org>2016-12-12 09:35:17 -0800
commitf3b323b0a2980a1dffae35e12df1f621108f4dc4 (patch)
tree9c73a1790e173ee585ca2499aa79d2b7b3a34e34 /drivers/video/fbdev
parent368fecd7df5b203a5ce684a0c77726a5690c1147 (diff)
msm: mdss: Fix scaler enable flag setting
Scaler enable flag should be validated after copying the scaler structure from the user space driver. For qseed2 scaler the enable flag should be set to true if this structure is populated from user space driver. CRs-Fixed: 1094768 Change-Id: I21b23137dcb310793656d7104594803d1727bbaa Signed-off-by: Abhijit Kulkarni <kabhijit@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_fb.c1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_layer.c14
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index 98ca6c3da20b..699b02927b0e 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -4242,6 +4242,7 @@ static void __mdss_fb_copy_pixel_ext(struct mdp_scale_data *src,
{
if (!src || !dest)
return;
+ dest->enable = true;
memcpy(dest->init_phase_x, src->init_phase_x,
sizeof(src->init_phase_x));
memcpy(dest->phase_step_x, src->phase_step_x,
diff --git a/drivers/video/fbdev/msm/mdss_mdp_layer.c b/drivers/video/fbdev/msm/mdss_mdp_layer.c
index 3fc8e3883250..a79dd959370e 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_layer.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_layer.c
@@ -1034,7 +1034,6 @@ static int __configure_pipe_params(struct msm_fb_data_type *mfd,
if (layer->flags & MDP_LAYER_SECURE_CAMERA_SESSION)
pipe->flags |= MDP_SECURE_CAMERA_OVERLAY_SESSION;
- pipe->scaler.enable = (layer->flags & SCALER_ENABLED);
pipe->is_fg = layer->flags & MDP_LAYER_FORGROUND;
pipe->img_width = layer->buffer.width & 0x3fff;
pipe->img_height = layer->buffer.height & 0x3fff;
@@ -1067,6 +1066,16 @@ static int __configure_pipe_params(struct msm_fb_data_type *mfd,
pipe->src.x, pipe->src.y, pipe->src.w, pipe->src.h,
pipe->dst.x, pipe->dst.y, pipe->dst.w, pipe->dst.h);
+ if (layer->flags & SCALER_ENABLED) {
+ memcpy(&pipe->scaler, layer->scale,
+ sizeof(struct mdp_scale_data_v2));
+ /* Sanitize enable flag */
+ pipe->scaler.enable &= (ENABLE_SCALE | ENABLE_DETAIL_ENHANCE |
+ ENABLE_DIRECTION_DETECTION);
+ } else {
+ pipe->scaler.enable = 0;
+ }
+
flags = pipe->flags;
if (is_single_layer)
flags |= PERF_CALC_PIPE_SINGLE_LAYER;
@@ -1189,9 +1198,6 @@ static int __configure_pipe_params(struct msm_fb_data_type *mfd,
}
}
- if (layer->flags & SCALER_ENABLED)
- memcpy(&pipe->scaler, layer->scale,
- sizeof(struct mdp_scale_data_v2));
ret = mdss_mdp_overlay_setup_scaling(pipe);
if (ret) {
pr_err("scaling setup failed %d\n", ret);