On 19.07.2023 10:43, Johan Hovold wrote: > On Tue, Jul 18, 2023 at 09:23:52AM -0700, Bjorn Andersson wrote: >> On Tue, Jul 18, 2023 at 03:26:51PM +0200, Konrad Dybcio wrote: >>> On 18.07.2023 15:20, Johan Hovold wrote: >>>> On Mon, Jul 17, 2023 at 05:19:10PM +0200, Konrad Dybcio wrote: >>>>> Some clocks need to be always-on, but we don't really do anything >>>>> with them, other than calling enable() once and telling Linux they're >>>>> enabled. >>>>> >>>>> Unregister them to save a couple of bytes and, perhaps more >>>>> importantly, allow for runtime suspend of the clock controller device, >>>>> as CLK_IS_CRITICAL prevents the latter. >>>> >>>> But this doesn't sound right. How can you disable a controller which >>>> still has clocks enabled? >>>> >>>> Shouldn't instead these clocks be modelled properly so that they are >>>> only enabled when actually needed? >>> Hm.. We do have clk_branch2_aon_ops, but something still needs to >>> toggle these clocks. >>> >> >> Before we started replacing these clocks with static votes, I handled >> exactly this problem in the turingcc-qcs404 driver by registering the >> ahb clock with a pm_clk_add(). The clock framework will then >> automagically keep the clock enabled around operations, but it will also >> keep the runtime state active as long as the clock is prepared. >> >> As mentioned in an earlier reply today, there's no similarity to this in >> the reset or gdsc code, so we'd need to add that in order to rely on >> such mechanism. > > This reminds me of: > > 4cc47e8add63 ("clk: qcom: gdsc: Remove direct runtime PM calls") > > which recently removed a broken attempt to implement this for gdscs. > > Just stumbled over GENPD_FLAG_PM_CLK which may provide a way forward at > least for genpd (but see below). > >>> I *think* we could leave a permanent vote in probe() without breaking >>> runtime pm! I'll give it a spin bit later.. >>> >> >> Modelling the AHB clock in DT and putting a devm_clk_get_enabled() would >> properly connect the two, and thereby handle probe order between the two >> clock controllers. > > Yeah, this dependency really should be described eventually. > >> But it would prevent the power-domain of the parent provider to ever >> suspending. Using pm_clk_add() this would at least depend on client >> votes. > > IIUC using pm_clk_add() would also prevent the parent from suspending > due to that resume call in clk_prepare(). > > And this mechanism is also used for GENPD_FLAG_PM_CLK... So.. how do we go about solving the issue that this patch tried to address? Konrad