Loading drivers/video/fbdev/msm/mdss_mdp.h +1 −1 Original line number Diff line number Diff line Loading @@ -1713,7 +1713,7 @@ int mdss_mdp_ctl_start(struct mdss_mdp_ctl *ctl, bool handoff); int mdss_mdp_ctl_stop(struct mdss_mdp_ctl *ctl, int panel_power_mode); int mdss_mdp_ctl_intf_event(struct mdss_mdp_ctl *ctl, int event, void *arg, u32 flags); int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo); int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo, bool is_fixed); int mdss_mdp_perf_bw_check(struct mdss_mdp_ctl *ctl, struct mdss_mdp_pipe **left_plist, int left_cnt, struct mdss_mdp_pipe **right_plist, int right_cnt); Loading drivers/video/fbdev/msm/mdss_mdp_ctl.c +6 −2 Original line number Diff line number Diff line Loading @@ -1506,7 +1506,7 @@ static bool is_mdp_prefetch_needed(struct mdss_panel_info *pinfo) * the mdp fetch lines as the last (25 - vbp - vpw) lines of vertical * front porch. */ int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo) int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo, bool is_fixed) { int prefetch_avail = 0; int v_total, vfp_start; Loading @@ -1515,7 +1515,11 @@ int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo) if (!is_mdp_prefetch_needed(pinfo)) return 0; if (is_fixed) v_total = mdss_panel_get_vtotal_fixed(pinfo); else v_total = mdss_panel_get_vtotal(pinfo); vfp_start = (pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width + pinfo->yres); Loading drivers/video/fbdev/msm/mdss_mdp_intf_video.c +9 −5 Original line number Diff line number Diff line Loading @@ -959,6 +959,7 @@ static void mdss_mdp_video_vsync_intr_done(void *arg) struct mdss_mdp_video_ctx *ctx = ctl->intf_ctx[MASTER_CTX]; struct mdss_mdp_vsync_handler *tmp; ktime_t vsync_time; u32 ctl_flush_bits = 0; if (!ctx) { pr_err("invalid ctx\n"); Loading @@ -970,10 +971,13 @@ static void mdss_mdp_video_vsync_intr_done(void *arg) mdss_debug_frc_add_vsync_sample(ctl, vsync_time); MDSS_XLOG(ctl->num, ctl->vsync_cnt, ctl->vsync_cnt); ctl_flush_bits = mdss_mdp_ctl_read(ctl, MDSS_MDP_REG_CTL_FLUSH); pr_debug("intr ctl=%d vsync cnt=%u vsync_time=%d\n", ctl->num, ctl->vsync_cnt, (int)ktime_to_ms(vsync_time)); MDSS_XLOG(ctl->num, ctl->vsync_cnt, ctl_flush_bits); pr_debug("intr ctl=%d vsync cnt=%u vsync_time=%d ctl_flush=%d\n", ctl->num, ctl->vsync_cnt, (int)ktime_to_ms(vsync_time), ctl_flush_bits); ctx->polling_en = false; complete_all(&ctx->vsync_comp); Loading Loading @@ -1716,7 +1720,7 @@ 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); pinfo->prg_fet = mdss_mdp_get_prefetch_lines(pinfo, true); if (!pinfo->prg_fet) { pr_debug("programmable fetch is not needed/supported\n"); Loading @@ -1735,7 +1739,7 @@ static void mdss_mdp_fetch_start_config(struct mdss_mdp_video_ctx *ctx, * Fetch should always be outside the active lines. If the fetching * is programmed within active region, hardware behavior is unknown. */ v_total = mdss_panel_get_vtotal(pinfo); v_total = mdss_panel_get_vtotal_fixed(pinfo); h_total = mdss_panel_get_htotal(pinfo, true); fetch_start = (v_total - pinfo->prg_fet) * h_total + 1; Loading drivers/video/fbdev/msm/mdss_mdp_overlay.c +9 −2 Original line number Diff line number Diff line Loading @@ -3760,8 +3760,7 @@ static void dfps_update_panel_params(struct mdss_panel_data *pdata, dfps_update_fps(&pdata->panel_info, new_fps); pdata->panel_info.prg_fet = mdss_mdp_get_prefetch_lines(&pdata->panel_info); mdss_mdp_get_prefetch_lines(&pdata->panel_info, false); } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) { int add_h_pixels; Loading Loading @@ -6011,6 +6010,7 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd) struct mdss_overlay_private *mdp5_data; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); struct mdss_mdp_mixer *mixer; struct mdss_mdp_pipe *pipe, *tmp; int need_cleanup; int retire_cnt; bool destroy_ctl = false; Loading Loading @@ -6054,6 +6054,13 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd) mixer->cursor_enabled = 0; mutex_lock(&mdp5_data->list_lock); if (!list_empty(&mdp5_data->pipes_used)) { list_for_each_entry_safe( pipe, tmp, &mdp5_data->pipes_used, list) { pipe->file = NULL; list_move(&pipe->list, &mdp5_data->pipes_cleanup); } } need_cleanup = !list_empty(&mdp5_data->pipes_cleanup); mutex_unlock(&mdp5_data->list_lock); mutex_unlock(&mdp5_data->ov_lock); Loading drivers/video/fbdev/msm/mdss_panel.c +1 −0 Original line number Diff line number Diff line Loading @@ -633,6 +633,7 @@ void mdss_panel_info_from_timing(struct mdss_panel_timing *pt, pinfo->yres = pt->yres; pinfo->lcdc.v_front_porch = pt->v_front_porch; pinfo->lcdc.v_front_porch_fixed = pt->v_front_porch; pinfo->lcdc.v_back_porch = pt->v_back_porch; pinfo->lcdc.v_pulse_width = pt->v_pulse_width; Loading Loading
drivers/video/fbdev/msm/mdss_mdp.h +1 −1 Original line number Diff line number Diff line Loading @@ -1713,7 +1713,7 @@ int mdss_mdp_ctl_start(struct mdss_mdp_ctl *ctl, bool handoff); int mdss_mdp_ctl_stop(struct mdss_mdp_ctl *ctl, int panel_power_mode); int mdss_mdp_ctl_intf_event(struct mdss_mdp_ctl *ctl, int event, void *arg, u32 flags); int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo); int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo, bool is_fixed); int mdss_mdp_perf_bw_check(struct mdss_mdp_ctl *ctl, struct mdss_mdp_pipe **left_plist, int left_cnt, struct mdss_mdp_pipe **right_plist, int right_cnt); Loading
drivers/video/fbdev/msm/mdss_mdp_ctl.c +6 −2 Original line number Diff line number Diff line Loading @@ -1506,7 +1506,7 @@ static bool is_mdp_prefetch_needed(struct mdss_panel_info *pinfo) * the mdp fetch lines as the last (25 - vbp - vpw) lines of vertical * front porch. */ int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo) int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo, bool is_fixed) { int prefetch_avail = 0; int v_total, vfp_start; Loading @@ -1515,7 +1515,11 @@ int mdss_mdp_get_prefetch_lines(struct mdss_panel_info *pinfo) if (!is_mdp_prefetch_needed(pinfo)) return 0; if (is_fixed) v_total = mdss_panel_get_vtotal_fixed(pinfo); else v_total = mdss_panel_get_vtotal(pinfo); vfp_start = (pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width + pinfo->yres); Loading
drivers/video/fbdev/msm/mdss_mdp_intf_video.c +9 −5 Original line number Diff line number Diff line Loading @@ -959,6 +959,7 @@ static void mdss_mdp_video_vsync_intr_done(void *arg) struct mdss_mdp_video_ctx *ctx = ctl->intf_ctx[MASTER_CTX]; struct mdss_mdp_vsync_handler *tmp; ktime_t vsync_time; u32 ctl_flush_bits = 0; if (!ctx) { pr_err("invalid ctx\n"); Loading @@ -970,10 +971,13 @@ static void mdss_mdp_video_vsync_intr_done(void *arg) mdss_debug_frc_add_vsync_sample(ctl, vsync_time); MDSS_XLOG(ctl->num, ctl->vsync_cnt, ctl->vsync_cnt); ctl_flush_bits = mdss_mdp_ctl_read(ctl, MDSS_MDP_REG_CTL_FLUSH); pr_debug("intr ctl=%d vsync cnt=%u vsync_time=%d\n", ctl->num, ctl->vsync_cnt, (int)ktime_to_ms(vsync_time)); MDSS_XLOG(ctl->num, ctl->vsync_cnt, ctl_flush_bits); pr_debug("intr ctl=%d vsync cnt=%u vsync_time=%d ctl_flush=%d\n", ctl->num, ctl->vsync_cnt, (int)ktime_to_ms(vsync_time), ctl_flush_bits); ctx->polling_en = false; complete_all(&ctx->vsync_comp); Loading Loading @@ -1716,7 +1720,7 @@ 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); pinfo->prg_fet = mdss_mdp_get_prefetch_lines(pinfo, true); if (!pinfo->prg_fet) { pr_debug("programmable fetch is not needed/supported\n"); Loading @@ -1735,7 +1739,7 @@ static void mdss_mdp_fetch_start_config(struct mdss_mdp_video_ctx *ctx, * Fetch should always be outside the active lines. If the fetching * is programmed within active region, hardware behavior is unknown. */ v_total = mdss_panel_get_vtotal(pinfo); v_total = mdss_panel_get_vtotal_fixed(pinfo); h_total = mdss_panel_get_htotal(pinfo, true); fetch_start = (v_total - pinfo->prg_fet) * h_total + 1; Loading
drivers/video/fbdev/msm/mdss_mdp_overlay.c +9 −2 Original line number Diff line number Diff line Loading @@ -3760,8 +3760,7 @@ static void dfps_update_panel_params(struct mdss_panel_data *pdata, dfps_update_fps(&pdata->panel_info, new_fps); pdata->panel_info.prg_fet = mdss_mdp_get_prefetch_lines(&pdata->panel_info); mdss_mdp_get_prefetch_lines(&pdata->panel_info, false); } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) { int add_h_pixels; Loading Loading @@ -6011,6 +6010,7 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd) struct mdss_overlay_private *mdp5_data; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); struct mdss_mdp_mixer *mixer; struct mdss_mdp_pipe *pipe, *tmp; int need_cleanup; int retire_cnt; bool destroy_ctl = false; Loading Loading @@ -6054,6 +6054,13 @@ static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd) mixer->cursor_enabled = 0; mutex_lock(&mdp5_data->list_lock); if (!list_empty(&mdp5_data->pipes_used)) { list_for_each_entry_safe( pipe, tmp, &mdp5_data->pipes_used, list) { pipe->file = NULL; list_move(&pipe->list, &mdp5_data->pipes_cleanup); } } need_cleanup = !list_empty(&mdp5_data->pipes_cleanup); mutex_unlock(&mdp5_data->list_lock); mutex_unlock(&mdp5_data->ov_lock); Loading
drivers/video/fbdev/msm/mdss_panel.c +1 −0 Original line number Diff line number Diff line Loading @@ -633,6 +633,7 @@ void mdss_panel_info_from_timing(struct mdss_panel_timing *pt, pinfo->yres = pt->yres; pinfo->lcdc.v_front_porch = pt->v_front_porch; pinfo->lcdc.v_front_porch_fixed = pt->v_front_porch; pinfo->lcdc.v_back_porch = pt->v_back_porch; pinfo->lcdc.v_pulse_width = pt->v_pulse_width; Loading