mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 19:47:08 +02:00
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 <quic_mdtipton@quicinc.com>
This commit is contained in:
parent
d2d4f6d777
commit
2fbcc44e15
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user