On Fri, Jun 09, 2023 at 10:19:09PM +0200, Konrad Dybcio wrote: > 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 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; > + If you move the platform_device_register_data(&rpdev->dev, "icc_smd_rpm", ...) from drivers/soc/qcom/smd-rpm.c to here you can avoid the race completely and drop this API. I think that would be cleaner. And it will likely probe much faster because probe deferral is slow. :) Thanks, Stephan