Loading drivers/video/msm/mdss/mdss.h +1 −0 Original line number Diff line number Diff line Loading @@ -441,6 +441,7 @@ struct mdss_data_type { struct mdss_max_bw_settings *max_bw_settings; u32 bw_mode_bitmap; u32 max_bw_settings_cnt; bool bw_limit_pending; struct mdss_max_bw_settings *max_per_pipe_bw_settings; u32 mdss_per_pipe_bw_cnt; Loading drivers/video/msm/mdss/mdss_mdp.c +42 −2 Original line number Diff line number Diff line Loading @@ -1644,11 +1644,50 @@ static ssize_t mdss_mdp_show_capabilities(struct device *dev, SPRINT(" src_split"); if (mdata->has_rot_dwnscale) SPRINT(" rotator_downscale"); if (mdata->max_bw_settings_cnt) SPRINT(" dynamic_bw_limit"); SPRINT("\n"); return cnt; } static ssize_t mdss_mdp_read_max_limit_bw(struct device *dev, struct device_attribute *attr, char *buf) { struct mdss_data_type *mdata = dev_get_drvdata(dev); size_t len = PAGE_SIZE; u32 cnt = 0; int i; char bw_names[4][8] = {"default", "camera", "hflip", "vflip"}; char pipe_bw_names[4][16] = {"default_pipe", "camera_pipe", "hflip_pipe", "vflip_pipe"}; struct mdss_max_bw_settings *bw_settings; struct mdss_max_bw_settings *pipe_bw_settings; bw_settings = mdata->max_bw_settings; pipe_bw_settings = mdata->max_per_pipe_bw_settings; #define SPRINT(fmt, ...) \ (cnt += scnprintf(buf + cnt, len - cnt, fmt, ##__VA_ARGS__)) SPRINT("bw_mode_bitmap=%d\n", mdata->bw_mode_bitmap); SPRINT("bw_limit_pending=%d\n", mdata->bw_limit_pending); for (i = 0; i < mdata->max_bw_settings_cnt; i++) { SPRINT("%s=%d\n", bw_names[i], bw_settings->mdss_max_bw_val); bw_settings++; } for (i = 0; i < mdata->mdss_per_pipe_bw_cnt; i++) { SPRINT("%s=%d\n", pipe_bw_names[i], pipe_bw_settings->mdss_max_bw_val); pipe_bw_settings++; } return cnt; } static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { Loading @@ -1659,6 +1698,7 @@ static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, pr_info("Not able scan to bw_mode_bitmap\n"); } else { mdata->bw_mode_bitmap = data; mdata->bw_limit_pending = true; pr_debug("limit use case, bw_mode_bitmap = %d\n", data); } Loading @@ -1666,8 +1706,8 @@ static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, } static DEVICE_ATTR(caps, S_IRUGO, mdss_mdp_show_capabilities, NULL); static DEVICE_ATTR(bw_mode_bitmap, S_IRUGO | S_IWUSR | S_IWGRP, NULL, mdss_mdp_store_max_limit_bw); static DEVICE_ATTR(bw_mode_bitmap, S_IRUGO | S_IWUSR | S_IWGRP, mdss_mdp_read_max_limit_bw, mdss_mdp_store_max_limit_bw); static struct attribute *mdp_fs_attrs[] = { &dev_attr_caps.attr, Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +2 −0 Original line number Diff line number Diff line Loading @@ -4829,6 +4829,7 @@ int mdss_mdp_display_wait4comp(struct mdss_mdp_ctl *ctl) trace_mdp_commit(ctl); mdss_mdp_ctl_perf_update(ctl, 0, false); mdata->bw_limit_pending = false; if (IS_MDSS_MAJOR_MINOR_SAME(mdata->mdp_rev, MDSS_MDP_HW_REV_103)) { mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); Loading Loading @@ -4883,6 +4884,7 @@ int mdss_mdp_display_wait4pingpong(struct mdss_mdp_ctl *ctl, bool use_lock) recovery_needed = true; } ctl->mdata->bw_limit_pending = false; if (recovery_needed) { mdss_mdp_ctl_reset(ctl, true); if (sctl) Loading Loading
drivers/video/msm/mdss/mdss.h +1 −0 Original line number Diff line number Diff line Loading @@ -441,6 +441,7 @@ struct mdss_data_type { struct mdss_max_bw_settings *max_bw_settings; u32 bw_mode_bitmap; u32 max_bw_settings_cnt; bool bw_limit_pending; struct mdss_max_bw_settings *max_per_pipe_bw_settings; u32 mdss_per_pipe_bw_cnt; Loading
drivers/video/msm/mdss/mdss_mdp.c +42 −2 Original line number Diff line number Diff line Loading @@ -1644,11 +1644,50 @@ static ssize_t mdss_mdp_show_capabilities(struct device *dev, SPRINT(" src_split"); if (mdata->has_rot_dwnscale) SPRINT(" rotator_downscale"); if (mdata->max_bw_settings_cnt) SPRINT(" dynamic_bw_limit"); SPRINT("\n"); return cnt; } static ssize_t mdss_mdp_read_max_limit_bw(struct device *dev, struct device_attribute *attr, char *buf) { struct mdss_data_type *mdata = dev_get_drvdata(dev); size_t len = PAGE_SIZE; u32 cnt = 0; int i; char bw_names[4][8] = {"default", "camera", "hflip", "vflip"}; char pipe_bw_names[4][16] = {"default_pipe", "camera_pipe", "hflip_pipe", "vflip_pipe"}; struct mdss_max_bw_settings *bw_settings; struct mdss_max_bw_settings *pipe_bw_settings; bw_settings = mdata->max_bw_settings; pipe_bw_settings = mdata->max_per_pipe_bw_settings; #define SPRINT(fmt, ...) \ (cnt += scnprintf(buf + cnt, len - cnt, fmt, ##__VA_ARGS__)) SPRINT("bw_mode_bitmap=%d\n", mdata->bw_mode_bitmap); SPRINT("bw_limit_pending=%d\n", mdata->bw_limit_pending); for (i = 0; i < mdata->max_bw_settings_cnt; i++) { SPRINT("%s=%d\n", bw_names[i], bw_settings->mdss_max_bw_val); bw_settings++; } for (i = 0; i < mdata->mdss_per_pipe_bw_cnt; i++) { SPRINT("%s=%d\n", pipe_bw_names[i], pipe_bw_settings->mdss_max_bw_val); pipe_bw_settings++; } return cnt; } static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { Loading @@ -1659,6 +1698,7 @@ static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, pr_info("Not able scan to bw_mode_bitmap\n"); } else { mdata->bw_mode_bitmap = data; mdata->bw_limit_pending = true; pr_debug("limit use case, bw_mode_bitmap = %d\n", data); } Loading @@ -1666,8 +1706,8 @@ static ssize_t mdss_mdp_store_max_limit_bw(struct device *dev, } static DEVICE_ATTR(caps, S_IRUGO, mdss_mdp_show_capabilities, NULL); static DEVICE_ATTR(bw_mode_bitmap, S_IRUGO | S_IWUSR | S_IWGRP, NULL, mdss_mdp_store_max_limit_bw); static DEVICE_ATTR(bw_mode_bitmap, S_IRUGO | S_IWUSR | S_IWGRP, mdss_mdp_read_max_limit_bw, mdss_mdp_store_max_limit_bw); static struct attribute *mdp_fs_attrs[] = { &dev_attr_caps.attr, Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +2 −0 Original line number Diff line number Diff line Loading @@ -4829,6 +4829,7 @@ int mdss_mdp_display_wait4comp(struct mdss_mdp_ctl *ctl) trace_mdp_commit(ctl); mdss_mdp_ctl_perf_update(ctl, 0, false); mdata->bw_limit_pending = false; if (IS_MDSS_MAJOR_MINOR_SAME(mdata->mdp_rev, MDSS_MDP_HW_REV_103)) { mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON); Loading Loading @@ -4883,6 +4884,7 @@ int mdss_mdp_display_wait4pingpong(struct mdss_mdp_ctl *ctl, bool use_lock) recovery_needed = true; } ctl->mdata->bw_limit_pending = false; if (recovery_needed) { mdss_mdp_ctl_reset(ctl, true); if (sctl) Loading