[PATCH 04/20] clk: qcom: smd-rpm: Export clock scaling availability

From: Konrad Dybcio
Date: Tue May 30 2023 - 06:20:37 EST


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@xxxxxxxxxx>
---
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 b63f946e4520..f8f5977408e0 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;
@@ -393,6 +394,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;
@@ -418,6 +425,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.40.1