Revert "interconnect: qcom: icc-rpmh: Add BCMs to commit list in pre_aggregate"
authorGeorgi Djakov <djakov@kernel.org>
Thu, 12 Aug 2021 06:24:39 +0000 (09:24 +0300)
committerGeorgi Djakov <djakov@kernel.org>
Thu, 12 Aug 2021 06:24:39 +0000 (09:24 +0300)
This reverts commit f84f5b6f72e68bbaeb850b58ac167e4a3a47532a, which is
causing regressions on some platforms, preventing them to boot or do a
clean reboot. This is because the above commit is sending also all the
zero bandwidth requests to turn off any resources that might be enabled
unnecessarily, but currently this may turn off interconnects that are
enabled by default, but with no consumer to keep them on.

Let's revert this for now as some platforms are not ready for such
change yet. In the future we can introduce some _ignore_unused option
that could keep also the unused resources on platforms that have only
partial interconnect support and also add .shutdown callbacks to deal
with disabling the resources in the right order.

Reported-by: Stephen Boyd <swboyd@chromium.org>
Reported-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/CAE-0n52iVgX0JjjnYi=NDg49xP961p=+W5R2bmO+2xwRceFhfA@mail.gmail.com
Signed-off-by: Georgi Djakov <djakov@kernel.org>
drivers/interconnect/qcom/icc-rpmh.c

index 27cc5f03611cbe91e0bf50a903296829ecf81782..f6fae64861ce873bca8105e2dcc1038b81e6901c 100644 (file)
@@ -20,18 +20,13 @@ void qcom_icc_pre_aggregate(struct icc_node *node)
 {
        size_t i;
        struct qcom_icc_node *qn;
-       struct qcom_icc_provider *qp;
 
        qn = node->data;
-       qp = to_qcom_provider(node->provider);
 
        for (i = 0; i < QCOM_ICC_NUM_BUCKETS; i++) {
                qn->sum_avg[i] = 0;
                qn->max_peak[i] = 0;
        }
-
-       for (i = 0; i < qn->num_bcms; i++)
-               qcom_icc_bcm_voter_add(qp->voter, qn->bcms[i]);
 }
 EXPORT_SYMBOL_GPL(qcom_icc_pre_aggregate);
 
@@ -49,8 +44,10 @@ int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
 {
        size_t i;
        struct qcom_icc_node *qn;
+       struct qcom_icc_provider *qp;
 
        qn = node->data;
+       qp = to_qcom_provider(node->provider);
 
        if (!tag)
                tag = QCOM_ICC_TAG_ALWAYS;
@@ -70,6 +67,9 @@ int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
        *agg_avg += avg_bw;
        *agg_peak = max_t(u32, *agg_peak, peak_bw);
 
+       for (i = 0; i < qn->num_bcms; i++)
+               qcom_icc_bcm_voter_add(qp->voter, qn->bcms[i]);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(qcom_icc_aggregate);