[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230526-topic-smd_icc-v2-4-e5934b07d813@linaro.org>
Date: Fri, 09 Jun 2023 22:19:09 +0200
From: Konrad Dybcio <konrad.dybcio@...aro.org>
To: Andy Gross <agross@...nel.org>,
Bjorn Andersson <andersson@...nel.org>,
Michael Turquette <mturquette@...libre.com>,
Stephen Boyd <sboyd@...nel.org>,
Georgi Djakov <djakov@...nel.org>,
Leo Yan <leo.yan@...aro.org>, Evan Green <evgreen@...omium.org>
Cc: Marijn Suijten <marijn.suijten@...ainline.org>,
linux-arm-msm@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-clk@...r.kernel.org, linux-pm@...r.kernel.org,
Konrad Dybcio <konrad.dybcio@...aro.org>
Subject: [PATCH v2 04/22] clk: qcom: smd-rpm: Export clock scaling
availability
Before we issue a call to RPM through clk_smd_rpm_enable_scaling() the
clock rate requests will not be commited in hardware. This poses a
race threat since we're accessing the bus clocks directly from within
the interconnect framework.
Add a marker to indicate that we're good to go with sending new requests
and export it so that it can be referenced from icc.
Signed-off-by: Konrad Dybcio <konrad.dybcio@...aro.org>
---
drivers/clk/qcom/clk-smd-rpm.c | 9 +++++++++
include/linux/soc/qcom/smd-rpm.h | 2 ++
2 files changed, 11 insertions(+)
diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index 937cb1515968..482fe30ee6f0 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -151,6 +151,7 @@
#define to_clk_smd_rpm(_hw) container_of(_hw, struct clk_smd_rpm, hw)
static struct qcom_smd_rpm *rpmcc_smd_rpm;
+static bool smd_rpm_clk_scaling;
struct clk_smd_rpm {
const int rpm_res_type;
@@ -385,6 +386,12 @@ static unsigned long clk_smd_rpm_recalc_rate(struct clk_hw *hw,
return r->rate;
}
+bool qcom_smd_rpm_scaling_available(void)
+{
+ return smd_rpm_clk_scaling;
+}
+EXPORT_SYMBOL_GPL(qcom_smd_rpm_scaling_available);
+
static int clk_smd_rpm_enable_scaling(void)
{
int ret;
@@ -410,6 +417,8 @@ static int clk_smd_rpm_enable_scaling(void)
return ret;
}
+ smd_rpm_clk_scaling = true;
+
pr_debug("%s: RPM clock scaling is enabled\n", __func__);
return 0;
}
diff --git a/include/linux/soc/qcom/smd-rpm.h b/include/linux/soc/qcom/smd-rpm.h
index 8190878645f9..420f6c79d535 100644
--- a/include/linux/soc/qcom/smd-rpm.h
+++ b/include/linux/soc/qcom/smd-rpm.h
@@ -65,4 +65,6 @@ int qcom_rpm_smd_write(struct qcom_smd_rpm *rpm,
u32 resource_type, u32 resource_id,
void *buf, size_t count);
+bool qcom_smd_rpm_scaling_available(void);
+
#endif
--
2.41.0
Powered by blists - more mailing lists