Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-02-05 Thread Alexandre Courbot

On 02/06/2014 01:28 AM, Stephen Warren wrote:

On 01/23/2014 12:39 AM, Alexandre Courbot wrote:

On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren  wrote:

On 01/21/2014 03:10 AM, Alexandre Courbot wrote:

Invoke the do_idle() firmware call before suspending a CPU so that the
underlying firmware (if any) can take necessary action.



diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
b/arch/arm/mach-tegra/cpuidle-tegra114.c



@@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
*dev,

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, >cpu);

+ call_firmware_op(do_idle);
+
   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, >cpu);


Don't you need to have the kernel also *not* do something when entering
idle; doesn't the FW op replace some of the register writes that the
kernel would otherwise be doing?


It seems like the operation is actually to inform the firmware that we
are going to suspend the CPU. Downstream kernel also uses it that way.
But you are right in that we should expect do_idle() to actually
perform the suspend operation. Maybe a prepare_idle() operation should
be added to the firmware interface for this purpose?


That sounds like a reasonable change. Is it easy to plumb in?


I think so. Will post a v2 of this soon.

Thanks,
Alex.


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


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-02-05 Thread Stephen Warren
On 01/23/2014 12:39 AM, Alexandre Courbot wrote:
> On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren  wrote:
>> On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
>>> Invoke the do_idle() firmware call before suspending a CPU so that the
>>> underlying firmware (if any) can take necessary action.
>>
>>> diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
>>> b/arch/arm/mach-tegra/cpuidle-tegra114.c
>>
>>> @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
>>> *dev,
>>>
>>>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, >cpu);
>>>
>>> + call_firmware_op(do_idle);
>>> +
>>>   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
>>>
>>>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, >cpu);
>>
>> Don't you need to have the kernel also *not* do something when entering
>> idle; doesn't the FW op replace some of the register writes that the
>> kernel would otherwise be doing?
> 
> It seems like the operation is actually to inform the firmware that we
> are going to suspend the CPU. Downstream kernel also uses it that way.
> But you are right in that we should expect do_idle() to actually
> perform the suspend operation. Maybe a prepare_idle() operation should
> be added to the firmware interface for this purpose?

That sounds like a reasonable change. Is it easy to plumb in?

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


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-02-05 Thread Stephen Warren
On 01/23/2014 12:39 AM, Alexandre Courbot wrote:
 On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren swar...@wwwdotorg.org wrote:
 On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
 Invoke the do_idle() firmware call before suspending a CPU so that the
 underlying firmware (if any) can take necessary action.

 diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
 b/arch/arm/mach-tegra/cpuidle-tegra114.c

 @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
 *dev,

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, dev-cpu);

 + call_firmware_op(do_idle);
 +
   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, dev-cpu);

 Don't you need to have the kernel also *not* do something when entering
 idle; doesn't the FW op replace some of the register writes that the
 kernel would otherwise be doing?
 
 It seems like the operation is actually to inform the firmware that we
 are going to suspend the CPU. Downstream kernel also uses it that way.
 But you are right in that we should expect do_idle() to actually
 perform the suspend operation. Maybe a prepare_idle() operation should
 be added to the firmware interface for this purpose?

That sounds like a reasonable change. Is it easy to plumb in?

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


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-02-05 Thread Alexandre Courbot

On 02/06/2014 01:28 AM, Stephen Warren wrote:

On 01/23/2014 12:39 AM, Alexandre Courbot wrote:

On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren swar...@wwwdotorg.org wrote:

On 01/21/2014 03:10 AM, Alexandre Courbot wrote:

Invoke the do_idle() firmware call before suspending a CPU so that the
underlying firmware (if any) can take necessary action.



diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
b/arch/arm/mach-tegra/cpuidle-tegra114.c



@@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
*dev,

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, dev-cpu);

+ call_firmware_op(do_idle);
+
   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, dev-cpu);


Don't you need to have the kernel also *not* do something when entering
idle; doesn't the FW op replace some of the register writes that the
kernel would otherwise be doing?


It seems like the operation is actually to inform the firmware that we
are going to suspend the CPU. Downstream kernel also uses it that way.
But you are right in that we should expect do_idle() to actually
perform the suspend operation. Maybe a prepare_idle() operation should
be added to the firmware interface for this purpose?


That sounds like a reasonable change. Is it easy to plumb in?


I think so. Will post a v2 of this soon.

