diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.h | 5 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_ctl.c | 80 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_rotator.c | 8 |
3 files changed, 23 insertions, 70 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.h b/drivers/video/fbdev/msm/mdss_mdp.h index 6ac2fda390a3..cd0b952c8d99 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.h +++ b/drivers/video/fbdev/msm/mdss_mdp.h @@ -1039,9 +1039,8 @@ void mdss_mdp_ctl_notifier_register(struct mdss_mdp_ctl *ctl, void mdss_mdp_ctl_notifier_unregister(struct mdss_mdp_ctl *ctl, struct notifier_block *notifier); u32 mdss_mdp_ctl_perf_get_transaction_status(struct mdss_mdp_ctl *ctl); -u32 mdss_apply_overhead_factors(u32 quota, bool is_nrt, - bool is_rot_read, struct mdss_mdp_format_params *fmt, - struct mult_factor *comp_ratio); +u32 apply_comp_ratio_factor(u32 quota, struct mdss_mdp_format_params *fmt, + struct mult_factor *factor); int mdss_mdp_scan_pipes(void); diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index 686cde1009c6..8b1d193da5a3 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -549,50 +549,24 @@ static inline bool validate_comp_ratio(struct mult_factor *factor) return factor->numer && factor->denom; } -static u32 apply_comp_ratio_factor(u32 quota, +u32 apply_comp_ratio_factor(u32 quota, struct mdss_mdp_format_params *fmt, struct mult_factor *factor) { + struct mdss_data_type *mdata = mdss_mdp_get_mdata(); + + if (!mdata || test_bit(MDSS_QOS_OVERHEAD_FACTOR, + mdata->mdss_qos_map)) + return quota; /* apply compression ratio, only for compressed formats */ if (mdss_mdp_is_ubwc_format(fmt) && - validate_comp_ratio(factor)) { + validate_comp_ratio(factor)) quota = apply_inverse_fudge_factor(quota , factor); - } return quota; } -static u32 apply_overhead_factors(u32 quota, - bool is_nrt, bool is_rot_read, - struct mdss_mdp_format_params *fmt, - struct mult_factor *comp_ratio) -{ - u32 overhead_quota; - - if (!fmt) { - pr_debug("fmt is null, skip overhead factor\n"); - return quota; - } - - /* rotator read + YUV linear format */ - if (is_nrt && is_rot_read && fmt->is_yuv && - mdss_mdp_is_linear_format(fmt)) { - /* - * overhead and compression ratio factors are 1, - * so overhead_quota = quota + quota - */ - overhead_quota = quota * 2; - } else { - /* add ~3% (0.03125) of overhead */ - overhead_quota = quota / 32; - overhead_quota += apply_comp_ratio_factor(quota, fmt, - comp_ratio); - } - - return overhead_quota; -}; - static u32 mdss_mdp_get_rotator_fps(struct mdss_mdp_pipe *pipe) { struct mdss_data_type *mdata = mdss_mdp_get_mdata(); @@ -607,23 +581,6 @@ static u32 mdss_mdp_get_rotator_fps(struct mdss_mdp_pipe *pipe) return fps; } -u32 mdss_apply_overhead_factors(u32 quota, bool is_nrt, - bool is_rot_read, struct mdss_mdp_format_params *fmt, - struct mult_factor *comp_ratio) -{ - struct mdss_data_type *mdata = mdss_mdp_get_mdata(); - - if (!mdata) - return quota; - - if (test_bit(MDSS_QOS_OVERHEAD_FACTOR, - mdata->mdss_qos_map)) { - quota = apply_overhead_factors(quota, - is_nrt, is_rot_read, fmt, comp_ratio); - } - return quota; -} - u64 mdss_mdp_perf_calc_simplified_prefill(struct mdss_mdp_pipe *pipe, u32 v_total, u32 fps, struct mdss_mdp_ctl *ctl) { @@ -785,9 +742,8 @@ int mdss_mdp_perf_calc_pipe(struct mdss_mdp_pipe *pipe, if (test_bit(MDSS_QOS_OVERHEAD_FACTOR, mdata->mdss_qos_map)) { /* rotator read */ - quota = apply_overhead_factors(quota, - true, true, pipe->src_fmt, - &pipe->comp_ratio); + quota = apply_comp_ratio_factor(quota, + pipe->src_fmt, &pipe->comp_ratio); /* * rotator write: here we are using src_fmt since * current implementation only supports calculate @@ -797,9 +753,8 @@ int mdss_mdp_perf_calc_pipe(struct mdss_mdp_pipe *pipe, * calculate the bandwidth, but leaving this * calculation as per current support. */ - quota += apply_overhead_factors(quota, - true, false, pipe->src_fmt, - &pipe->comp_ratio); + quota += apply_comp_ratio_factor(quota, + pipe->src_fmt, &pipe->comp_ratio); } else { quota *= 2; /* bus read + write */ } @@ -811,10 +766,8 @@ int mdss_mdp_perf_calc_pipe(struct mdss_mdp_pipe *pipe, if (test_bit(MDSS_QOS_OVERHEAD_FACTOR, mdata->mdss_qos_map)) - quota = apply_overhead_factors(quota, - mdss_mdp_is_nrt_ctl_path(mixer->ctl), - false, pipe->src_fmt, - &pipe->comp_ratio); + quota = apply_comp_ratio_factor(quota, + pipe->src_fmt, &pipe->comp_ratio); } perf->bw_overlap = quota; @@ -945,9 +898,10 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer, if (test_bit(MDSS_QOS_OVERHEAD_FACTOR, mdata->mdss_qos_map)) - perf->bw_writeback = apply_overhead_factors( - perf->bw_writeback, true, false, fmt, - &mixer->ctl->dst_comp_ratio); + perf->bw_writeback = apply_comp_ratio_factor( + perf->bw_writeback, fmt, + &mixer->ctl->dst_comp_ratio); + } else if (pinfo->type == MIPI_CMD_PANEL) { /* for cmd mode, run as fast as the link allows us */ u32 dsi_pclk_rate = pinfo->mipi.dsi_pclk_rate; diff --git a/drivers/video/fbdev/msm/mdss_rotator.c b/drivers/video/fbdev/msm/mdss_rotator.c index a7fcb6d2f90c..49fb5b99dd1d 100644 --- a/drivers/video/fbdev/msm/mdss_rotator.c +++ b/drivers/video/fbdev/msm/mdss_rotator.c @@ -1006,10 +1006,10 @@ static int mdss_rotator_calc_perf(struct mdss_rot_perf *perf) else write_bw *= out_fmt->bpp; - read_bw = mdss_apply_overhead_factors(read_bw, - true, true, in_fmt, &config->input.comp_ratio); - write_bw = mdss_apply_overhead_factors(write_bw, - true, false, out_fmt, &config->output.comp_ratio); + read_bw = apply_comp_ratio_factor(read_bw, in_fmt, + &config->input.comp_ratio); + write_bw = apply_comp_ratio_factor(write_bw, out_fmt, + &config->output.comp_ratio); perf->bw = read_bw + write_bw; return 0; |
