linux-tegra.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
To: Joseph Lo <josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: "linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	Colin Cross <ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [PATCH 7/7] ARM: tegra30: cpuidle: add LP2 driver for CPU0
Date: Fri, 12 Oct 2012 15:04:20 -0600	[thread overview]
Message-ID: <507885D4.10604@wwwdotorg.org> (raw)
In-Reply-To: <1350025676.20241.82.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>

On 10/12/2012 01:07 AM, Joseph Lo wrote:
> On Fri, 2012-10-12 at 00:37 +0800, Stephen Warren wrote:
>> On 10/11/2012 05:24 AM, Joseph Lo wrote:
>>> On Wed, 2012-10-10 at 06:49 +0800, Stephen Warren wrote:
>>>> On 10/08/2012 04:26 AM, Joseph Lo wrote:
>>>>> The cpuidle LP2 is a power gating idle mode. It support power gating
>>>>> vdd_cpu rail after all cpu cores in LP2. For Tegra30, the CPU0 must
>>>>> be last one to go into LP2. We need to take care and make sure whole
>>>>> secondary CPUs were in LP2 by checking CPU and power gate status.
>>>>> After that, the CPU0 can go into LP2 safely. Then power gating the
>>>>> CPU rail.
>>>>
>>>>> diff --git a/arch/arm/mach-tegra/cpuidle-tegra30.c b/arch/arm/mach-tegra/cpuidle-tegra30.c
>>>>
>>>>> +static bool tegra30_idle_enter_lp2_cpu_0(struct cpuidle_device *dev,
>>>>> +					 struct cpuidle_driver *drv,
>>>>> +					 int index)
>>>>> +{
>>>>> +	struct cpuidle_state *state = &drv->states[index];
>>>>> +	u32 cpu_on_time = state->exit_latency;
>>>>> +	u32 cpu_off_time = state->target_residency - state->exit_latency;
>>>>> +
>>>>> +	if (num_online_cpus() > 1 && !tegra_cpu_rail_off_ready()) {
>>>>
>>>> Should that be || not &&?
>>>>
>>>> Isn't the "num_online_cpus() > 1" condition effectively checked at the
>>>> call site, i.e. in tegra30_idle_lp2() below via the if (last_cpu) check?
>>>>
>>>
>>> Should be "&&" here.
>>> Because we need to check if there are still multi CPUs online, then we
>>> need to make sure all the secondary CPUs be power gated first. After all
>>> the secondary CPUs been power gated, the CPU0 could go into LP2 and the
>>> CPU rail could be shut off.
>>> If all the secondary CPUs been hot plugged, then the "num_online_cpus()
>>>> 1" would be always false. Then the CPU0 can go into LP2 directly.
>>>
>>> So it was used to check are there multi cpus online or not? It's
>>> difference with the last_cpu check below. The last_cpu was used to check
>>> all the CPUs were in LP2 process or not. If the CPU0 is the last one
>>> went into LP2 process, then it would be true.
>>>
>>> So the point here is. We can avoid to check the power status of the
>>> secodarys CPUs if they be unplugged.
>>
>> OK, so this condition is about ignoring the result of
>> tegra_cpu_rail_off_ready() if there is only 1 CPU online. That makes
>> sense, since we know in that case there cannot be any other CPUs to
>> check if they're in LP2 or not.
>>
>> But what about the case where 2 CPUs are online and 2 offline. In that
>> case, num_online_cpus() > 1, so the call to tegra_cpu_rail_off_ready()
>> is skipped.

Uggh. I'm not thinking straight, so what I said there was backwards.

>> b) If CPUn can't trigger rail-gating, then when CPUn is the last to
>> enter LP2 of the whole complex, it needs to IPI to CPU0 to tell it to
>> rail-gate, and simply power-gate itself. I believe this IPI interaction
>> is exactly what coupled cpuidle is about, isn't it?
> 
> Yes, indeed. Actually, I had tried the coupled cpuidle on Tegra20. I
> knew it a lot. But I met issues when porting it. It looks like a race
> condition and becomes a dead lock caused by IPI missing. Anyway, we can
> talk about it more detail when I try to upstream the coupled cpuidle
> support for Tegra later.

Hmm. That sounds a little churny. Why can't we just use coupled cpuidle
right from the start if the plan is to use it eventually anyway? From
other comments, it sounds like you even already have the code basically
working, but just need to iron out a bug or two?

  parent reply	other threads:[~2012-10-12 21:04 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-08 10:26 [PATCH 0/7] ARM: tegra30: cpuidle: add LP2 support Joseph Lo
     [not found] ` <1349691981-31038-1-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-08 10:26   ` [PATCH 1/7] ARM: tegra: cpuidle: separate cpuidle driver for different chips Joseph Lo
     [not found]     ` <1349691981-31038-2-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-09 22:22       ` Stephen Warren
     [not found]         ` <5074A3C3.1080006-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11  6:42           ` Joseph Lo
2012-10-08 10:26   ` [PATCH 2/7] ARM: tegra: cpuidle: add LP2 resume function Joseph Lo
     [not found]     ` <1349691981-31038-3-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-09 22:29       ` Stephen Warren
     [not found]         ` <5074A559.8030206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11  7:08           ` Joseph Lo
2012-10-08 10:26   ` [PATCH 3/7] ARM: tegra30: cpuidle: add LP2 driver for secondary CPUs Joseph Lo
     [not found]     ` <1349691981-31038-4-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-08 16:35       ` Lorenzo Pieralisi
     [not found]         ` <20121008163504.GC5377-7AyDDHkRsp3ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2012-10-09  4:13           ` Joseph Lo
     [not found]             ` <1349755995.15153.145.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-09  8:38               ` Lorenzo Pieralisi
     [not found]                 ` <20121009083804.GA11840-7AyDDHkRsp3ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2012-10-09  9:18                   ` Joseph Lo
     [not found]                     ` <1349774337.16173.8.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-09  9:42                       ` Lorenzo Pieralisi
2012-10-09 15:55                 ` Antti P Miettinen
2012-10-09 22:38       ` Stephen Warren
     [not found]         ` <5074A74A.8010803-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11  9:15           ` Joseph Lo
     [not found]             ` <1349946918.19413.130.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-11 16:24               ` Stephen Warren
     [not found]                 ` <5076F2AE.6030509-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-12  3:21                   ` Joseph Lo
2012-10-30 22:03                     ` Antti P Miettinen
     [not found]                       ` <87sj8vr517.fsf-sS3DoGclAPwgdTl23f3CEMVPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2012-10-30 22:27                         ` Stephen Warren
     [not found]                           ` <5090544D.3020408-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-31  1:26                             ` Joseph Lo
2012-10-08 10:26   ` [PATCH 4/7] ARM: tegra30: common: enable csite clock Joseph Lo
     [not found]     ` <1349691981-31038-5-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-09 22:38       ` Stephen Warren
     [not found]         ` <5074A77D.9080500-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11 10:28           ` Joseph Lo
2012-10-08 10:26   ` [PATCH 5/7] ARM: tegra30: clocks: add CPU low-power function into tegra_cpu_car_ops Joseph Lo
2012-10-08 10:26   ` [PATCH 6/7] ARM: tegra30: flowctrl: add cpu_suspend_exter/exit function Joseph Lo
2012-10-08 10:26   ` [PATCH 7/7] ARM: tegra30: cpuidle: add LP2 driver for CPU0 Joseph Lo
     [not found]     ` <1349691981-31038-8-git-send-email-josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-10-09 22:49       ` Stephen Warren
     [not found]         ` <5074AA0E.2080508-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11 11:24           ` Joseph Lo
     [not found]             ` <1349954685.19413.207.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-11 16:37               ` Stephen Warren
     [not found]                 ` <5076F5CB.4020200-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11 16:48                   ` Colin Cross
     [not found]                     ` <CAMbhsRScnEaEeyqGz6tfYQMHXaZva4UeHtFY4C9Vvu1MrKXPNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-12  7:11                       ` Joseph Lo
2012-10-12  7:40                       ` Joseph Lo
2012-10-12  7:54                       ` Shawn Guo
     [not found]                         ` <20121012075358.GA4962-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2012-10-12  8:24                           ` Joseph Lo
     [not found]                             ` <1350030264.15495.14.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-12  8:30                               ` Shawn Guo
     [not found]                                 ` <20121012083017.GB4962-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2012-10-12 20:50                                   ` Colin Cross
     [not found]                                     ` <CAMbhsRRGyPB1DvXqkmNpF=hA-3ya5Y+JLV-KY5BW+FX_RoEc9g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-15 16:28                                       ` Use coupled cpuidle on imx6q Shawn Guo
     [not found]                                         ` <20121015162842.GD24393-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2012-10-15 22:58                                           ` Colin Cross
2012-10-12 20:46                               ` [PATCH 7/7] ARM: tegra30: cpuidle: add LP2 driver for CPU0 Colin Cross
2012-10-12  7:07                   ` Joseph Lo
     [not found]                     ` <1350025676.20241.82.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-12 21:04                       ` Stephen Warren [this message]
     [not found]                         ` <507885D4.10604-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-15  7:56                           ` Joseph Lo
     [not found]                             ` <1350287799.23354.23.camel-yx3yKKdKkHfc7b1ADBJPm0n48jw8i0AO@public.gmane.org>
2012-10-15 15:59                               ` Stephen Warren
     [not found]                                 ` <507C32E8.1040701-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-15 22:33                                   ` Colin Cross
     [not found]                                     ` <CAMbhsRQg3-QwSfvuU1n7mUq1QhtU2Q+yHUpZ7PtRYQot=pijng-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-16  8:13                                       ` Peter De Schrijver
2012-10-16  8:06                                   ` Peter De Schrijver
     [not found]                                     ` <20121016080634.GG3196-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2012-10-16 17:03                                       ` Stephen Warren
     [not found]                                         ` <507D936F.70905-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-18  9:24                                           ` Peter De Schrijver
     [not found]                                             ` <20121018092440.GS3196-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2012-10-25 14:08                                               ` Peter De Schrijver
2012-10-09 22:26   ` [PATCH 0/7] ARM: tegra30: cpuidle: add LP2 support Stephen Warren
     [not found]     ` <5074A47B.3050906-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-10-11  6:39       ` Joseph Lo

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=507885D4.10604@wwwdotorg.org \
    --to=swarren-3lzwwm7+weoh9zmkesr00q@public.gmane.org \
    --cc=ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org \
    --cc=josephl-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /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).