Re: [RFC PATCH v4 3/3] PM / clock_ops: add and enable clocks always if !CONFIG_PM_RUNTIME

From: Grygorii Strashko
Date: Fri Nov 07 2014 - 07:46:41 EST


On 11/06/2014 08:09 PM, Dmitry Torokhov wrote:
On Thu, Nov 06, 2014 at 03:51:02PM +0200, Grygorii Strashko wrote:
Device's clocks need to be enabled always at probing time
if !CONFIG_PM_RUNTIME - in that way, device will become accesible
and, later, its clocks can be disabled/enabled during system
suspend/resume by using pm_clk_suspend/pm_clk_resume APIs.

But now, the clocks management code doesn't enable clocks when
clocks are being registered per-device by using pm_clk_add/_clk().
So, update pm_clk_acquire(), which is called from pm_clk_add/_clk(),
to enable clock always if !CONFIG_PM_RUNTIME.

Also, Platform PM domains drivers will not have to add code like below
each time they need to handle the case when !CONFIG_PM_RUNTIME [1 - 3]:

if (!IS_ENABLED(CONFIG_PM_RUNTIME)) {
ret = pm_clk_resume(dev);
if (ret) {
dev_err(dev, "pm_clk_resume failed %d\n", ret);
goto clk_err;
};
}

[1] https://lkml.org/lkml/2014/10/3/306
[2] https://lkml.org/lkml/2014/10/16/305
[3] https://lkml.org/lkml/2014/10/20/249

CC: Santosh Shilimkar <ssantosh@xxxxxxxxxx>
CC: Kevin Hilman <khilman@xxxxxxxxxx>
CC: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
CC: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
CC: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
CC: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
CC: Caesar Wang <caesar.wang@xxxxxxxxxxxxxx>

Signed-off-by: Grygorii Strashko <grygorii.strashko@xxxxxx>
---
Hi,

I marked it as RFC, because:
Generic clock manipulation PM callbacks can be used for any device
for which list of clocks need to be maintained - and it doesn't mean
that this framework need to be always connected to GPD/Runtime PM or
used during suspend resume. Also, for DT-use case - it doesn't perform
any actions (except clk_prepare) on clocks by itself and only
by request from framework's consumer.

For example, it can be reused by Power domain/controller drivers like:
- Rockchip RK3288 PM Domain (https://lkml.org/lkml/2014/11/6/30)
- IMX.6 PU power domain (http://www.spinics.net/lists/arm-kernel/msg360709.html)

to maintain list of clocks for GPD itself and these clocks should not
be enabled by default, because they are used to power on/off Power domain
in a specific way:
- enable all clocks assigned to PD
- power on/off PD
- disable all clocks assigned to PD.
After this patch it will be impossible to reuse Generic clock manipulation PM
callbacks in cases described above.

I'd rather keep it separate and concentrate on making pm_clk* code
working with the power management core. Individual drivers can easily
keep list of their clocks for whatever additional purpose they need
without involving pm_clk* API.


In general, I'm ok with this patch for Keystone 2 proposes,
just added some notes about introduced limitations. And all
current users of pm_clk* APIs will not regress with this patch, because
they will go through different code path if !CONFIG_PM_RUNTIME.

Regards,
-grygorii




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/