]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
interconnect: icc-clk: Specify master/slave ids
authorVaradarajan Narayanan <quic_varada@quicinc.com>
Tue, 30 Apr 2024 06:42:09 +0000 (12:12 +0530)
committerBjorn Andersson <andersson@kernel.org>
Mon, 8 Jul 2024 16:40:57 +0000 (11:40 -0500)
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: Georgi Djakov <djakov@kernel.org>
Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com>
Link: https://lore.kernel.org/r/20240430064214.2030013-2-quic_varada@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/clk/qcom/clk-cbf-8996.c
drivers/interconnect/icc-clk.c
include/linux/interconnect-clk.h

index 76bf523431b858ec78d3c6a9089906c5515bd44e..f5fd1ff9c6c992de23c75234e49e8cc03b553280 100644 (file)
@@ -226,7 +226,12 @@ static int qcom_msm8996_cbf_icc_register(struct platform_device *pdev, struct cl
        struct device *dev = &pdev->dev;
        struct clk *clk = devm_clk_hw_get_clk(dev, cbf_hw, "cbf");
        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;
 
index d787f2ea36d97b0d8bf2474d75779d0514b4725f..2be193fd7d8fe54f86566e9655ecf4b340db4604 100644 (file)
@@ -108,7 +108,7 @@ struct icc_provider *icc_clk_register(struct device *dev,
        for (i = 0, j = 0; i < num_clocks; i++) {
                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)) {
                        ret = PTR_ERR(node);
                        goto err;
@@ -118,10 +118,10 @@ struct icc_provider *icc_clk_register(struct device *dev,
                node->data = &qp->clocks[i];
                icc_node_add(node, provider);
                /* 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;
 
-               node = icc_node_create(first_id + j);
+               node = icc_node_create(first_id + data[i].slave_id);
                if (IS_ERR(node)) {
                        ret = PTR_ERR(node);
                        goto err;
index 0cd80112bea5fb54ed697f042cdf00c79795176e..170898faaacbea75f3d5ddd9c1afb367d758a662 100644 (file)
@@ -11,6 +11,8 @@ struct device;
 struct icc_clk_data {
        struct clk *clk;
        const char *name;
+       unsigned int master_id;
+       unsigned int slave_id;
 };
 
 struct icc_provider *icc_clk_register(struct device *dev,