From 41f99d412dea8f6bed2acbd164afda6cc4edbad6 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Mon, 29 May 2023 11:20:41 +0300
Subject: [PATCH 05/12] icc: qcom: add the notion of not-rate-setting clocks

Some if the NoC/NIU clocks just need to be enabled, without proper rate
being set on them. Add support for handling of such clocks.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 kernel/drivers/interconnect/qcom/icc-rpm.c | 5 ++++-
 kernel/drivers/interconnect/qcom/icc-rpm.h | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/kernel/drivers/interconnect/qcom/icc-rpm.c b/kernel/drivers/interconnect/qcom/icc-rpm.c
index ce5b09dd3a84..4469fb7902e1 100644
--- a/kernel/drivers/interconnect/qcom/icc-rpm.c
+++ b/kernel/drivers/interconnect/qcom/icc-rpm.c
@@ -274,7 +274,7 @@ static int qcom_icc_set(struct icc_node *src, struct icc_node *dst)
 	do_div(rate, qn->buswidth);
 	rate = min_t(u64, rate, LONG_MAX);
 
-	for (i = 0; i < qp->num_clks; i++) {
+	for (i = 0; i < qp->num_rate_clks; i++) {
 		if (qp->bus_clk_rate[i] == rate)
 			continue;
 
@@ -344,6 +344,9 @@ int qnoc_probe(struct platform_device *pdev)
 	for (i = 0; i < cd_num; i++)
 		qp->bus_clks[i].id = cds[i];
 	qp->num_clks = cd_num;
+	qp->num_rate_clks = desc->num_rate_clocks;
+	if (!qp->num_rate_clks && cd_num == 2)
+		qp->num_rate_clks = 2;
 
 	qp->type = desc->type;
 	qp->qos_offset = desc->qos_offset;
diff --git a/kernel/drivers/interconnect/qcom/icc-rpm.h b/kernel/drivers/interconnect/qcom/icc-rpm.h
index 184fc4a12721..ade342b4a57b 100644
--- a/kernel/drivers/interconnect/qcom/icc-rpm.h
+++ b/kernel/drivers/interconnect/qcom/icc-rpm.h
@@ -31,6 +31,7 @@ enum qcom_icc_type {
 struct qcom_icc_provider {
 	struct icc_provider provider;
 	int num_clks;
+	int num_rate_clks;
 	enum qcom_icc_type type;
 	struct regmap *regmap;
 	unsigned int qos_offset;
@@ -85,6 +86,7 @@ struct qcom_icc_desc {
 	size_t num_nodes;
 	const char * const *clocks;
 	size_t num_clocks;
+	size_t num_rate_clocks;
 	bool has_bus_pd;
 	enum qcom_icc_type type;
 	const struct regmap_config *regmap_cfg;
-- 
2.39.2

