From 1c70420f0e0874525edf2beca31d80343e9b3349 Mon Sep 17 00:00:00 2001 From: Huaibin Yang Date: Wed, 20 Mar 2013 15:00:34 -0700 Subject: [PATCH 1/3] msm_fb: display: get mdp bandwidth parameters from board file Underrun issues can be solved by changing mdp bandwidth parameters: max_bw, ab_factor and ib_factor. However these parameters are not universally same for all targets, and one set of values that works for one target could cause underruns or higher power on other targets. This change is driver change which makes those parameters target dependent. CRs-Fixed: 464492 Signed-off-by: Huaibin Yang Conflicts: drivers/video/msm/mdp4.h Change-Id: Ib22ebc431caabbe91c7ae3bd96bb38789d7ddc90 --- drivers/video/msm/mdp.c | 10 +++++++++- drivers/video/msm/mdp4.h | 6 ++++-- drivers/video/msm/mdp4_overlay.c | 18 ++++++++++-------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/drivers/video/msm/mdp.c b/drivers/video/msm/mdp.c index 0eaa5d1ca5c..25e6542826d 100644 --- a/drivers/video/msm/mdp.c +++ b/drivers/video/msm/mdp.c @@ -72,7 +72,8 @@ int mdp_rev; int mdp_iommu_split_domain; u32 mdp_max_clk = 266667000; u64 mdp_max_bw = 3080000000UL; - +u32 mdp_bw_ab_factor = MDP4_BW_AB_DEFAULT_FACTOR; +u32 mdp_bw_ib_factor = MDP4_BW_IB_DEFAULT_FACTOR; static struct platform_device *mdp_init_pdev; static struct regulator *footswitch, *dsi_pll_vdda, *dsi_pll_vddio; static unsigned int mdp_footswitch_on; @@ -2860,6 +2861,13 @@ static int mdp_probe(struct platform_device *pdev) return -ENOMEM; } + if (mdp_pdata->mdp_max_bw) + mdp_max_bw = mdp_pdata->mdp_max_bw; + if (mdp_pdata->mdp_bw_ab_factor) + mdp_bw_ab_factor = mdp_pdata->mdp_bw_ab_factor; + if (mdp_pdata->mdp_bw_ib_factor) + mdp_bw_ib_factor = mdp_pdata->mdp_bw_ib_factor; + mdp_rev = mdp_pdata->mdp_rev; mdp_iommu_split_domain = mdp_pdata->mdp_iommu_split_domain; diff --git a/drivers/video/msm/mdp4.h b/drivers/video/msm/mdp4.h index e95b5a1c95c..d0419052a0e 100644 --- a/drivers/video/msm/mdp4.h +++ b/drivers/video/msm/mdp4.h @@ -34,8 +34,10 @@ extern u64 mdp_max_bw; extern u32 mdp_bw_ab_factor; extern u32 mdp_bw_ib_factor; extern u32 mdp_iommu_max_map_size; -#define MDP4_BW_AB_FACTOR (200) /* 2.00 */ -#define MDP4_BW_IB_FACTOR (210) /* 2.10 */ + +#define MDP4_BW_AB_DEFAULT_FACTOR (200) /* 2.00 */ +#define MDP4_BW_IB_DEFAULT_FACTOR (210) /* 2.10 */ + #define MDP_BUS_SCALE_AB_STEP (0x4000000) #define MDP4_OVERLAYPROC0_BASE 0x10000 diff --git a/drivers/video/msm/mdp4_overlay.c b/drivers/video/msm/mdp4_overlay.c index b3499c7bf4d..69089689d25 100644 --- a/drivers/video/msm/mdp4_overlay.c +++ b/drivers/video/msm/mdp4_overlay.c @@ -3107,10 +3107,12 @@ static int mdp4_calc_pipe_mdp_bw(struct msm_fb_data_type *mfd, quota = pipe->src_w * pipe->src_h * fps * pipe->bpp; quota >>= shift; - /* factor 1.15 for ab */ - pipe->bw_ab_quota = quota * MDP4_BW_AB_FACTOR / 100; - /* factor 1.25 for ib */ - pipe->bw_ib_quota = quota * MDP4_BW_IB_FACTOR / 100; + + pipe->bw_ab_quota = quota * mdp_bw_ab_factor / 100; + pipe->bw_ib_quota = quota * mdp_bw_ib_factor / 100; + pr_debug("%s max_bw=%llu ab_factor=%d ib_factor=%d\n", __func__, + mdp_max_bw, mdp_bw_ab_factor, mdp_bw_ib_factor); + /* down scaling factor for ib */ if ((pipe->dst_h) && (pipe->src_h) && (pipe->src_h > pipe->dst_h)) { @@ -3161,10 +3163,10 @@ int mdp4_calc_blt_mdp_bw(struct msm_fb_data_type *mfd, quota >>= shift; perf_req->mdp_ov_ab_bw[pipe->mixer_num] = - quota * MDP4_BW_AB_FACTOR / 100; + quota * mdp_bw_ab_factor / 100; perf_req->mdp_ov_ib_bw[pipe->mixer_num] = - quota * MDP4_BW_IB_FACTOR / 100; + quota * mdp_bw_ib_factor / 100; perf_req->mdp_ov_ab_bw[pipe->mixer_num] <<= shift; perf_req->mdp_ov_ib_bw[pipe->mixer_num] <<= shift; @@ -3360,9 +3362,9 @@ int mdp4_overlay_mdp_perf_req(struct msm_fb_data_type *mfd, if(minimum_ab == 0 ||minimum_ib == 0){ minimum_ab = (1920*1080*4*60)>>16; - minimum_ab = (minimum_ab*MDP4_BW_AB_FACTOR/100)<<16; + minimum_ab = (minimum_ab * (u64)(mdp_bw_ab_factor / 100)) << 16; minimum_ib = (1920*1080*4*60)>>16; - minimum_ib = (minimum_ib*MDP4_BW_IB_FACTOR/100)<<16; + minimum_ib = (minimum_ib * (u64)(mdp_bw_ib_factor / 100)) << 16; } /* From 16d1b9cd143f33c7322f2a95ade693dd7d25f7c3 Mon Sep 17 00:00:00 2001 From: Shareef Ali Date: Sun, 3 Aug 2014 21:11:51 -0400 Subject: [PATCH 2/3] jf: mdp: fix mdp bandwidth Change-Id: I71da0c8b39be5388d9bf8e8871dde0e8ca333a3b --- arch/arm/mach-msm/board-8064-display.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-msm/board-8064-display.c b/arch/arm/mach-msm/board-8064-display.c index d0ab9ffdf72..ee934b4b50b 100644 --- a/arch/arm/mach-msm/board-8064-display.c +++ b/arch/arm/mach-msm/board-8064-display.c @@ -272,9 +272,9 @@ static struct msm_bus_scale_pdata mdp_bus_scale_pdata = { static struct msm_panel_common_pdata mdp_pdata = { .gpio = MDP_VSYNC_GPIO, .mdp_max_clk = 266667000, - .mdp_max_bw = 2000000000, - .mdp_bw_ab_factor = 115, - .mdp_bw_ib_factor = 150, + .mdp_max_bw = 4290000000u, + .mdp_bw_ab_factor = 230, + .mdp_bw_ib_factor = 250, .mdp_bus_scale_table = &mdp_bus_scale_pdata, .mdp_rev = MDP_REV_44, #ifdef CONFIG_MSM_MULTIMEDIA_USE_ION From 0c272b2b066c12396a32685cc35d362864577f5e Mon Sep 17 00:00:00 2001 From: Dan Pasanen Date: Sat, 16 Aug 2014 15:42:39 -0500 Subject: [PATCH 3/3] panel: samsung-octa: flash hot pink for underruns * while annoying, it'll help debugging Change-Id: I782cda58705fc483bc7d36bfca2d4af6ff0e401d --- drivers/video/msm/mipi_samsung_octa_video_full_hd_pt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/video/msm/mipi_samsung_octa_video_full_hd_pt.c b/drivers/video/msm/mipi_samsung_octa_video_full_hd_pt.c index f68a0cd6cca..2fb21d2173f 100644 --- a/drivers/video/msm/mipi_samsung_octa_video_full_hd_pt.c +++ b/drivers/video/msm/mipi_samsung_octa_video_full_hd_pt.c @@ -2028,7 +2028,7 @@ static int __init mipi_video_samsung_octa_full_hd_pt_init(void) pinfo.lcdc.v_pulse_width = 2; pinfo.lcdc.border_clr = 0; /* blk */ - pinfo.lcdc.underflow_clr = 0x0; /* black */ + pinfo.lcdc.underflow_clr = 0xff1493; /* hot pink */ pinfo.lcdc.hsync_skew = 0; pinfo.bl_max = 255;