Thanks,
Alex.


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


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-22 Thread Alexandre Courbot
On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren  wrote:
> On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
>> Invoke the do_idle() firmware call before suspending a CPU so that the
>> underlying firmware (if any) can take necessary action.
>
>> diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
>> b/arch/arm/mach-tegra/cpuidle-tegra114.c
>
>> @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
>> *dev,
>>
>>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, >cpu);
>>
>> + call_firmware_op(do_idle);
>> +
>>   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
>>
>>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, >cpu);
>
> Don't you need to have the kernel also *not* do something when entering
> idle; doesn't the FW op replace some of the register writes that the
> kernel would otherwise be doing?

It seems like the operation is actually to inform the firmware that we
are going to suspend the CPU. Downstream kernel also uses it that way.
But you are right in that we should expect do_idle() to actually
perform the suspend operation. Maybe a prepare_idle() operation should
be added to the firmware interface for this purpose?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-22 Thread Stephen Warren
On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
> Invoke the do_idle() firmware call before suspending a CPU so that the
> underlying firmware (if any) can take necessary action.

> diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
> b/arch/arm/mach-tegra/cpuidle-tegra114.c

> @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
> *dev,
>  
>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, >cpu);
>  
> + call_firmware_op(do_idle);
> +
>   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
>  
>   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, >cpu);

Don't you need to have the kernel also *not* do something when entering
idle; doesn't the FW op replace some of the register writes that the
kernel would otherwise be doing?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-22 Thread Stephen Warren
On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
 Invoke the do_idle() firmware call before suspending a CPU so that the
 underlying firmware (if any) can take necessary action.

 diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
 b/arch/arm/mach-tegra/cpuidle-tegra114.c

 @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
 *dev,
  
   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, dev-cpu);
  
 + call_firmware_op(do_idle);
 +
   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
  
   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, dev-cpu);

Don't you need to have the kernel also *not* do something when entering
idle; doesn't the FW op replace some of the register writes that the
kernel would otherwise be doing?
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-22 Thread Alexandre Courbot
On Thu, Jan 23, 2014 at 5:45 AM, Stephen Warren swar...@wwwdotorg.org wrote:
 On 01/21/2014 03:10 AM, Alexandre Courbot wrote:
 Invoke the do_idle() firmware call before suspending a CPU so that the
 underlying firmware (if any) can take necessary action.

 diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
 b/arch/arm/mach-tegra/cpuidle-tegra114.c

 @@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
 *dev,

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, dev-cpu);

 + call_firmware_op(do_idle);
 +
   cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);

   clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, dev-cpu);

 Don't you need to have the kernel also *not* do something when entering
 idle; doesn't the FW op replace some of the register writes that the
 kernel would otherwise be doing?

It seems like the operation is actually to inform the firmware that we
are going to suspend the CPU. Downstream kernel also uses it that way.
But you are right in that we should expect do_idle() to actually
perform the suspend operation. Maybe a prepare_idle() operation should
be added to the firmware interface for this purpose?
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-21 Thread Alexandre Courbot
Invoke the do_idle() firmware call before suspending a CPU so that the
underlying firmware (if any) can take necessary action.

Signed-off-by: Alexandre Courbot 
---
 arch/arm/mach-tegra/cpuidle-tegra114.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
b/arch/arm/mach-tegra/cpuidle-tegra114.c
index e0b87300243d..c42fd41065d2 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra114.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra114.c
@@ -19,6 +19,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
*dev,
 
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, >cpu);
 
+   call_firmware_op(do_idle);
+
cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
 
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, >cpu);
-- 
1.8.5.3

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


[PATCH 5/5] ARM: tegra: cpuidle: use firmware call for power down

2014-01-21 Thread Alexandre Courbot
Invoke the do_idle() firmware call before suspending a CPU so that the
underlying firmware (if any) can take necessary action.

Signed-off-by: Alexandre Courbot acour...@nvidia.com
---
 arch/arm/mach-tegra/cpuidle-tegra114.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c 
b/arch/arm/mach-tegra/cpuidle-tegra114.c
index e0b87300243d..c42fd41065d2 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra114.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra114.c
@@ -19,6 +19,7 @@
 #include linux/cpuidle.h
 #include linux/cpu_pm.h
 #include linux/clockchips.h
+#include asm/firmware.h
 
 #include asm/cpuidle.h
 #include asm/suspend.h
@@ -45,6 +46,8 @@ static int tegra114_idle_power_down(struct cpuidle_device 
*dev,
 
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, dev-cpu);
 
+   call_firmware_op(do_idle);
+
cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
 
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, dev-cpu);
-- 
1.8.5.3

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