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:
Mike Tipton 2023-12-11 14:25:54 -08:00
parent cdd65ba050
commit cf9bc8d751

View file

@ -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