OSDN Git Service

mdss: mdp: Constant fetch start across dfps change
authorAnimesh Kishore <animeshk@codeaurora.org>
Wed, 4 Jul 2018 12:51:04 +0000 (18:21 +0530)
committerAnimesh Kishore <animeshk@codeaurora.org>
Mon, 9 Jul 2018 06:36:52 +0000 (12:06 +0530)
Timing engine HW restricts changing programmable fetch
start when off. Fix fetch start in SW drivers.

Change-Id: I8ec80408a4ae36a7dfd963bc570fca9672d12341
Signed-off-by: Animesh Kishore <animeshk@codeaurora.org>
drivers/video/fbdev/msm/mdss_mdp_intf_video.c
drivers/video/fbdev/msm/mdss_mdp_overlay.c
drivers/video/fbdev/msm/mdss_panel.h

index 335614a..607c064 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -1901,7 +1901,6 @@ static void mdss_mdp_fetch_start_config(struct mdss_mdp_video_ctx *ctx,
 
        mdata = ctl->mdata;
 
-       pinfo->prg_fet = mdss_mdp_get_prefetch_lines(pinfo);
        if (!pinfo->prg_fet) {
                pr_debug("programmable fetch is not needed/supported\n");
 
@@ -2207,6 +2206,8 @@ static int mdss_mdp_video_ctx_setup(struct mdss_mdp_ctl *ctl,
                                ctx->intf_num);
                        return -EINVAL;
                }
+
+               pinfo->prg_fet = mdss_mdp_get_prefetch_lines(pinfo);
                mdss_mdp_fetch_start_config(ctx, ctl);
 
                if (test_bit(MDSS_QOS_VBLANK_PANIC_CTRL, mdata->mdss_qos_map))
index f398420..2f5b456 100644 (file)
@@ -3367,6 +3367,9 @@ static void cache_initial_timings(struct mdss_panel_data *pdata)
 {
        if (!pdata->panel_info.default_fps) {
 
+               pdata->panel_info.default_prg_fet =
+                       mdss_mdp_get_prefetch_lines(&pdata->panel_info);
+
                /*
                 * This value will change dynamically once the
                 * actual dfps update happen in hw.
@@ -3439,8 +3442,13 @@ static void dfps_update_panel_params(struct mdss_panel_data *pdata,
 
                dfps_update_fps(&pdata->panel_info, new_fps);
 
+               /*
+                * Fetch start is pinned to default fps.
+                * Adjust programmable fetch accordingly.
+                */
                pdata->panel_info.prg_fet =
-                       mdss_mdp_get_prefetch_lines(&pdata->panel_info);
+                       (pdata->panel_info.default_prg_fet) ?
+                       (pdata->panel_info.default_prg_fet + add_v_lines) : 0;
 
        } else if (pdata->panel_info.dfps_update ==
                        DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) {
index e8255ff..7085a9f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2008-2018, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -814,6 +814,8 @@ struct mdss_panel_info {
        int new_fps;
        /* stores initial fps after boot */
        u32 default_fps;
+       /* store programmable fetch corresponding to default fps */
+       u32 default_prg_fet;
        /* stores initial vtotal (vfp-method) or htotal (hfp-method) */
        u32 saved_total;
        /* stores initial vfp (vfp-method) or hfp (hfp-method) */