Loading drivers/video/msm/mdss/mdss.h +5 −10 Original line number Diff line number Diff line Loading @@ -74,11 +74,6 @@ struct mdss_debug_inf { void (*debug_enable_clock)(int on); }; struct mdss_fudge_factor { u32 numer; u32 denom; }; struct mdss_perf_tune { unsigned long min_mdp_clk; u64 min_bus_vote; Loading Loading @@ -318,11 +313,11 @@ struct mdss_data_type { u32 *vbif_nrt_qos; u32 npriority_lvl; struct mdss_fudge_factor ab_factor; struct mdss_fudge_factor ib_factor; struct mdss_fudge_factor ib_factor_overlap; struct mdss_fudge_factor clk_factor; struct mdss_fudge_factor per_pipe_ib_factor; struct mult_factor ab_factor; struct mult_factor ib_factor; struct mult_factor ib_factor_overlap; struct mult_factor clk_factor; struct mult_factor per_pipe_ib_factor; bool apply_post_scale_bytes; bool hflip_buffer_reused; Loading drivers/video/msm/mdss/mdss_debug.c +2 −2 Original line number Diff line number Diff line Loading @@ -656,7 +656,7 @@ void mdss_debug_register_dump_range(struct platform_device *pdev, static ssize_t mdss_debug_factor_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) { struct mdss_fudge_factor *factor = file->private_data; struct mult_factor *factor = file->private_data; u32 numer; u32 denom; char buf[32]; Loading Loading @@ -699,7 +699,7 @@ static ssize_t mdss_debug_factor_write(struct file *file, static ssize_t mdss_debug_factor_read(struct file *file, char __user *buff, size_t count, loff_t *ppos) { struct mdss_fudge_factor *factor = file->private_data; struct mult_factor *factor = file->private_data; int len = 0; char buf[32]; Loading drivers/video/msm/mdss/mdss_mdp.c +1 −1 Original line number Diff line number Diff line Loading @@ -2741,7 +2741,7 @@ static int mdss_mdp_parse_dt_smp(struct platform_device *pdev) } static void mdss_mdp_parse_dt_fudge_factors(struct platform_device *pdev, char *prop_name, struct mdss_fudge_factor *ff) char *prop_name, struct mult_factor *ff) { int rc; u32 data[2] = {1, 1}; Loading drivers/video/msm/mdss/mdss_mdp.h +7 −5 Original line number Diff line number Diff line Loading @@ -259,9 +259,12 @@ struct mdss_mdp_ctl { u16 height; u16 border_x_off; u16 border_y_off; u32 dst_format; bool is_secure; /* used for WFD */ u32 dst_format; struct mult_factor dst_comp_ratio; u32 clk_rate; int force_screen_state; struct mdss_mdp_perf_params cur_perf; Loading Loading @@ -1036,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); Loading Loading @@ -1161,7 +1163,7 @@ void mdss_mdp_data_calc_offset(struct mdss_mdp_data *data, u16 x, u16 y, struct mdss_mdp_format_params *mdss_mdp_get_format_params(u32 format); void mdss_mdp_get_v_h_subsample_rate(u8 chroma_samp, u8 *v_sample, u8 *h_sample); struct mdss_fudge_factor *mdss_mdp_get_comp_factor(u32 format, struct mult_factor *mdss_mdp_get_comp_factor(u32 format, bool rt_factor); int mdss_mdp_data_get(struct mdss_mdp_data *data, struct msmfb_data *planes, int num_planes, u32 flags, struct device *dev, bool rotator, Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +21 −67 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ static inline u64 fudge_factor(u64 val, u32 numer, u32 denom) } static inline u64 apply_fudge_factor(u64 val, struct mdss_fudge_factor *factor) struct mult_factor *factor) { return fudge_factor(val, factor->numer, factor->denom); } Loading Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -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 Loading @@ -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 */ } Loading @@ -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; Loading Loading @@ -926,7 +879,7 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer, if (pinfo->type == WRITEBACK_PANEL) { fmt = mdss_mdp_get_format_params( pinfo->out_format); mixer->ctl->dst_format); if (fmt) bpp = fmt->bpp; pinfo = NULL; Loading @@ -945,11 +898,12 @@ 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, &pipe->comp_ratio); /* for command mode, run as fast as the link allows us */ 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; if (is_pingpong_split(mixer->ctl->mfd)) Loading Loading @@ -1723,7 +1677,7 @@ static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, if (test_bit(MDSS_MDP_BW_MODE_SINGLE_LAYER, perf->bw_vote_mode) && (bus_ib_quota >= PERF_SINGLE_PIPE_BW_FLOOR)) { struct mdss_fudge_factor ib_factor_vscaling; struct mult_factor ib_factor_vscaling; ib_factor_vscaling.numer = 2; ib_factor_vscaling.denom = 1; bus_ib_quota = apply_fudge_factor(bus_ib_quota, Loading Loading
drivers/video/msm/mdss/mdss.h +5 −10 Original line number Diff line number Diff line Loading @@ -74,11 +74,6 @@ struct mdss_debug_inf { void (*debug_enable_clock)(int on); }; struct mdss_fudge_factor { u32 numer; u32 denom; }; struct mdss_perf_tune { unsigned long min_mdp_clk; u64 min_bus_vote; Loading Loading @@ -318,11 +313,11 @@ struct mdss_data_type { u32 *vbif_nrt_qos; u32 npriority_lvl; struct mdss_fudge_factor ab_factor; struct mdss_fudge_factor ib_factor; struct mdss_fudge_factor ib_factor_overlap; struct mdss_fudge_factor clk_factor; struct mdss_fudge_factor per_pipe_ib_factor; struct mult_factor ab_factor; struct mult_factor ib_factor; struct mult_factor ib_factor_overlap; struct mult_factor clk_factor; struct mult_factor per_pipe_ib_factor; bool apply_post_scale_bytes; bool hflip_buffer_reused; Loading
drivers/video/msm/mdss/mdss_debug.c +2 −2 Original line number Diff line number Diff line Loading @@ -656,7 +656,7 @@ void mdss_debug_register_dump_range(struct platform_device *pdev, static ssize_t mdss_debug_factor_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos) { struct mdss_fudge_factor *factor = file->private_data; struct mult_factor *factor = file->private_data; u32 numer; u32 denom; char buf[32]; Loading Loading @@ -699,7 +699,7 @@ static ssize_t mdss_debug_factor_write(struct file *file, static ssize_t mdss_debug_factor_read(struct file *file, char __user *buff, size_t count, loff_t *ppos) { struct mdss_fudge_factor *factor = file->private_data; struct mult_factor *factor = file->private_data; int len = 0; char buf[32]; Loading
drivers/video/msm/mdss/mdss_mdp.c +1 −1 Original line number Diff line number Diff line Loading @@ -2741,7 +2741,7 @@ static int mdss_mdp_parse_dt_smp(struct platform_device *pdev) } static void mdss_mdp_parse_dt_fudge_factors(struct platform_device *pdev, char *prop_name, struct mdss_fudge_factor *ff) char *prop_name, struct mult_factor *ff) { int rc; u32 data[2] = {1, 1}; Loading
drivers/video/msm/mdss/mdss_mdp.h +7 −5 Original line number Diff line number Diff line Loading @@ -259,9 +259,12 @@ struct mdss_mdp_ctl { u16 height; u16 border_x_off; u16 border_y_off; u32 dst_format; bool is_secure; /* used for WFD */ u32 dst_format; struct mult_factor dst_comp_ratio; u32 clk_rate; int force_screen_state; struct mdss_mdp_perf_params cur_perf; Loading Loading @@ -1036,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); Loading Loading @@ -1161,7 +1163,7 @@ void mdss_mdp_data_calc_offset(struct mdss_mdp_data *data, u16 x, u16 y, struct mdss_mdp_format_params *mdss_mdp_get_format_params(u32 format); void mdss_mdp_get_v_h_subsample_rate(u8 chroma_samp, u8 *v_sample, u8 *h_sample); struct mdss_fudge_factor *mdss_mdp_get_comp_factor(u32 format, struct mult_factor *mdss_mdp_get_comp_factor(u32 format, bool rt_factor); int mdss_mdp_data_get(struct mdss_mdp_data *data, struct msmfb_data *planes, int num_planes, u32 flags, struct device *dev, bool rotator, Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +21 −67 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ static inline u64 fudge_factor(u64 val, u32 numer, u32 denom) } static inline u64 apply_fudge_factor(u64 val, struct mdss_fudge_factor *factor) struct mult_factor *factor) { return fudge_factor(val, factor->numer, factor->denom); } Loading Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -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 Loading @@ -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 */ } Loading @@ -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; Loading Loading @@ -926,7 +879,7 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer, if (pinfo->type == WRITEBACK_PANEL) { fmt = mdss_mdp_get_format_params( pinfo->out_format); mixer->ctl->dst_format); if (fmt) bpp = fmt->bpp; pinfo = NULL; Loading @@ -945,11 +898,12 @@ 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, &pipe->comp_ratio); /* for command mode, run as fast as the link allows us */ 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; if (is_pingpong_split(mixer->ctl->mfd)) Loading Loading @@ -1723,7 +1677,7 @@ static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, if (test_bit(MDSS_MDP_BW_MODE_SINGLE_LAYER, perf->bw_vote_mode) && (bus_ib_quota >= PERF_SINGLE_PIPE_BW_FLOOR)) { struct mdss_fudge_factor ib_factor_vscaling; struct mult_factor ib_factor_vscaling; ib_factor_vscaling.numer = 2; ib_factor_vscaling.denom = 1; bus_ib_quota = apply_fudge_factor(bus_ib_quota, Loading