mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
interconnect: qcom: Add multiple voter support
Add support for targeting alternate bcm-voters which live under different RSC devices. Change-Id: Ia1ad8a4c6c6b8531f0dae67cc7b22e2faa55c418 Signed-off-by: David Dai <daidavid1@codeaurora.org> Signed-off-by: Georgi Djakov <gdjako@codeaurora.org> Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
This commit is contained in:
parent
a4165efa30
commit
1f6f4c0a2a
|
|
@ -38,7 +38,8 @@ void qcom_icc_pre_aggregate(struct icc_node *node)
|
|||
}
|
||||
|
||||
for (i = 0; i < qn->num_bcms; i++)
|
||||
qcom_icc_bcm_voter_add(qp->voter, qn->bcms[i]);
|
||||
qcom_icc_bcm_voter_add(qp->voters[qn->bcms[i]->voter_idx],
|
||||
qn->bcms[i]);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_icc_pre_aggregate);
|
||||
|
||||
|
|
@ -92,6 +93,7 @@ int qcom_icc_set(struct icc_node *src, struct icc_node *dst)
|
|||
{
|
||||
struct qcom_icc_provider *qp;
|
||||
struct icc_node *node;
|
||||
int i;
|
||||
|
||||
if (!src)
|
||||
node = dst;
|
||||
|
|
@ -100,7 +102,8 @@ int qcom_icc_set(struct icc_node *src, struct icc_node *dst)
|
|||
|
||||
qp = to_qcom_provider(node->provider);
|
||||
|
||||
qcom_icc_bcm_voter_commit(qp->voter);
|
||||
for (i = 0; i < qp->num_voters; i++)
|
||||
qcom_icc_bcm_voter_commit(qp->voters[i]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -247,9 +250,18 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
|||
qp->bcms = desc->bcms;
|
||||
qp->num_bcms = desc->num_bcms;
|
||||
|
||||
qp->voter = of_bcm_voter_get(qp->dev, NULL);
|
||||
if (IS_ERR(qp->voter))
|
||||
return PTR_ERR(qp->voter);
|
||||
qp->num_voters = desc->num_voters;
|
||||
qp->voters = devm_kcalloc(&pdev->dev, qp->num_voters,
|
||||
sizeof(*qp->voters), GFP_KERNEL);
|
||||
|
||||
if (!qp->voters)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < qp->num_voters; i++) {
|
||||
qp->voters[i] = of_bcm_voter_get(qp->dev, desc->voters[i]);
|
||||
if (IS_ERR(qp->voters[i]))
|
||||
return PTR_ERR(qp->voters[i]);
|
||||
}
|
||||
|
||||
qp->regmap = qcom_icc_rpmh_map(pdev, desc);
|
||||
if (IS_ERR(qp->regmap))
|
||||
|
|
|
|||
|
|
@ -26,11 +26,12 @@ struct qcom_icc_provider {
|
|||
struct device *dev;
|
||||
struct qcom_icc_bcm **bcms;
|
||||
size_t num_bcms;
|
||||
struct bcm_voter *voter;
|
||||
struct list_head probe_list;
|
||||
struct regmap *regmap;
|
||||
struct clk_bulk_data *clks;
|
||||
int num_clks;
|
||||
struct bcm_voter **voters;
|
||||
size_t num_voters;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -111,6 +112,7 @@ struct qcom_icc_bcm {
|
|||
struct bcm_db aux_data;
|
||||
struct list_head list;
|
||||
struct list_head ws_list;
|
||||
int voter_idx;
|
||||
size_t num_nodes;
|
||||
struct qcom_icc_node *nodes[];
|
||||
};
|
||||
|
|
@ -126,6 +128,8 @@ struct qcom_icc_desc {
|
|||
size_t num_nodes;
|
||||
struct qcom_icc_bcm **bcms;
|
||||
size_t num_bcms;
|
||||
char **voters;
|
||||
size_t num_voters;
|
||||
};
|
||||
|
||||
#define DEFINE_QNODE(_name, _id, _channels, _buswidth, ...) \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user