Loading drivers/video/msm/mdss/mdss.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,6 +160,8 @@ struct mdss_data_type { u32 *vbif_nrt_qos; u32 npriority_lvl; u32 reg_bus_hdl; struct mdss_fudge_factor ab_factor; struct mdss_fudge_factor ib_factor; struct mdss_fudge_factor ib_factor_overlap; Loading Loading @@ -193,7 +195,6 @@ struct mdss_data_type { void *video_intf; u32 nintf; u32 pp_bus_hdl; struct mdss_mdp_ad *ad_off; struct mdss_ad_info *ad_cfgs; u32 nad_cfgs; Loading drivers/video/msm/mdss/mdss_mdp.c +52 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,30 @@ struct mdss_hw mdss_mdp_hw = { .irq_handler = mdss_mdp_isr, }; #define MDP_REG_BUS_VECTOR_ENTRY(ab_val, ib_val) \ { \ .src = MSM_BUS_MASTER_SPDM, \ .dst = MSM_BUS_SLAVE_IMEM_CFG, \ .ab = (ab_val), \ .ib = (ib_val), \ } #define SZ_37_5M (37500000 * 8) #define SZ_75M (75000000 * 8) static struct msm_bus_vectors mdp_reg_bus_vectors[] = { MDP_REG_BUS_VECTOR_ENTRY(0, 0), MDP_REG_BUS_VECTOR_ENTRY(0, SZ_37_5M), MDP_REG_BUS_VECTOR_ENTRY(0, SZ_75M), }; static struct msm_bus_paths mdp_reg_bus_usecases[ARRAY_SIZE( mdp_reg_bus_vectors)]; static struct msm_bus_scale_pdata mdp_reg_bus_scale_table = { .usecase = mdp_reg_bus_usecases, .num_usecases = ARRAY_SIZE(mdp_reg_bus_usecases), .name = "mdss_reg", }; static DEFINE_SPINLOCK(mdss_lock); struct mdss_hw *mdss_irq_handlers[MDSS_MAX_HW_BLK]; Loading Loading @@ -363,6 +387,9 @@ EXPORT_SYMBOL(mdss_disable_irq_nosync); static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) { struct msm_bus_scale_pdata *reg_bus_pdata; int i; if (!mdata->bus_hdl) { mdata->bus_hdl = msm_bus_scale_register_client(mdata->bus_scale_table); Loading @@ -374,6 +401,24 @@ static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) pr_debug("register bus_hdl=%x\n", mdata->bus_hdl); } if (!mdata->reg_bus_hdl) { reg_bus_pdata = &mdp_reg_bus_scale_table; for (i = 0; i < reg_bus_pdata->num_usecases; i++) { mdp_reg_bus_usecases[i].num_paths = 1; mdp_reg_bus_usecases[i].vectors = &mdp_reg_bus_vectors[i]; } mdata->reg_bus_hdl = msm_bus_scale_register_client(reg_bus_pdata); if (!mdata->reg_bus_hdl) { /* Continue without reg_bus scaling */ pr_warn("reg_bus_client register failed\n"); } else pr_debug("register reg_bus_hdl=%x\n", mdata->reg_bus_hdl); } return mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA); } Loading @@ -383,6 +428,13 @@ static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata) if (mdata->bus_hdl) msm_bus_scale_unregister_client(mdata->bus_hdl); pr_debug("unregister reg_bus_hdl=%x\n", mdata->reg_bus_hdl); if (mdata->reg_bus_hdl) { msm_bus_scale_unregister_client(mdata->reg_bus_hdl); mdata->reg_bus_hdl = 0; } } int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) Loading drivers/video/msm/mdss/mdss_mdp.h +6 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,12 @@ enum mdp_wfd_blk_type { MDSS_MDP_WFD_DEDICATED, }; enum mdss_mdp_reg_bus_cfg { REG_CLK_CFG_OFF, REG_CLK_CFG_LOW, REG_CLK_CFG_HIGH, }; struct mdss_mdp_ctl; typedef void (*mdp_vsync_handler_t)(struct mdss_mdp_ctl *, ktime_t); Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +13 −13 Original line number Diff line number Diff line Loading @@ -44,9 +44,6 @@ #define IS_RIGHT_MIXER_OV(flags, dst_x, left_lm_w) \ ((flags & MDSS_MDP_RIGHT_MIXER) || (dst_x >= left_lm_w)) #define PP_CLK_CFG_OFF 0 #define PP_CLK_CFG_ON 1 #define MEM_PROTECT_SD_CTRL 0xF #define OVERLAY_MAX 10 Loading Loading @@ -2526,8 +2523,8 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, int ret = -ENOSYS; struct mdp_histogram_data hist; struct mdp_histogram_start_req hist_req; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); u32 block; u32 pp_bus_handle; static int req = -1; switch (cmd) { Loading @@ -2535,11 +2532,14 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, if (!mfd->panel_power_on) return -EPERM; pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl; req = msm_bus_scale_client_update_request(pp_bus_handle, PP_CLK_CFG_ON); if (mdata->reg_bus_hdl) { req = msm_bus_scale_client_update_request( mdata->reg_bus_hdl, REG_CLK_CFG_LOW); if (req) pr_err("Updated pp_bus_scale failed, ret = %d", req); pr_err("Updated pp_bus_scale failed, ret = %d", req); } ret = copy_from_user(&hist_req, argp, sizeof(hist_req)); if (ret) Loading @@ -2557,10 +2557,10 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, if (ret) return ret; if (!req) { pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl; req = msm_bus_scale_client_update_request(pp_bus_handle, PP_CLK_CFG_OFF); if (mdata->reg_bus_hdl && !req) { req = msm_bus_scale_client_update_request( mdata->reg_bus_hdl, REG_CLK_CFG_OFF); if (req) pr_err("Updated pp_bus_scale failed, ret = %d", req); Loading drivers/video/msm/mdss/mdss_mdp_pp.c +0 −47 Original line number Diff line number Diff line Loading @@ -288,26 +288,6 @@ static int mdss_mdp_hscl_filter[] = { #define SHARP_SMOOTH_THR_DEFAULT 8 #define SHARP_NOISE_THR_DEFAULT 2 #define MDP_PP_BUS_VECTOR_ENTRY(ab_val, ib_val) \ { \ .src = MSM_BUS_MASTER_SPDM, \ .dst = MSM_BUS_SLAVE_IMEM_CFG, \ .ab = (ab_val), \ .ib = (ib_val), \ } #define SZ_37_5M (37500000 * 8) static struct msm_bus_vectors mdp_pp_bus_vectors[] = { MDP_PP_BUS_VECTOR_ENTRY(0, 0), MDP_PP_BUS_VECTOR_ENTRY(0, SZ_37_5M), }; static struct msm_bus_paths mdp_pp_bus_usecases[ARRAY_SIZE(mdp_pp_bus_vectors)]; static struct msm_bus_scale_pdata mdp_pp_bus_scale_table = { .usecase = mdp_pp_bus_usecases, .num_usecases = ARRAY_SIZE(mdp_pp_bus_usecases), .name = "mdss_pp", }; struct mdss_pp_res_type { /* logical info */ Loading Loading @@ -1898,7 +1878,6 @@ int mdss_mdp_pp_init(struct device *dev) int i, ret = 0; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); struct mdss_mdp_pipe *vig; struct msm_bus_scale_pdata *pp_bus_pdata; struct pp_hist_col_info *hist; if (!mdata) Loading Loading @@ -1949,23 +1928,6 @@ int mdss_mdp_pp_init(struct device *dev) init_completion(&vig[i].pp_res.hist.comp); init_completion(&vig[i].pp_res.hist.first_kick); } if (!mdata->pp_bus_hdl) { pp_bus_pdata = &mdp_pp_bus_scale_table; for (i = 0; i < pp_bus_pdata->num_usecases; i++) { mdp_pp_bus_usecases[i].num_paths = 1; mdp_pp_bus_usecases[i].vectors = &mdp_pp_bus_vectors[i]; } mdata->pp_bus_hdl = msm_bus_scale_register_client(pp_bus_pdata); if (!mdata->pp_bus_hdl) { pr_err("not able to register pp_bus_scale\n"); ret = -ENOMEM; } pr_debug("register pp_bus_hdl=%x\n", mdata->pp_bus_hdl); } } mutex_unlock(&mdss_pp_mutex); return ret; Loading @@ -1973,15 +1935,6 @@ int mdss_mdp_pp_init(struct device *dev) void mdss_mdp_pp_term(struct device *dev) { struct mdss_data_type *mdata = mdss_mdp_get_mdata(); if (!mdata) return; if (mdata->pp_bus_hdl) { msm_bus_scale_unregister_client(mdata->pp_bus_hdl); mdata->pp_bus_hdl = 0; } if (mdss_pp_res) { mutex_lock(&mdss_pp_mutex); devm_kfree(dev, mdss_pp_res->dspp_hist); Loading Loading
drivers/video/msm/mdss/mdss.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,6 +160,8 @@ struct mdss_data_type { u32 *vbif_nrt_qos; u32 npriority_lvl; u32 reg_bus_hdl; struct mdss_fudge_factor ab_factor; struct mdss_fudge_factor ib_factor; struct mdss_fudge_factor ib_factor_overlap; Loading Loading @@ -193,7 +195,6 @@ struct mdss_data_type { void *video_intf; u32 nintf; u32 pp_bus_hdl; struct mdss_mdp_ad *ad_off; struct mdss_ad_info *ad_cfgs; u32 nad_cfgs; Loading
drivers/video/msm/mdss/mdss_mdp.c +52 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,30 @@ struct mdss_hw mdss_mdp_hw = { .irq_handler = mdss_mdp_isr, }; #define MDP_REG_BUS_VECTOR_ENTRY(ab_val, ib_val) \ { \ .src = MSM_BUS_MASTER_SPDM, \ .dst = MSM_BUS_SLAVE_IMEM_CFG, \ .ab = (ab_val), \ .ib = (ib_val), \ } #define SZ_37_5M (37500000 * 8) #define SZ_75M (75000000 * 8) static struct msm_bus_vectors mdp_reg_bus_vectors[] = { MDP_REG_BUS_VECTOR_ENTRY(0, 0), MDP_REG_BUS_VECTOR_ENTRY(0, SZ_37_5M), MDP_REG_BUS_VECTOR_ENTRY(0, SZ_75M), }; static struct msm_bus_paths mdp_reg_bus_usecases[ARRAY_SIZE( mdp_reg_bus_vectors)]; static struct msm_bus_scale_pdata mdp_reg_bus_scale_table = { .usecase = mdp_reg_bus_usecases, .num_usecases = ARRAY_SIZE(mdp_reg_bus_usecases), .name = "mdss_reg", }; static DEFINE_SPINLOCK(mdss_lock); struct mdss_hw *mdss_irq_handlers[MDSS_MAX_HW_BLK]; Loading Loading @@ -363,6 +387,9 @@ EXPORT_SYMBOL(mdss_disable_irq_nosync); static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) { struct msm_bus_scale_pdata *reg_bus_pdata; int i; if (!mdata->bus_hdl) { mdata->bus_hdl = msm_bus_scale_register_client(mdata->bus_scale_table); Loading @@ -374,6 +401,24 @@ static int mdss_mdp_bus_scale_register(struct mdss_data_type *mdata) pr_debug("register bus_hdl=%x\n", mdata->bus_hdl); } if (!mdata->reg_bus_hdl) { reg_bus_pdata = &mdp_reg_bus_scale_table; for (i = 0; i < reg_bus_pdata->num_usecases; i++) { mdp_reg_bus_usecases[i].num_paths = 1; mdp_reg_bus_usecases[i].vectors = &mdp_reg_bus_vectors[i]; } mdata->reg_bus_hdl = msm_bus_scale_register_client(reg_bus_pdata); if (!mdata->reg_bus_hdl) { /* Continue without reg_bus scaling */ pr_warn("reg_bus_client register failed\n"); } else pr_debug("register reg_bus_hdl=%x\n", mdata->reg_bus_hdl); } return mdss_mdp_bus_scale_set_quota(AB_QUOTA, IB_QUOTA); } Loading @@ -383,6 +428,13 @@ static void mdss_mdp_bus_scale_unregister(struct mdss_data_type *mdata) if (mdata->bus_hdl) msm_bus_scale_unregister_client(mdata->bus_hdl); pr_debug("unregister reg_bus_hdl=%x\n", mdata->reg_bus_hdl); if (mdata->reg_bus_hdl) { msm_bus_scale_unregister_client(mdata->reg_bus_hdl); mdata->reg_bus_hdl = 0; } } int mdss_mdp_bus_scale_set_quota(u64 ab_quota, u64 ib_quota) Loading
drivers/video/msm/mdss/mdss_mdp.h +6 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,12 @@ enum mdp_wfd_blk_type { MDSS_MDP_WFD_DEDICATED, }; enum mdss_mdp_reg_bus_cfg { REG_CLK_CFG_OFF, REG_CLK_CFG_LOW, REG_CLK_CFG_HIGH, }; struct mdss_mdp_ctl; typedef void (*mdp_vsync_handler_t)(struct mdss_mdp_ctl *, ktime_t); Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +13 −13 Original line number Diff line number Diff line Loading @@ -44,9 +44,6 @@ #define IS_RIGHT_MIXER_OV(flags, dst_x, left_lm_w) \ ((flags & MDSS_MDP_RIGHT_MIXER) || (dst_x >= left_lm_w)) #define PP_CLK_CFG_OFF 0 #define PP_CLK_CFG_ON 1 #define MEM_PROTECT_SD_CTRL 0xF #define OVERLAY_MAX 10 Loading Loading @@ -2526,8 +2523,8 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, int ret = -ENOSYS; struct mdp_histogram_data hist; struct mdp_histogram_start_req hist_req; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); u32 block; u32 pp_bus_handle; static int req = -1; switch (cmd) { Loading @@ -2535,11 +2532,14 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, if (!mfd->panel_power_on) return -EPERM; pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl; req = msm_bus_scale_client_update_request(pp_bus_handle, PP_CLK_CFG_ON); if (mdata->reg_bus_hdl) { req = msm_bus_scale_client_update_request( mdata->reg_bus_hdl, REG_CLK_CFG_LOW); if (req) pr_err("Updated pp_bus_scale failed, ret = %d", req); pr_err("Updated pp_bus_scale failed, ret = %d", req); } ret = copy_from_user(&hist_req, argp, sizeof(hist_req)); if (ret) Loading @@ -2557,10 +2557,10 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd, if (ret) return ret; if (!req) { pp_bus_handle = mdss_mdp_get_mdata()->pp_bus_hdl; req = msm_bus_scale_client_update_request(pp_bus_handle, PP_CLK_CFG_OFF); if (mdata->reg_bus_hdl && !req) { req = msm_bus_scale_client_update_request( mdata->reg_bus_hdl, REG_CLK_CFG_OFF); if (req) pr_err("Updated pp_bus_scale failed, ret = %d", req); Loading
drivers/video/msm/mdss/mdss_mdp_pp.c +0 −47 Original line number Diff line number Diff line Loading @@ -288,26 +288,6 @@ static int mdss_mdp_hscl_filter[] = { #define SHARP_SMOOTH_THR_DEFAULT 8 #define SHARP_NOISE_THR_DEFAULT 2 #define MDP_PP_BUS_VECTOR_ENTRY(ab_val, ib_val) \ { \ .src = MSM_BUS_MASTER_SPDM, \ .dst = MSM_BUS_SLAVE_IMEM_CFG, \ .ab = (ab_val), \ .ib = (ib_val), \ } #define SZ_37_5M (37500000 * 8) static struct msm_bus_vectors mdp_pp_bus_vectors[] = { MDP_PP_BUS_VECTOR_ENTRY(0, 0), MDP_PP_BUS_VECTOR_ENTRY(0, SZ_37_5M), }; static struct msm_bus_paths mdp_pp_bus_usecases[ARRAY_SIZE(mdp_pp_bus_vectors)]; static struct msm_bus_scale_pdata mdp_pp_bus_scale_table = { .usecase = mdp_pp_bus_usecases, .num_usecases = ARRAY_SIZE(mdp_pp_bus_usecases), .name = "mdss_pp", }; struct mdss_pp_res_type { /* logical info */ Loading Loading @@ -1898,7 +1878,6 @@ int mdss_mdp_pp_init(struct device *dev) int i, ret = 0; struct mdss_data_type *mdata = mdss_mdp_get_mdata(); struct mdss_mdp_pipe *vig; struct msm_bus_scale_pdata *pp_bus_pdata; struct pp_hist_col_info *hist; if (!mdata) Loading Loading @@ -1949,23 +1928,6 @@ int mdss_mdp_pp_init(struct device *dev) init_completion(&vig[i].pp_res.hist.comp); init_completion(&vig[i].pp_res.hist.first_kick); } if (!mdata->pp_bus_hdl) { pp_bus_pdata = &mdp_pp_bus_scale_table; for (i = 0; i < pp_bus_pdata->num_usecases; i++) { mdp_pp_bus_usecases[i].num_paths = 1; mdp_pp_bus_usecases[i].vectors = &mdp_pp_bus_vectors[i]; } mdata->pp_bus_hdl = msm_bus_scale_register_client(pp_bus_pdata); if (!mdata->pp_bus_hdl) { pr_err("not able to register pp_bus_scale\n"); ret = -ENOMEM; } pr_debug("register pp_bus_hdl=%x\n", mdata->pp_bus_hdl); } } mutex_unlock(&mdss_pp_mutex); return ret; Loading @@ -1973,15 +1935,6 @@ int mdss_mdp_pp_init(struct device *dev) void mdss_mdp_pp_term(struct device *dev) { struct mdss_data_type *mdata = mdss_mdp_get_mdata(); if (!mdata) return; if (mdata->pp_bus_hdl) { msm_bus_scale_unregister_client(mdata->pp_bus_hdl); mdata->pp_bus_hdl = 0; } if (mdss_pp_res) { mutex_lock(&mdss_pp_mutex); devm_kfree(dev, mdss_pp_res->dspp_hist); Loading