Thread (31 messages) 31 messages, 6 authors, 2018-07-23

Re: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops

From: Rafael J. Wysocki <hidden>
Date: 2018-07-16 10:23:16
Also in: linux-arm-msm, linux-iommu, linux-pm, lkml

Hi,

On Mon, Jul 16, 2018 at 12:11 PM, Vivek Gautam
[off-list ref] wrote:
HI Rafael,



On 7/16/2018 2:21 PM, Rafael J. Wysocki wrote:
quoted
On Thu, Jul 12, 2018 at 12:57 PM, Vivek Gautam
[off-list ref] wrote:
[cut]
quoted
quoted
quoted
Although, given the PM
subsystem internals, the suspend function wouldn't be called on SMMU
implementation needed power control (since they would have runtime PM
enabled) and on others, it would be called but do nothing (since no
clocks).
quoted
Honestly, I just don't know. :-)

It just looks odd the way it is done.  I think the clock should be
gated during system-wide suspend too, because the system can spend
much more time in a sleep state than in the working state, on average.

And note that you cannot rely on runtime PM to always do it for you,
because it may be disabled at a client device or even blocked by user
space via power/control in sysfs and that shouldn't matter for
system-wide PM.
User space blocking runtime PM through sysfs is a good point. I'm not
100% sure how the PM subsystem deals with that in case of system-wide
suspend. I guess for consistency and safety, we should have the
suspend callback.
Will add the following suspend callback (same as
arm_smmu_runtime_suspend):

  static int __maybe_unused arm_smmu_pm_suspend(struct device *dev)
  {
          struct arm_smmu_device *smmu = dev_get_drvdata(dev);

          clk_bulk_disable(smmu->num_clks, smmu->clks);

          return 0;
  }
I think you also need to check if the clock has already been disabled
by runtime PM.  Otherwise you may end up disabling it twice in a row.

Should I rather call a pm_runtime_put() in suspend callback?
That wouldn't work as runtime PM may be effectively disabled by user
space via sysfs.  That's one of the reasons why you need the extra
system-wide suspend callback in the first place. :-)
Or an expanded form something similar to:
https://elixir.bootlin.com/linux/v4.18-rc5/source/drivers/slimbus/qcom-ctrl.c#L695
Yes, you can do something like that, but be careful to make sure that
the state of the device after system-wide resume is consistent with
its runtime PM status in all cases.
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help