From: Thierry Reding <thierry.reding@gmail.com>
To: Peter De Schrijver <pdeschrijver@nvidia.com>
Cc: Vince Hsu <vinceh@nvidia.com>, Lucas Stach <dev@lynxeye.de>,
swarren@wwwdotorg.org, gnurou@gmail.com, bskeggs@redhat.com,
martin.peres@free.fr, seven@nimrod-online.com,
samuel.pitoiset@gmail.com, nouveau@lists.freedesktop.org,
linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/11] ARM: tegra: add function to control the GPU rail clamp
Date: Thu, 8 Jan 2015 12:41:54 +0100 [thread overview]
Message-ID: <20150108114153.GL1987@ulmo.nvidia.com> (raw)
In-Reply-To: <20150108093205.GV10073@tbergstrom-lnx.Nvidia.com>
[-- Attachment #1: Type: text/plain, Size: 2942 bytes --]
On Thu, Jan 08, 2015 at 11:32:06AM +0200, Peter De Schrijver wrote:
> > > And specify the dependencies between domains in DT?
> >
> > I think the dependencies could be in the driver. Of course the power
> > domains are per-SoC data, so really shouldn't be in the DTS either (the
> > data is all implied by the compatible value) but there's no good way to
> > get at the clocks and resets without DT, so I think that's a reasonable
> > trade-off.
> >
> > It seems to me like there are only two dependencies:
> >
> > DIS and DISB depend on SOR
> > VE depends on DIS
> >
> > That's according to 5.6.6 "Programming Guide for Power Gating and
> > Ungating" of the Tegra K1 TRM. It also seems like a bunch of modules are
> > part of seemingly unrelated domains. Especially SOR seems to cover a
> > large range of modules (MIPI-CAL, DPAUX, SOR, HDMI, DSI, DSIB and
> > HDA2HDMI).
> >
> > Given that we may want to more fine-grainedly control clocks to save
> > power, don't we need to control clocks and resets within the drivers? I
> > think the runtime PM framework makes sure to call this in the right
> > order, so for suspend, the sequence would be:
> >
> > 1) device->suspend
> > 2) domain->suspend
> >
> > and for resume:
> >
> > 1) domain->resume
> > 2) device->resume
> >
> > But then we're back to square one, namely that the MC flush doesn't work
> > properly, since it needs to be implemented in domain->suspend. Does that
> > mean we can't clock-gate modules? In order to ensure a proper powergate
> > sequence, the domain code would need to clk_enable() the module clock to
> > make sure it stays on during the reset sequence. But if the domain code
> > has a reference to the clock, then the driver can't clock-gate the
> > module anymore by calling clk_disable().
> >
> > Am I missing something?
> >
>
> There's a difference between having a reference and actually enabling the
> clock.
My point was that as long as anyone was keeping a reference the clock
couldn't in fact be turned off.
> the domain powergate method will only be called when the clocks of
> all modules in the domain are off.
No, the power domain will be disabled when all devices in the domain are
idle.
> So the powergate method can then turn them on again, do the module
> resets and client flushes and then disable them again. Same for
> ungate. So I don't see a problem here?
I think that could work, but we'd need to make sure that drivers that
use runtime PM and are connected to a power domain enable clocks only
after taking a runtime PM reference and disable the clocks before they
release that reference.
So to simplify things, maybe all clock handling for drivers should be
moved into runtime PM operations, and whenever the driver needs the
clock enabled it takes a runtime PM reference. That would ensure that
clocks aren't accidentally left on.
Thierry
[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2015-01-08 11:42 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-23 10:39 [PATCH 0/11] Add suspend/resume support for GK20A Vince Hsu
2014-12-23 10:39 ` [PATCH 1/11] ARM: tegra: add function to control the GPU rail clamp Vince Hsu
2014-12-24 13:16 ` Lucas Stach
2014-12-25 2:28 ` Vince Hsu
2014-12-25 20:34 ` Lucas Stach
2014-12-29 2:49 ` Vince Hsu
2014-12-30 16:42 ` Lucas Stach
2015-01-05 6:55 ` Vince Hsu
2015-01-05 15:09 ` Thierry Reding
2015-01-06 2:11 ` Vince Hsu
2015-01-06 11:15 ` Thierry Reding
2015-01-06 12:03 ` Vince Hsu
2015-01-06 13:29 ` Thierry Reding
2015-01-06 13:51 ` Vince Hsu
2015-01-06 14:23 ` Thierry Reding
2015-01-07 10:19 ` Peter De Schrijver
2015-01-07 10:49 ` Vince Hsu
2015-01-07 13:27 ` Thierry Reding
2015-01-07 14:08 ` Peter De Schrijver
2015-01-07 14:28 ` Vince Hsu
2015-01-07 14:48 ` Thierry Reding
2015-01-08 4:25 ` Vince Hsu
2015-01-08 8:03 ` Thierry Reding
2015-01-07 14:12 ` Peter De Schrijver
2015-01-07 14:19 ` Vince Hsu
2015-01-07 15:12 ` Thierry Reding
2015-01-08 4:23 ` Vince Hsu
2015-01-08 9:32 ` Peter De Schrijver
2015-01-08 11:41 ` Thierry Reding [this message]
2015-01-08 12:41 ` Peter De Schrijver
2015-01-08 9:39 ` Peter De Schrijver
2015-01-08 11:44 ` Thierry Reding
2014-12-24 13:52 ` Dmitry Osipenko
2014-12-25 2:05 ` Vince Hsu
2014-12-23 10:39 ` [PATCH 2/11] memory: tegra: add mc flush support Vince Hsu
2015-01-06 14:18 ` Thierry Reding
2015-01-07 10:08 ` Peter De Schrijver
2015-01-07 13:34 ` Thierry Reding
2014-12-23 10:39 ` [PATCH 3/11] memory: tegra: add flush operation for Tegra124 memory clients Vince Hsu
2015-01-06 14:30 ` Thierry Reding
2015-01-06 15:07 ` Vince Hsu
2015-01-06 15:27 ` Thierry Reding
2015-01-06 15:53 ` Vince Hsu
2014-12-23 10:39 ` [PATCH 4/11] ARM: tegra: add mc node for Tegra124 GPU Vince Hsu
2014-12-23 10:39 ` [PATCH nouveau 05/11] platform: switch to the new gpu rail clamping function Vince Hsu
2014-12-23 10:39 ` [PATCH nouveau 06/11] platform: complete the power up/down sequence Vince Hsu
2014-12-24 13:23 ` Lucas Stach
2014-12-25 2:42 ` Vince Hsu
2015-01-05 15:25 ` Thierry Reding
2015-01-06 9:34 ` Vince Hsu
2015-01-06 11:36 ` Thierry Reding
2015-01-06 12:13 ` Vince Hsu
2015-01-06 13:55 ` Thierry Reding
2015-01-06 14:19 ` Vince Hsu
2015-01-06 14:24 ` Thierry Reding
2014-12-23 10:40 ` [PATCH nouveau 07/11] instmem: make nv50_instmem_priv public Vince Hsu
2014-12-23 10:40 ` [PATCH nouveau 08/11] instmem: add dummy support for GK20A Vince Hsu
2014-12-23 16:39 ` [Nouveau] " Ilia Mirkin
2014-12-24 2:44 ` Vince Hsu
2014-12-23 10:40 ` [PATCH nouveau 09/11] drm: export some variable and functions to resue the PM functions Vince Hsu
2014-12-30 2:34 ` [Nouveau] " Emil Velikov
2014-12-30 3:18 ` Vince Hsu
2015-01-05 15:32 ` Thierry Reding
2015-01-05 19:50 ` Alexandre Courbot
2015-01-06 9:36 ` Vince Hsu
2015-01-06 11:49 ` Thierry Reding
2015-01-06 12:27 ` Vince Hsu
2015-01-06 14:37 ` Thierry Reding
2015-01-06 14:44 ` Ilia Mirkin
2015-01-06 14:50 ` Thierry Reding
2015-01-06 15:03 ` Ilia Mirkin
2015-01-06 15:35 ` Thierry Reding
2014-12-23 10:40 ` [PATCH nouveau 10/11] platform: add suspend/resume support Vince Hsu
2014-12-23 10:40 ` [PATCH nouveau 11/11] platform: add PM runtime " Vince Hsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150108114153.GL1987@ulmo.nvidia.com \
--to=thierry.reding@gmail.com \
--cc=bskeggs@redhat.com \
--cc=dev@lynxeye.de \
--cc=gnurou@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=martin.peres@free.fr \
--cc=nouveau@lists.freedesktop.org \
--cc=pdeschrijver@nvidia.com \
--cc=samuel.pitoiset@gmail.com \
--cc=seven@nimrod-online.com \
--cc=swarren@wwwdotorg.org \
--cc=vinceh@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).