From 2fbcc44e15fb64489c2fc5e623bbedb9719a905f Mon Sep 17 00:00:00 2001 From: Mike Tipton Date: Thu, 24 Mar 2022 16:04:42 -0700 Subject: [PATCH] interconnect: qcom: icc-rpmh: Vote for keepalive BCMs during init Place initial votes for BCMs marked as keepalive during initialization such that we force the BCMs on even in the absence of explicit client votes. Change-Id: I0cf1b2f2a76d5fc094329520ce2a9f1691a3f681 Signed-off-by: Mike Tipton --- drivers/interconnect/qcom/icc-rpmh.c | 19 +++++++++++++++++-- drivers/interconnect/qcom/icc-rpmh.h | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/interconnect/qcom/icc-rpmh.c b/drivers/interconnect/qcom/icc-rpmh.c index a0f4924d7f7a..766b7fe95a90 100644 --- a/drivers/interconnect/qcom/icc-rpmh.c +++ b/drivers/interconnect/qcom/icc-rpmh.c @@ -167,11 +167,14 @@ EXPORT_SYMBOL_GPL(qcom_icc_xlate_extended); * * Return: 0 on success, or an error code otherwise */ -int qcom_icc_bcm_init(struct qcom_icc_bcm *bcm, struct device *dev) +int qcom_icc_bcm_init(struct qcom_icc_provider *qp, struct qcom_icc_bcm *bcm, + struct device *dev) { struct qcom_icc_node *qn; const struct bcm_db *data; + struct bcm_voter *voter; size_t data_count; + int ret; int i; /* BCM is already initialised*/ @@ -214,6 +217,18 @@ int qcom_icc_bcm_init(struct qcom_icc_bcm *bcm, struct device *dev) qn->num_bcms++; } + if (bcm->keepalive || bcm->keepalive_early) { + voter = qp->voters[bcm->voter_idx]; + qcom_icc_bcm_voter_add(voter, bcm); + + ret = qcom_icc_bcm_voter_commit(voter); + if (ret) { + dev_err(dev, "failed to place initial vote for %s\n", + bcm->name); + return ret; + } + } + return 0; } EXPORT_SYMBOL_GPL(qcom_icc_bcm_init); @@ -378,7 +393,7 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) return qp->num_clks; for (i = 0; i < qp->num_bcms; i++) - qcom_icc_bcm_init(qp->bcms[i], dev); + qcom_icc_bcm_init(qp, qp->bcms[i], dev); if (!qp->skip_qos) { ret = enable_qos_deps(qp); diff --git a/drivers/interconnect/qcom/icc-rpmh.h b/drivers/interconnect/qcom/icc-rpmh.h index d3d74a69b7f7..01d52d8eb187 100644 --- a/drivers/interconnect/qcom/icc-rpmh.h +++ b/drivers/interconnect/qcom/icc-rpmh.h @@ -162,7 +162,7 @@ int qcom_icc_aggregate_stub(struct icc_node *node, u32 tag, u32 avg_bw, int qcom_icc_set(struct icc_node *src, struct icc_node *dst); int qcom_icc_set_stub(struct icc_node *src, struct icc_node *dst); struct icc_node_data *qcom_icc_xlate_extended(struct of_phandle_args *spec, void *data); -int qcom_icc_bcm_init(struct qcom_icc_bcm *bcm, struct device *dev); +int qcom_icc_bcm_init(struct qcom_icc_provider *qp, struct qcom_icc_bcm *bcm, struct device *dev); void qcom_icc_pre_aggregate(struct icc_node *node); int qcom_icc_rpmh_probe(struct platform_device *pdev); int qcom_icc_rpmh_remove(struct platform_device *pdev);