interconnect: qcom: bcm-voter: Fix perf_mode handling from LTS merge
The perf_mode flag doesn't exist upstream yet, so the new bcm_aggregate_mask() brought in from the LTS merge doesn't handle it. Add back the perf_mode support. Change-Id: I27d03ceceb55816c1d26735c8b3713fc32bbd9c2 Signed-off-by: Mike Tipton <quic_mdtipton@quicinc.com>
This commit is contained in:
parent
cdd65ba050
commit
cf9bc8d751
1 changed files with 8 additions and 22 deletions
|
|
@ -81,19 +81,17 @@ static void bcm_aggregate_mask(struct qcom_icc_bcm *bcm)
|
|||
node = bcm->nodes[i];
|
||||
|
||||
/* If any vote in this bucket exists, keep the BCM enabled */
|
||||
if (node->sum_avg[bucket] || node->max_peak[bucket]) {
|
||||
bcm->vote_x[bucket] = 0;
|
||||
bcm->vote_y[bucket] = bcm->enable_mask;
|
||||
break;
|
||||
}
|
||||
if (node->sum_avg[bucket] || node->max_peak[bucket])
|
||||
bcm->vote_y[bucket] |= bcm->enable_mask;
|
||||
|
||||
if (node->perf_mode[bucket])
|
||||
bcm->vote_y[bucket] |= bcm->perf_mode_mask;
|
||||
}
|
||||
}
|
||||
|
||||
if (bcm->keepalive) {
|
||||
bcm->vote_x[QCOM_ICC_BUCKET_AMC] = bcm->enable_mask;
|
||||
bcm->vote_x[QCOM_ICC_BUCKET_WAKE] = bcm->enable_mask;
|
||||
bcm->vote_y[QCOM_ICC_BUCKET_AMC] = bcm->enable_mask;
|
||||
bcm->vote_y[QCOM_ICC_BUCKET_WAKE] = bcm->enable_mask;
|
||||
bcm->vote_y[QCOM_ICC_BUCKET_AMC] |= bcm->enable_mask;
|
||||
bcm->vote_y[QCOM_ICC_BUCKET_WAKE] |= bcm->enable_mask;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -103,7 +101,6 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm, bool init)
|
|||
size_t i, bucket;
|
||||
u64 agg_avg[QCOM_ICC_NUM_BUCKETS] = {0};
|
||||
u64 agg_peak[QCOM_ICC_NUM_BUCKETS] = {0};
|
||||
bool perf_mode[QCOM_ICC_NUM_BUCKETS] = {0};
|
||||
u64 temp;
|
||||
|
||||
for (bucket = 0; bucket < QCOM_ICC_NUM_BUCKETS; bucket++) {
|
||||
|
|
@ -116,8 +113,6 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm, bool init)
|
|||
temp = bcm_div(node->max_peak[bucket] * bcm->aux_data.width,
|
||||
node->buswidth);
|
||||
agg_peak[bucket] = max(agg_peak[bucket], temp);
|
||||
|
||||
perf_mode[bucket] |= node->perf_mode[bucket];
|
||||
}
|
||||
|
||||
temp = agg_avg[bucket] * bcm->vote_scale;
|
||||
|
|
@ -125,13 +120,6 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm, bool init)
|
|||
|
||||
temp = agg_peak[bucket] * bcm->vote_scale;
|
||||
bcm->vote_y[bucket] = bcm_div(temp, bcm->aux_data.unit);
|
||||
|
||||
if (bcm->enable_mask && (bcm->vote_x[bucket] || bcm->vote_y[bucket])) {
|
||||
bcm->vote_x[bucket] = 0;
|
||||
bcm->vote_y[bucket] = bcm->enable_mask;
|
||||
if (perf_mode[bucket])
|
||||
bcm->vote_y[bucket] |= bcm->perf_mode_mask;
|
||||
}
|
||||
}
|
||||
|
||||
if (bcm->keepalive || bcm->keepalive_early) {
|
||||
|
|
@ -537,6 +525,7 @@ int qcom_icc_bcm_voter_commit(struct bcm_voter *voter)
|
|||
return -ENODEV;
|
||||
|
||||
mutex_lock(&voter->lock);
|
||||
|
||||
list_for_each_entry(bcm, &voter->commit_list, list) {
|
||||
if (bcm->enable_mask)
|
||||
bcm_aggregate_mask(bcm);
|
||||
|
|
@ -544,9 +533,6 @@ int qcom_icc_bcm_voter_commit(struct bcm_voter *voter)
|
|||
bcm_aggregate(bcm, voter->init);
|
||||
}
|
||||
|
||||
list_for_each_entry(bcm, &voter->commit_list, list)
|
||||
bcm_aggregate(bcm, voter->init);
|
||||
|
||||
if (voter->crm)
|
||||
ret = commit_crm(voter);
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue