@@ -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;
}
@@ -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
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@linaro.org> --- drivers/clk/qcom/clk-smd-rpm.c | 9 +++++++++ include/linux/soc/qcom/smd-rpm.h | 2 ++ 2 files changed, 11 insertions(+)