On Sat, 4 Mar 2023 at 15:27, Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> wrote: > > From: Shawn Guo <shawn.guo@xxxxxxxxxx> > > The RPM clock enabling state can be found with 'enabled' in struct > clk_smd_rpm. Add .is_enabled hook so that clk_summary in debugfs can > show a correct enabling state for RPM clocks. There is a small problem with this patch: now if the bootloader leaves a clock enabled for some reason and there are no Linux users for that clock, clk_disable_unused_subtree() will consider this clock disabled and will not disable the clock on its own. And at this stage of smd-rpm platforms support I think we better off finding missing clock consumers rather than depending on the bootloader for some of the setup. > > Signed-off-by: Shawn Guo <shawn.guo@xxxxxxxxxx> > [Konrad: rebase] > Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> > --- > drivers/clk/qcom/clk-smd-rpm.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c > index 198886c1b6c8..ecacfbc4a16c 100644 > --- a/drivers/clk/qcom/clk-smd-rpm.c > +++ b/drivers/clk/qcom/clk-smd-rpm.c > @@ -424,18 +424,27 @@ static int clk_smd_rpm_enable_scaling(struct qcom_smd_rpm *rpm) > return 0; > } > > +static int clk_smd_rpm_is_enabled(struct clk_hw *hw) > +{ > + struct clk_smd_rpm *r = to_clk_smd_rpm(hw); > + > + return r->enabled; > +} > + > static const struct clk_ops clk_smd_rpm_ops = { > .prepare = clk_smd_rpm_prepare, > .unprepare = clk_smd_rpm_unprepare, > .set_rate = clk_smd_rpm_set_rate, > .round_rate = clk_smd_rpm_round_rate, > .recalc_rate = clk_smd_rpm_recalc_rate, > + .is_enabled = clk_smd_rpm_is_enabled, > }; > > static const struct clk_ops clk_smd_rpm_branch_ops = { > .prepare = clk_smd_rpm_prepare, > .unprepare = clk_smd_rpm_unprepare, > .recalc_rate = clk_smd_rpm_recalc_rate, > + .is_enabled = clk_smd_rpm_is_enabled, > }; > > DEFINE_CLK_SMD_RPM_BRANCH_A(bi_tcxo, QCOM_SMD_RPM_MISC_CLK, 0, 19200000); > > -- > 2.39.2 > -- With best wishes Dmitry