summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenet Clark <benetc@codeaurora.org>2015-01-14 19:12:10 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:37:31 -0700
commita4f72acde7ff0f846ec0cb8cda38f7936d7a06cf (patch)
tree514f267e6f20196dfdf0fac234f1f78211afaaf7
parent7d9384c459f82bbc28867f9df9e8facf3be88a6c (diff)
msm: mdss: Set ARGC dirty flag correctly in thulium
The dirty flag for ARGC should be set after the parameters have been cached correctly; however, the goto to avoid legacy code jumps over the dirty flag assignment. Adding the dirty flag assignment back to thulium architecture. Change-Id: Ic64818d3844cb6a0e2ff3d3a1bf28c752f26da02 Signed-off-by: Benet Clark <benetc@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_pp.c99
1 files changed, 46 insertions, 53 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c
index cf3e14130548..3da34515feff 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_pp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c
@@ -3327,6 +3327,7 @@ int mdss_mdp_argc_config(struct mdp_pgc_lut_data *config,
u32 tbl_size, r_size, g_size, b_size;
char __iomem *argc_addr = 0;
struct mdss_data_type *mdata = mdss_mdp_get_mdata();
+ u32 dirty_flag = 0;
if ((PP_BLOCK(config->block) < MDP_LOGICAL_BLOCK_DISP_0) ||
(PP_BLOCK(config->block) >= MDP_BLOCK_MAX))
@@ -3351,11 +3352,13 @@ int mdss_mdp_argc_config(struct mdp_pgc_lut_data *config,
argc_addr = mdss_mdp_get_mixer_addr_off(dspp_num) +
MDSS_MDP_REG_LM_GC_LUT_BASE;
pgc_ptr = &mdss_pp_res->argc_disp_cfg[disp_num];
+ dirty_flag = PP_FLAGS_DIRTY_ARGC;
break;
case MDSS_PP_DSPP_CFG:
argc_addr = mdss_mdp_get_dspp_addr_off(dspp_num) +
MDSS_MDP_REG_DSPP_GC_BASE;
pgc_ptr = &mdss_pp_res->pgc_disp_cfg[disp_num];
+ dirty_flag = PP_FLAGS_DIRTY_PGC;
break;
default:
goto argc_config_exit;
@@ -3434,61 +3437,51 @@ clock_off:
if (ret) {
pr_err("gamut set config failed ret %d\n",
ret);
- if (is_lm)
- mdss_pp_res->pp_disp_flags[disp_num]
- &= ~PP_FLAGS_DIRTY_ARGC;
- else
- mdss_pp_res->pp_disp_flags[disp_num]
- &= ~PP_FLAGS_DIRTY_PGC;
+ goto argc_config_exit;
+ }
+ } else {
+ r_size = config->num_r_stages *
+ sizeof(struct mdp_ar_gc_lut_data);
+ g_size = config->num_g_stages *
+ sizeof(struct mdp_ar_gc_lut_data);
+ b_size = config->num_b_stages *
+ sizeof(struct mdp_ar_gc_lut_data);
+ if (r_size > tbl_size ||
+ g_size > tbl_size ||
+ b_size > tbl_size ||
+ r_size == 0 ||
+ g_size == 0 ||
+ b_size == 0) {
+ ret = -EINVAL;
+ pr_warn("%s, number of rgb stages invalid\n",
+ __func__);
+ goto argc_config_exit;
+ }
+ if (copy_from_user(&mdss_pp_res->gc_lut_r[disp_num][0],
+ config->r_data, r_size)) {
+ ret = -EFAULT;
+ goto argc_config_exit;
+ }
+ if (copy_from_user(&mdss_pp_res->gc_lut_g[disp_num][0],
+ config->g_data, g_size)) {
+ ret = -EFAULT;
+ goto argc_config_exit;
+ }
+ if (copy_from_user(&mdss_pp_res->gc_lut_b[disp_num][0],
+ config->b_data, b_size)) {
+ ret = -EFAULT;
+ goto argc_config_exit;
}
- goto argc_config_exit;
- }
- r_size = config->num_r_stages *
- sizeof(struct mdp_ar_gc_lut_data);
- g_size = config->num_g_stages *
- sizeof(struct mdp_ar_gc_lut_data);
- b_size = config->num_b_stages *
- sizeof(struct mdp_ar_gc_lut_data);
- if (r_size > tbl_size ||
- g_size > tbl_size ||
- b_size > tbl_size ||
- r_size == 0 ||
- g_size == 0 ||
- b_size == 0) {
- ret = -EINVAL;
- pr_warn("%s, number of rgb stages invalid\n",
- __func__);
- goto argc_config_exit;
- }
- if (copy_from_user(&mdss_pp_res->gc_lut_r[disp_num][0],
- config->r_data, r_size)) {
- ret = -EFAULT;
- goto argc_config_exit;
- }
- if (copy_from_user(&mdss_pp_res->gc_lut_g[disp_num][0],
- config->g_data, g_size)) {
- ret = -EFAULT;
- goto argc_config_exit;
- }
- if (copy_from_user(&mdss_pp_res->gc_lut_b[disp_num][0],
- config->b_data, b_size)) {
- ret = -EFAULT;
- goto argc_config_exit;
- }
- *pgc_ptr = *config;
- pgc_ptr->r_data =
- &mdss_pp_res->gc_lut_r[disp_num][0];
- pgc_ptr->g_data =
- &mdss_pp_res->gc_lut_g[disp_num][0];
- pgc_ptr->b_data =
- &mdss_pp_res->gc_lut_b[disp_num][0];
- if (PP_LOCAT(config->block) == MDSS_PP_LM_CFG)
- mdss_pp_res->pp_disp_flags[disp_num] |=
- PP_FLAGS_DIRTY_ARGC;
- else if (PP_LOCAT(config->block) == MDSS_PP_DSPP_CFG)
- mdss_pp_res->pp_disp_flags[disp_num] |=
- PP_FLAGS_DIRTY_PGC;
+ *pgc_ptr = *config;
+ pgc_ptr->r_data =
+ &mdss_pp_res->gc_lut_r[disp_num][0];
+ pgc_ptr->g_data =
+ &mdss_pp_res->gc_lut_g[disp_num][0];
+ pgc_ptr->b_data =
+ &mdss_pp_res->gc_lut_b[disp_num][0];
+ }
+ mdss_pp_res->pp_disp_flags[disp_num] |= dirty_flag;
}
argc_config_exit:
mutex_unlock(&mdss_pp_mutex);