Commit f45b94ff authored by Varadarajan Narayanan's avatar Varadarajan Narayanan Committed by Bjorn Andersson

interconnect: icc-clk: Specify master/slave ids

Presently, icc-clk driver autogenerates the master and slave ids.
However, devices with multiple nodes on the interconnect could
have other constraints and may not match with the auto generated
node ids.

Hence, modify the driver to use the master/slave ids provided by
the caller instead of auto generating.

Also, update clk-cbf-8996 accordingly.
Acked-by: default avatarGeorgi Djakov <djakov@kernel.org>
Signed-off-by: default avatarVaradarajan Narayanan <quic_varada@quicinc.com>
Link: https://lore.kernel.org/r/20240430064214.2030013-2-quic_varada@quicinc.comSigned-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent b3d57c55
...@@ -226,7 +226,12 @@ static int qcom_msm8996_cbf_icc_register(struct platform_device *pdev, struct cl ...@@ -226,7 +226,12 @@ static int qcom_msm8996_cbf_icc_register(struct platform_device *pdev, struct cl
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct clk *clk = devm_clk_hw_get_clk(dev, cbf_hw, "cbf"); struct clk *clk = devm_clk_hw_get_clk(dev, cbf_hw, "cbf");
const struct icc_clk_data data[] = { const struct icc_clk_data data[] = {
{ .clk = clk, .name = "cbf", }, {
.clk = clk,
.name = "cbf",
.master_id = MASTER_CBF_M4M,
.slave_id = SLAVE_CBF_M4M,
},
}; };
struct icc_provider *provider; struct icc_provider *provider;
......
...@@ -108,7 +108,7 @@ struct icc_provider *icc_clk_register(struct device *dev, ...@@ -108,7 +108,7 @@ struct icc_provider *icc_clk_register(struct device *dev,
for (i = 0, j = 0; i < num_clocks; i++) { for (i = 0, j = 0; i < num_clocks; i++) {
qp->clocks[i].clk = data[i].clk; qp->clocks[i].clk = data[i].clk;
node = icc_node_create(first_id + j); node = icc_node_create(first_id + data[i].master_id);
if (IS_ERR(node)) { if (IS_ERR(node)) {
ret = PTR_ERR(node); ret = PTR_ERR(node);
goto err; goto err;
...@@ -118,10 +118,10 @@ struct icc_provider *icc_clk_register(struct device *dev, ...@@ -118,10 +118,10 @@ struct icc_provider *icc_clk_register(struct device *dev,
node->data = &qp->clocks[i]; node->data = &qp->clocks[i];
icc_node_add(node, provider); icc_node_add(node, provider);
/* link to the next node, slave */ /* link to the next node, slave */
icc_link_create(node, first_id + j + 1); icc_link_create(node, first_id + data[i].slave_id);
onecell->nodes[j++] = node; onecell->nodes[j++] = node;
node = icc_node_create(first_id + j); node = icc_node_create(first_id + data[i].slave_id);
if (IS_ERR(node)) { if (IS_ERR(node)) {
ret = PTR_ERR(node); ret = PTR_ERR(node);
goto err; goto err;
......
...@@ -11,6 +11,8 @@ struct device; ...@@ -11,6 +11,8 @@ struct device;
struct icc_clk_data { struct icc_clk_data {
struct clk *clk; struct clk *clk;
const char *name; const char *name;
unsigned int master_id;
unsigned int slave_id;
}; };
struct icc_provider *icc_clk_register(struct device *dev, struct icc_provider *icc_clk_register(struct device *dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment