Commit cb88482e authored by Jayant Shekhar's avatar Jayant Shekhar Committed by Rob Clark

drm/msm/dpu: clean up references of DPU custom bus scaling

Since the upstream interconnect bus framework has landed
upstream, the existing references of custom bus scaling
needs to be cleaned up.

Changes in v2:
	- Fixed build error due to partial clean up

Changes in v3:
	- Condense multiple lines into a single line (Sean Paul)

Changes in v4-v7:
	- None
Signed-off-by: default avatarSravanthi Kollukuduru <skolluku@codeaurora.org>
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Reviewed-by: default avatarSean Paul <sean@poorly.run>
parent 01a090c7
...@@ -77,7 +77,6 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms, ...@@ -77,7 +77,6 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms,
struct dpu_core_perf_params *perf) struct dpu_core_perf_params *perf)
{ {
struct dpu_crtc_state *dpu_cstate; struct dpu_crtc_state *dpu_cstate;
int i;
if (!kms || !kms->catalog || !crtc || !state || !perf) { if (!kms || !kms->catalog || !crtc || !state || !perf) {
DPU_ERROR("invalid parameters\n"); DPU_ERROR("invalid parameters\n");
...@@ -88,35 +87,24 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms, ...@@ -88,35 +87,24 @@ static void _dpu_core_perf_calc_crtc(struct dpu_kms *kms,
memset(perf, 0, sizeof(struct dpu_core_perf_params)); memset(perf, 0, sizeof(struct dpu_core_perf_params));
if (!dpu_cstate->bw_control) { if (!dpu_cstate->bw_control) {
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { perf->bw_ctl = kms->catalog->perf.max_bw_high *
perf->bw_ctl[i] = kms->catalog->perf.max_bw_high *
1000ULL; 1000ULL;
perf->max_per_pipe_ib[i] = perf->bw_ctl[i]; perf->max_per_pipe_ib = perf->bw_ctl;
}
perf->core_clk_rate = kms->perf.max_core_clk_rate; perf->core_clk_rate = kms->perf.max_core_clk_rate;
} else if (kms->perf.perf_tune.mode == DPU_PERF_MODE_MINIMUM) { } else if (kms->perf.perf_tune.mode == DPU_PERF_MODE_MINIMUM) {
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { perf->bw_ctl = 0;
perf->bw_ctl[i] = 0; perf->max_per_pipe_ib = 0;
perf->max_per_pipe_ib[i] = 0;
}
perf->core_clk_rate = 0; perf->core_clk_rate = 0;
} else if (kms->perf.perf_tune.mode == DPU_PERF_MODE_FIXED) { } else if (kms->perf.perf_tune.mode == DPU_PERF_MODE_FIXED) {
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { perf->bw_ctl = kms->perf.fix_core_ab_vote;
perf->bw_ctl[i] = kms->perf.fix_core_ab_vote; perf->max_per_pipe_ib = kms->perf.fix_core_ib_vote;
perf->max_per_pipe_ib[i] = kms->perf.fix_core_ib_vote;
}
perf->core_clk_rate = kms->perf.fix_core_clk_rate; perf->core_clk_rate = kms->perf.fix_core_clk_rate;
} }
DPU_DEBUG( DPU_DEBUG(
"crtc=%d clk_rate=%llu core_ib=%llu core_ab=%llu llcc_ib=%llu llcc_ab=%llu mem_ib=%llu mem_ab=%llu\n", "crtc=%d clk_rate=%llu core_ib=%llu core_ab=%llu\n",
crtc->base.id, perf->core_clk_rate, crtc->base.id, perf->core_clk_rate,
perf->max_per_pipe_ib[DPU_CORE_PERF_DATA_BUS_ID_MNOC], perf->max_per_pipe_ib, perf->bw_ctl);
perf->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_MNOC],
perf->max_per_pipe_ib[DPU_CORE_PERF_DATA_BUS_ID_LLCC],
perf->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_LLCC],
perf->max_per_pipe_ib[DPU_CORE_PERF_DATA_BUS_ID_EBI],
perf->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_EBI]);
} }
int dpu_core_perf_crtc_check(struct drm_crtc *crtc, int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
...@@ -129,7 +117,6 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, ...@@ -129,7 +117,6 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
struct dpu_crtc_state *dpu_cstate; struct dpu_crtc_state *dpu_cstate;
struct drm_crtc *tmp_crtc; struct drm_crtc *tmp_crtc;
struct dpu_kms *kms; struct dpu_kms *kms;
int i;
if (!crtc || !state) { if (!crtc || !state) {
DPU_ERROR("invalid crtc\n"); DPU_ERROR("invalid crtc\n");
...@@ -151,31 +138,25 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, ...@@ -151,31 +138,25 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
/* obtain new values */ /* obtain new values */
_dpu_core_perf_calc_crtc(kms, crtc, state, &dpu_cstate->new_perf); _dpu_core_perf_calc_crtc(kms, crtc, state, &dpu_cstate->new_perf);
for (i = DPU_CORE_PERF_DATA_BUS_ID_MNOC; bw_sum_of_intfs = dpu_cstate->new_perf.bw_ctl;
i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { curr_client_type = dpu_crtc_get_client_type(crtc);
bw_sum_of_intfs = dpu_cstate->new_perf.bw_ctl[i];
curr_client_type = dpu_crtc_get_client_type(crtc);
drm_for_each_crtc(tmp_crtc, crtc->dev) { drm_for_each_crtc(tmp_crtc, crtc->dev) {
if (tmp_crtc->enabled && if (tmp_crtc->enabled &&
(dpu_crtc_get_client_type(tmp_crtc) == (dpu_crtc_get_client_type(tmp_crtc) ==
curr_client_type) && curr_client_type) && (tmp_crtc != crtc)) {
(tmp_crtc != crtc)) { struct dpu_crtc_state *tmp_cstate =
struct dpu_crtc_state *tmp_cstate = to_dpu_crtc_state(tmp_crtc->state);
to_dpu_crtc_state(tmp_crtc->state);
DPU_DEBUG("crtc:%d bw:%llu ctrl:%d\n",
DPU_DEBUG("crtc:%d bw:%llu ctrl:%d\n", tmp_crtc->base.id, tmp_cstate->new_perf.bw_ctl,
tmp_crtc->base.id, tmp_cstate->bw_control);
tmp_cstate->new_perf.bw_ctl[i], /*
tmp_cstate->bw_control); * For bw check only use the bw if the
/* * atomic property has been already set
* For bw check only use the bw if the */
* atomic property has been already set if (tmp_cstate->bw_control)
*/ bw_sum_of_intfs += tmp_cstate->new_perf.bw_ctl;
if (tmp_cstate->bw_control)
bw_sum_of_intfs +=
tmp_cstate->new_perf.bw_ctl[i];
}
} }
/* convert bandwidth to kb */ /* convert bandwidth to kb */
...@@ -206,9 +187,9 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc, ...@@ -206,9 +187,9 @@ int dpu_core_perf_crtc_check(struct drm_crtc *crtc,
} }
static int _dpu_core_perf_crtc_update_bus(struct dpu_kms *kms, static int _dpu_core_perf_crtc_update_bus(struct dpu_kms *kms,
struct drm_crtc *crtc, u32 bus_id) struct drm_crtc *crtc)
{ {
struct dpu_core_perf_params perf = { { 0 } }; struct dpu_core_perf_params perf = { 0 };
enum dpu_crtc_client_type curr_client_type enum dpu_crtc_client_type curr_client_type
= dpu_crtc_get_client_type(crtc); = dpu_crtc_get_client_type(crtc);
struct drm_crtc *tmp_crtc; struct drm_crtc *tmp_crtc;
...@@ -221,13 +202,11 @@ static int _dpu_core_perf_crtc_update_bus(struct dpu_kms *kms, ...@@ -221,13 +202,11 @@ static int _dpu_core_perf_crtc_update_bus(struct dpu_kms *kms,
dpu_crtc_get_client_type(tmp_crtc)) { dpu_crtc_get_client_type(tmp_crtc)) {
dpu_cstate = to_dpu_crtc_state(tmp_crtc->state); dpu_cstate = to_dpu_crtc_state(tmp_crtc->state);
perf.max_per_pipe_ib[bus_id] = perf.max_per_pipe_ib = max(perf.max_per_pipe_ib,
max(perf.max_per_pipe_ib[bus_id], dpu_cstate->new_perf.max_per_pipe_ib);
dpu_cstate->new_perf.max_per_pipe_ib[bus_id]);
DPU_DEBUG("crtc=%d bus_id=%d bw=%llu\n", DPU_DEBUG("crtc=%d bw=%llu\n", tmp_crtc->base.id,
tmp_crtc->base.id, bus_id, dpu_cstate->new_perf.bw_ctl);
dpu_cstate->new_perf.bw_ctl[bus_id]);
} }
} }
return ret; return ret;
...@@ -247,7 +226,6 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc) ...@@ -247,7 +226,6 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc)
struct dpu_crtc *dpu_crtc; struct dpu_crtc *dpu_crtc;
struct dpu_crtc_state *dpu_cstate; struct dpu_crtc_state *dpu_cstate;
struct dpu_kms *kms; struct dpu_kms *kms;
int i;
if (!crtc) { if (!crtc) {
DPU_ERROR("invalid crtc\n"); DPU_ERROR("invalid crtc\n");
...@@ -283,10 +261,8 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc) ...@@ -283,10 +261,8 @@ void dpu_core_perf_crtc_release_bw(struct drm_crtc *crtc)
if (kms->perf.enable_bw_release) { if (kms->perf.enable_bw_release) {
trace_dpu_cmd_release_bw(crtc->base.id); trace_dpu_cmd_release_bw(crtc->base.id);
DPU_DEBUG("Release BW crtc=%d\n", crtc->base.id); DPU_DEBUG("Release BW crtc=%d\n", crtc->base.id);
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { dpu_crtc->cur_perf.bw_ctl = 0;
dpu_crtc->cur_perf.bw_ctl[i] = 0; _dpu_core_perf_crtc_update_bus(kms, crtc);
_dpu_core_perf_crtc_update_bus(kms, crtc, i);
}
} }
} }
...@@ -329,11 +305,10 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, ...@@ -329,11 +305,10 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc,
int params_changed, bool stop_req) int params_changed, bool stop_req)
{ {
struct dpu_core_perf_params *new, *old; struct dpu_core_perf_params *new, *old;
int update_bus = 0, update_clk = 0; bool update_bus = false, update_clk = false;
u64 clk_rate = 0; u64 clk_rate = 0;
struct dpu_crtc *dpu_crtc; struct dpu_crtc *dpu_crtc;
struct dpu_crtc_state *dpu_cstate; struct dpu_crtc_state *dpu_cstate;
int i;
struct msm_drm_private *priv; struct msm_drm_private *priv;
struct dpu_kms *kms; struct dpu_kms *kms;
int ret; int ret;
...@@ -360,62 +335,49 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc, ...@@ -360,62 +335,49 @@ int dpu_core_perf_crtc_update(struct drm_crtc *crtc,
new = &dpu_cstate->new_perf; new = &dpu_cstate->new_perf;
if (crtc->enabled && !stop_req) { if (crtc->enabled && !stop_req) {
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { /*
/* * cases for bus bandwidth update.
* cases for bus bandwidth update. * 1. new bandwidth vote - "ab or ib vote" is higher
* 1. new bandwidth vote - "ab or ib vote" is higher * than current vote for update request.
* than current vote for update request. * 2. new bandwidth vote - "ab or ib vote" is lower
* 2. new bandwidth vote - "ab or ib vote" is lower * than current vote at end of commit or stop.
* than current vote at end of commit or stop. */
*/ if ((params_changed && ((new->bw_ctl > old->bw_ctl) ||
if ((params_changed && ((new->bw_ctl[i] > (new->max_per_pipe_ib > old->max_per_pipe_ib))) ||
old->bw_ctl[i]) || (!params_changed && ((new->bw_ctl < old->bw_ctl) ||
(new->max_per_pipe_ib[i] > (new->max_per_pipe_ib < old->max_per_pipe_ib)))) {
old->max_per_pipe_ib[i]))) || DPU_DEBUG("crtc=%d p=%d new_bw=%llu,old_bw=%llu\n",
(!params_changed && ((new->bw_ctl[i] < crtc->base.id, params_changed,
old->bw_ctl[i]) || new->bw_ctl, old->bw_ctl);
(new->max_per_pipe_ib[i] < old->bw_ctl = new->bw_ctl;
old->max_per_pipe_ib[i])))) { old->max_per_pipe_ib = new->max_per_pipe_ib;
DPU_DEBUG( update_bus = true;
"crtc=%d p=%d new_bw=%llu,old_bw=%llu\n",
crtc->base.id, params_changed,
new->bw_ctl[i], old->bw_ctl[i]);
old->bw_ctl[i] = new->bw_ctl[i];
old->max_per_pipe_ib[i] =
new->max_per_pipe_ib[i];
update_bus |= BIT(i);
}
} }
if ((params_changed && if ((params_changed &&
(new->core_clk_rate > old->core_clk_rate)) || (new->core_clk_rate > old->core_clk_rate)) ||
(!params_changed && (!params_changed &&
(new->core_clk_rate < old->core_clk_rate))) { (new->core_clk_rate < old->core_clk_rate))) {
old->core_clk_rate = new->core_clk_rate; old->core_clk_rate = new->core_clk_rate;
update_clk = 1; update_clk = true;
} }
} else { } else {
DPU_DEBUG("crtc=%d disable\n", crtc->base.id); DPU_DEBUG("crtc=%d disable\n", crtc->base.id);
memset(old, 0, sizeof(*old)); memset(old, 0, sizeof(*old));
memset(new, 0, sizeof(*new)); memset(new, 0, sizeof(*new));
update_bus = ~0; update_bus = true;
update_clk = 1; update_clk = true;
} }
trace_dpu_perf_crtc_update(crtc->base.id,
new->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_MNOC], trace_dpu_perf_crtc_update(crtc->base.id, new->bw_ctl,
new->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_LLCC], new->core_clk_rate, stop_req, update_bus, update_clk);
new->bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_EBI],
new->core_clk_rate, stop_req, if (update_bus) {
update_bus, update_clk); ret = _dpu_core_perf_crtc_update_bus(kms, crtc);
if (ret) {
for (i = 0; i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { DPU_ERROR("crtc-%d: failed to update bus bw vote\n",
if (update_bus & BIT(i)) { crtc->base.id);
ret = _dpu_core_perf_crtc_update_bus(kms, crtc, i); return ret;
if (ret) {
DPU_ERROR("crtc-%d: failed to update bw vote for bus-%d\n",
crtc->base.id, i);
return ret;
}
} }
} }
......
...@@ -42,8 +42,8 @@ enum dpu_core_perf_data_bus_id { ...@@ -42,8 +42,8 @@ enum dpu_core_perf_data_bus_id {
* @core_clk_rate: core clock rate request * @core_clk_rate: core clock rate request
*/ */
struct dpu_core_perf_params { struct dpu_core_perf_params {
u64 max_per_pipe_ib[DPU_CORE_PERF_DATA_BUS_ID_MAX]; u64 max_per_pipe_ib;
u64 bw_ctl[DPU_CORE_PERF_DATA_BUS_ID_MAX]; u64 bw_ctl;
u64 core_clk_rate; u64 core_clk_rate;
}; };
......
...@@ -1235,19 +1235,14 @@ static int dpu_crtc_debugfs_state_show(struct seq_file *s, void *v) ...@@ -1235,19 +1235,14 @@ static int dpu_crtc_debugfs_state_show(struct seq_file *s, void *v)
{ {
struct drm_crtc *crtc = (struct drm_crtc *) s->private; struct drm_crtc *crtc = (struct drm_crtc *) s->private;
struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc); struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
int i;
seq_printf(s, "client type: %d\n", dpu_crtc_get_client_type(crtc)); seq_printf(s, "client type: %d\n", dpu_crtc_get_client_type(crtc));
seq_printf(s, "intf_mode: %d\n", dpu_crtc_get_intf_mode(crtc)); seq_printf(s, "intf_mode: %d\n", dpu_crtc_get_intf_mode(crtc));
seq_printf(s, "core_clk_rate: %llu\n", seq_printf(s, "core_clk_rate: %llu\n",
dpu_crtc->cur_perf.core_clk_rate); dpu_crtc->cur_perf.core_clk_rate);
for (i = DPU_CORE_PERF_DATA_BUS_ID_MNOC; seq_printf(s, "bw_ctl: %llu\n", dpu_crtc->cur_perf.bw_ctl);
i < DPU_CORE_PERF_DATA_BUS_ID_MAX; i++) { seq_printf(s, "max_per_pipe_ib: %llu\n",
seq_printf(s, "bw_ctl[%d]: %llu\n", i, dpu_crtc->cur_perf.max_per_pipe_ib);
dpu_crtc->cur_perf.bw_ctl[i]);
seq_printf(s, "max_per_pipe_ib[%d]: %llu\n", i,
dpu_crtc->cur_perf.max_per_pipe_ib[i]);
}
return 0; return 0;
} }
......
...@@ -146,16 +146,12 @@ TRACE_EVENT(dpu_trace_counter, ...@@ -146,16 +146,12 @@ TRACE_EVENT(dpu_trace_counter,
) )
TRACE_EVENT(dpu_perf_crtc_update, TRACE_EVENT(dpu_perf_crtc_update,
TP_PROTO(u32 crtc, u64 bw_ctl_mnoc, u64 bw_ctl_llcc, TP_PROTO(u32 crtc, u64 bw_ctl, u32 core_clk_rate,
u64 bw_ctl_ebi, u32 core_clk_rate, bool stop_req, bool update_bus, bool update_clk),
bool stop_req, u32 update_bus, u32 update_clk), TP_ARGS(crtc, bw_ctl, core_clk_rate, stop_req, update_bus, update_clk),
TP_ARGS(crtc, bw_ctl_mnoc, bw_ctl_llcc, bw_ctl_ebi, core_clk_rate,
stop_req, update_bus, update_clk),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(u32, crtc) __field(u32, crtc)
__field(u64, bw_ctl_mnoc) __field(u64, bw_ctl)
__field(u64, bw_ctl_llcc)
__field(u64, bw_ctl_ebi)
__field(u32, core_clk_rate) __field(u32, core_clk_rate)
__field(bool, stop_req) __field(bool, stop_req)
__field(u32, update_bus) __field(u32, update_bus)
...@@ -163,20 +159,16 @@ TRACE_EVENT(dpu_perf_crtc_update, ...@@ -163,20 +159,16 @@ TRACE_EVENT(dpu_perf_crtc_update,
), ),
TP_fast_assign( TP_fast_assign(
__entry->crtc = crtc; __entry->crtc = crtc;
__entry->bw_ctl_mnoc = bw_ctl_mnoc; __entry->bw_ctl = bw_ctl;
__entry->bw_ctl_llcc = bw_ctl_llcc;
__entry->bw_ctl_ebi = bw_ctl_ebi;
__entry->core_clk_rate = core_clk_rate; __entry->core_clk_rate = core_clk_rate;
__entry->stop_req = stop_req; __entry->stop_req = stop_req;
__entry->update_bus = update_bus; __entry->update_bus = update_bus;
__entry->update_clk = update_clk; __entry->update_clk = update_clk;
), ),
TP_printk( TP_printk(
"crtc=%d bw_mnoc=%llu bw_llcc=%llu bw_ebi=%llu clk_rate=%u stop_req=%d u_bus=%d u_clk=%d", "crtc=%d bw_ctl=%llu clk_rate=%u stop_req=%d u_bus=%d u_clk=%d",
__entry->crtc, __entry->crtc,
__entry->bw_ctl_mnoc, __entry->bw_ctl,
__entry->bw_ctl_llcc,
__entry->bw_ctl_ebi,
__entry->core_clk_rate, __entry->core_clk_rate,
__entry->stop_req, __entry->stop_req,
__entry->update_bus, __entry->update_bus,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment