Loading drivers/video/fbdev/msm/mdss_mdp_ctl.c +57 −18 Original line number Diff line number Diff line Loading @@ -2040,12 +2040,11 @@ static u64 mdss_mdp_ctl_calc_client_vote(struct mdss_data_type *mdata, return bw_sum_of_intfs; } static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, /* apply any adjustments to the ib quota */ static inline u64 __calc_bus_ib_quota(struct mdss_data_type *mdata, struct mdss_mdp_perf_params *perf, bool nrt_client, u64 bw_vote) { u64 bus_ab_quota, bus_ib_quota; bus_ab_quota = max(bw_vote, mdata->perf_tune.min_bus_vote); u64 bus_ib_quota; if (test_bit(MDSS_QOS_PER_PIPE_IB, mdata->mdss_qos_map)) { if (!nrt_client) Loading @@ -2071,6 +2070,18 @@ static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, bus_ib_quota = apply_fudge_factor(bus_ib_quota, &mdata->per_pipe_ib_factor); return bus_ib_quota; } static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, struct mdss_mdp_perf_params *perf, bool nrt_client, u64 bw_vote) { u64 bus_ab_quota, bus_ib_quota; bus_ab_quota = max(bw_vote, mdata->perf_tune.min_bus_vote); bus_ib_quota = __calc_bus_ib_quota(mdata, perf, nrt_client, bw_vote); bus_ab_quota = apply_fudge_factor(bus_ab_quota, &mdss_res->ab_factor); ATRACE_INT("bus_quota", bus_ib_quota); Loading Loading @@ -2232,6 +2243,46 @@ static bool is_traffic_shaper_enabled(struct mdss_data_type *mdata) return false; } static bool __mdss_mdp_compare_bw( struct mdss_mdp_ctl *ctl, struct mdss_mdp_perf_params *new_perf, struct mdss_mdp_perf_params *old_perf, bool params_changed, bool stop_req) { struct mdss_data_type *mdata = ctl->mdata; bool is_nrt = mdss_mdp_is_nrt_ctl_path(ctl); u64 new_ib = __calc_bus_ib_quota(mdata, new_perf, is_nrt, new_perf->bw_ctl); u64 old_ib = __calc_bus_ib_quota(mdata, old_perf, is_nrt, old_perf->bw_ctl); u64 max_new_bw = max(new_perf->bw_ctl, new_ib); u64 max_old_bw = max(old_perf->bw_ctl, old_ib); bool update_bw = false; /* * three cases for bus bandwidth update. * 1. new bandwidth vote (ab or ib) or writeback output vote * are higher than current vote for update request. * 2. new bandwidth vote or writeback output vote are * lower than current vote at end of commit or stop. * 3. end of writeback/rotator session - last chance to * non-realtime remove vote. */ if ((params_changed && ((max_new_bw > max_old_bw) || /* ab and ib bw */ (new_perf->bw_writeback > old_perf->bw_writeback))) || (!params_changed && ((max_new_bw < max_old_bw) || (new_perf->bw_writeback < old_perf->bw_writeback))) || (stop_req && is_nrt)) update_bw = true; trace_mdp_compare_bw(new_perf->bw_ctl, new_ib, new_perf->bw_writeback, max_new_bw, old_perf->bw_ctl, old_ib, old_perf->bw_writeback, max_old_bw, params_changed, update_bw); return update_bw; } static void mdss_mdp_ctl_perf_update(struct mdss_mdp_ctl *ctl, int params_changed, bool stop_req) { Loading Loading @@ -2267,20 +2318,8 @@ static void mdss_mdp_ctl_perf_update(struct mdss_mdp_ctl *ctl, else if (is_bw_released || params_changed) mdss_mdp_perf_calc_ctl(ctl, new); /* * three cases for bus bandwidth update. * 1. new bandwidth vote or writeback output vote * are higher than current vote for update request. * 2. new bandwidth vote or writeback output vote are * lower than current vote at end of commit or stop. * 3. end of writeback/rotator session - last chance to * non-realtime remove vote. */ if ((params_changed && ((new->bw_ctl > old->bw_ctl) || (new->bw_writeback > old->bw_writeback))) || (!params_changed && ((new->bw_ctl < old->bw_ctl) || (new->bw_writeback < old->bw_writeback))) || (stop_req && mdss_mdp_is_nrt_ctl_path(ctl))) { if (__mdss_mdp_compare_bw(ctl, new, old, params_changed, stop_req)) { pr_debug("c=%d p=%d new_bw=%llu,old_bw=%llu\n", ctl->num, params_changed, new->bw_ctl, Loading drivers/video/fbdev/msm/mdss_mdp_trace.h +40 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,46 @@ TRACE_EVENT(mdp_perf_update_bus, __entry->ib_quota) ); TRACE_EVENT(mdp_compare_bw, TP_PROTO(unsigned long long new_ab, unsigned long long new_ib, unsigned long long new_wb, unsigned long long new_max, unsigned long long old_ab, unsigned long long old_ib, unsigned long long old_wb, unsigned long long old_max, u32 params_changed, bool update_bw), TP_ARGS(new_ab, new_ib, new_wb, new_max, old_ab, old_ib, old_wb, old_max, params_changed, update_bw), TP_STRUCT__entry( __field(u64, new_ab) __field(u64, new_ib) __field(u64, new_wb) __field(u64, new_max) __field(u64, old_ab) __field(u64, old_ib) __field(u64, old_wb) __field(u64, old_max) __field(u32, params_changed) __field(bool, update_bw) ), TP_fast_assign( __entry->new_ab = new_ab; __entry->new_ib = new_ib; __entry->new_wb = new_wb; __entry->new_max = new_max; __entry->old_ab = old_ab; __entry->old_ib = old_ib; __entry->old_wb = old_wb; __entry->old_max = old_max; __entry->params_changed = params_changed; __entry->update_bw = update_bw; ), TP_printk("[ab,ib,wb,max] new[%llu, %llu, %llu, %llu] old[%llu, %llu, %llu, %llu] parm:%d ret:%d", __entry->new_ab, __entry->new_ib, __entry->new_wb, __entry->new_max, __entry->old_ab, __entry->old_ib, __entry->old_wb, __entry->old_max, __entry->params_changed, __entry->update_bw) ); TRACE_EVENT(mdp_misr_crc, TP_PROTO(u32 block_id, u32 vsync_cnt, u32 crc), TP_ARGS(block_id, vsync_cnt, crc), Loading Loading
drivers/video/fbdev/msm/mdss_mdp_ctl.c +57 −18 Original line number Diff line number Diff line Loading @@ -2040,12 +2040,11 @@ static u64 mdss_mdp_ctl_calc_client_vote(struct mdss_data_type *mdata, return bw_sum_of_intfs; } static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, /* apply any adjustments to the ib quota */ static inline u64 __calc_bus_ib_quota(struct mdss_data_type *mdata, struct mdss_mdp_perf_params *perf, bool nrt_client, u64 bw_vote) { u64 bus_ab_quota, bus_ib_quota; bus_ab_quota = max(bw_vote, mdata->perf_tune.min_bus_vote); u64 bus_ib_quota; if (test_bit(MDSS_QOS_PER_PIPE_IB, mdata->mdss_qos_map)) { if (!nrt_client) Loading @@ -2071,6 +2070,18 @@ static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, bus_ib_quota = apply_fudge_factor(bus_ib_quota, &mdata->per_pipe_ib_factor); return bus_ib_quota; } static void mdss_mdp_ctl_update_client_vote(struct mdss_data_type *mdata, struct mdss_mdp_perf_params *perf, bool nrt_client, u64 bw_vote) { u64 bus_ab_quota, bus_ib_quota; bus_ab_quota = max(bw_vote, mdata->perf_tune.min_bus_vote); bus_ib_quota = __calc_bus_ib_quota(mdata, perf, nrt_client, bw_vote); bus_ab_quota = apply_fudge_factor(bus_ab_quota, &mdss_res->ab_factor); ATRACE_INT("bus_quota", bus_ib_quota); Loading Loading @@ -2232,6 +2243,46 @@ static bool is_traffic_shaper_enabled(struct mdss_data_type *mdata) return false; } static bool __mdss_mdp_compare_bw( struct mdss_mdp_ctl *ctl, struct mdss_mdp_perf_params *new_perf, struct mdss_mdp_perf_params *old_perf, bool params_changed, bool stop_req) { struct mdss_data_type *mdata = ctl->mdata; bool is_nrt = mdss_mdp_is_nrt_ctl_path(ctl); u64 new_ib = __calc_bus_ib_quota(mdata, new_perf, is_nrt, new_perf->bw_ctl); u64 old_ib = __calc_bus_ib_quota(mdata, old_perf, is_nrt, old_perf->bw_ctl); u64 max_new_bw = max(new_perf->bw_ctl, new_ib); u64 max_old_bw = max(old_perf->bw_ctl, old_ib); bool update_bw = false; /* * three cases for bus bandwidth update. * 1. new bandwidth vote (ab or ib) or writeback output vote * are higher than current vote for update request. * 2. new bandwidth vote or writeback output vote are * lower than current vote at end of commit or stop. * 3. end of writeback/rotator session - last chance to * non-realtime remove vote. */ if ((params_changed && ((max_new_bw > max_old_bw) || /* ab and ib bw */ (new_perf->bw_writeback > old_perf->bw_writeback))) || (!params_changed && ((max_new_bw < max_old_bw) || (new_perf->bw_writeback < old_perf->bw_writeback))) || (stop_req && is_nrt)) update_bw = true; trace_mdp_compare_bw(new_perf->bw_ctl, new_ib, new_perf->bw_writeback, max_new_bw, old_perf->bw_ctl, old_ib, old_perf->bw_writeback, max_old_bw, params_changed, update_bw); return update_bw; } static void mdss_mdp_ctl_perf_update(struct mdss_mdp_ctl *ctl, int params_changed, bool stop_req) { Loading Loading @@ -2267,20 +2318,8 @@ static void mdss_mdp_ctl_perf_update(struct mdss_mdp_ctl *ctl, else if (is_bw_released || params_changed) mdss_mdp_perf_calc_ctl(ctl, new); /* * three cases for bus bandwidth update. * 1. new bandwidth vote or writeback output vote * are higher than current vote for update request. * 2. new bandwidth vote or writeback output vote are * lower than current vote at end of commit or stop. * 3. end of writeback/rotator session - last chance to * non-realtime remove vote. */ if ((params_changed && ((new->bw_ctl > old->bw_ctl) || (new->bw_writeback > old->bw_writeback))) || (!params_changed && ((new->bw_ctl < old->bw_ctl) || (new->bw_writeback < old->bw_writeback))) || (stop_req && mdss_mdp_is_nrt_ctl_path(ctl))) { if (__mdss_mdp_compare_bw(ctl, new, old, params_changed, stop_req)) { pr_debug("c=%d p=%d new_bw=%llu,old_bw=%llu\n", ctl->num, params_changed, new->bw_ctl, Loading
drivers/video/fbdev/msm/mdss_mdp_trace.h +40 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,46 @@ TRACE_EVENT(mdp_perf_update_bus, __entry->ib_quota) ); TRACE_EVENT(mdp_compare_bw, TP_PROTO(unsigned long long new_ab, unsigned long long new_ib, unsigned long long new_wb, unsigned long long new_max, unsigned long long old_ab, unsigned long long old_ib, unsigned long long old_wb, unsigned long long old_max, u32 params_changed, bool update_bw), TP_ARGS(new_ab, new_ib, new_wb, new_max, old_ab, old_ib, old_wb, old_max, params_changed, update_bw), TP_STRUCT__entry( __field(u64, new_ab) __field(u64, new_ib) __field(u64, new_wb) __field(u64, new_max) __field(u64, old_ab) __field(u64, old_ib) __field(u64, old_wb) __field(u64, old_max) __field(u32, params_changed) __field(bool, update_bw) ), TP_fast_assign( __entry->new_ab = new_ab; __entry->new_ib = new_ib; __entry->new_wb = new_wb; __entry->new_max = new_max; __entry->old_ab = old_ab; __entry->old_ib = old_ib; __entry->old_wb = old_wb; __entry->old_max = old_max; __entry->params_changed = params_changed; __entry->update_bw = update_bw; ), TP_printk("[ab,ib,wb,max] new[%llu, %llu, %llu, %llu] old[%llu, %llu, %llu, %llu] parm:%d ret:%d", __entry->new_ab, __entry->new_ib, __entry->new_wb, __entry->new_max, __entry->old_ab, __entry->old_ib, __entry->old_wb, __entry->old_max, __entry->params_changed, __entry->update_bw) ); TRACE_EVENT(mdp_misr_crc, TP_PROTO(u32 block_id, u32 vsync_cnt, u32 crc), TP_ARGS(block_id, vsync_cnt, crc), Loading