* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-04-25 12:11 ` Amit Daniel Kachhap
0 siblings, 0 replies; 14+ messages in thread
From: Amit Daniel Kachhap @ 2012-04-25 12:11 UTC (permalink / raw)
To: linux-samsung-soc
Cc: linux-arm-kernel, kgene.kim, linaro-dev, amit.kachhap, patches,
Daniel Lezcano, Robert Lee
This patch enables core cpuidle timekeeping and irq enabling and
remove those redundant parts from the exynos cpuidle drivers
CC: Daniel Lezcano <daniel.lezcano@linaro.org>
CC: Robert Lee <rob.lee@linaro.org>
Signed-off-by: Amit Daniel <amit.kachhap@linaro.org>
---
arch/arm/mach-exynos/cpuidle.c | 53 ++++-----------------------------------
1 files changed, 6 insertions(+), 47 deletions(-)
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
index 33ab4e7..26dac28 100644
--- a/arch/arm/mach-exynos/cpuidle.c
+++ b/arch/arm/mach-exynos/cpuidle.c
@@ -20,6 +20,7 @@
#include <asm/smp_scu.h>
#include <asm/suspend.h>
#include <asm/unified.h>
+#include <asm/cpuidle.h>
#include <mach/regs-pmu.h>
#include <mach/pmu.h>
@@ -34,22 +35,12 @@
#define S5P_CHECK_AFTR 0xFCBA0D10
-static int exynos4_enter_idle(struct cpuidle_device *dev,
- struct cpuidle_driver *drv,
- int index);
static int exynos4_enter_lowpower(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index);
static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
- [0] = {
- .enter = exynos4_enter_idle,
- .exit_latency = 1,
- .target_residency = 100000,
- .flags = CPUIDLE_FLAG_TIME_VALID,
- .name = "C0",
- .desc = "ARM clock gating(WFI)",
- },
+ [0] = ARM_CPUIDLE_WFI_STATE,
[1] = {
.enter = exynos4_enter_lowpower,
.exit_latency = 300,
@@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
static struct cpuidle_driver exynos4_idle_driver = {
- .name = "exynos4_idle",
- .owner = THIS_MODULE,
+ .name = "exynos4_idle",
+ .owner = THIS_MODULE,
+ .en_core_tk_irqen = 1,
};
/* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
@@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index)
{
- struct timeval before, after;
- int idle_time;
unsigned long tmp;
- local_irq_disable();
- do_gettimeofday(&before);
-
exynos4_set_wakeupmask();
/* Set value of power down register for aftr mode */
@@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
/* Clear wakeup state register */
__raw_writel(0x0, S5P_WAKEUP_STAT);
- do_gettimeofday(&after);
-
- local_irq_enable();
- idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
- (after.tv_usec - before.tv_usec);
-
- dev->last_residency = idle_time;
- return index;
-}
-
-static int exynos4_enter_idle(struct cpuidle_device *dev,
- struct cpuidle_driver *drv,
- int index)
-{
- struct timeval before, after;
- int idle_time;
-
- local_irq_disable();
- do_gettimeofday(&before);
-
- cpu_do_idle();
-
- do_gettimeofday(&after);
- local_irq_enable();
- idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
- (after.tv_usec - before.tv_usec);
-
- dev->last_residency = idle_time;
return index;
}
@@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct cpuidle_device *dev,
new_index = drv->safe_state_index;
if (new_index == 0)
- return exynos4_enter_idle(dev, drv, new_index);
+ return arm_cpuidle_simple_enter(dev, drv, new_index);
else
return exynos4_enter_core0_aftr(dev, drv, new_index);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-04-25 12:11 ` Amit Daniel Kachhap
0 siblings, 0 replies; 14+ messages in thread
From: Amit Daniel Kachhap @ 2012-04-25 12:11 UTC (permalink / raw)
To: linux-arm-kernel
This patch enables core cpuidle timekeeping and irq enabling and
remove those redundant parts from the exynos cpuidle drivers
CC: Daniel Lezcano <daniel.lezcano@linaro.org>
CC: Robert Lee <rob.lee@linaro.org>
Signed-off-by: Amit Daniel <amit.kachhap@linaro.org>
---
arch/arm/mach-exynos/cpuidle.c | 53 ++++-----------------------------------
1 files changed, 6 insertions(+), 47 deletions(-)
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
index 33ab4e7..26dac28 100644
--- a/arch/arm/mach-exynos/cpuidle.c
+++ b/arch/arm/mach-exynos/cpuidle.c
@@ -20,6 +20,7 @@
#include <asm/smp_scu.h>
#include <asm/suspend.h>
#include <asm/unified.h>
+#include <asm/cpuidle.h>
#include <mach/regs-pmu.h>
#include <mach/pmu.h>
@@ -34,22 +35,12 @@
#define S5P_CHECK_AFTR 0xFCBA0D10
-static int exynos4_enter_idle(struct cpuidle_device *dev,
- struct cpuidle_driver *drv,
- int index);
static int exynos4_enter_lowpower(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index);
static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
- [0] = {
- .enter = exynos4_enter_idle,
- .exit_latency = 1,
- .target_residency = 100000,
- .flags = CPUIDLE_FLAG_TIME_VALID,
- .name = "C0",
- .desc = "ARM clock gating(WFI)",
- },
+ [0] = ARM_CPUIDLE_WFI_STATE,
[1] = {
.enter = exynos4_enter_lowpower,
.exit_latency = 300,
@@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
static struct cpuidle_driver exynos4_idle_driver = {
- .name = "exynos4_idle",
- .owner = THIS_MODULE,
+ .name = "exynos4_idle",
+ .owner = THIS_MODULE,
+ .en_core_tk_irqen = 1,
};
/* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
@@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index)
{
- struct timeval before, after;
- int idle_time;
unsigned long tmp;
- local_irq_disable();
- do_gettimeofday(&before);
-
exynos4_set_wakeupmask();
/* Set value of power down register for aftr mode */
@@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
/* Clear wakeup state register */
__raw_writel(0x0, S5P_WAKEUP_STAT);
- do_gettimeofday(&after);
-
- local_irq_enable();
- idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
- (after.tv_usec - before.tv_usec);
-
- dev->last_residency = idle_time;
- return index;
-}
-
-static int exynos4_enter_idle(struct cpuidle_device *dev,
- struct cpuidle_driver *drv,
- int index)
-{
- struct timeval before, after;
- int idle_time;
-
- local_irq_disable();
- do_gettimeofday(&before);
-
- cpu_do_idle();
-
- do_gettimeofday(&after);
- local_irq_enable();
- idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
- (after.tv_usec - before.tv_usec);
-
- dev->last_residency = idle_time;
return index;
}
@@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct cpuidle_device *dev,
new_index = drv->safe_state_index;
if (new_index == 0)
- return exynos4_enter_idle(dev, drv, new_index);
+ return arm_cpuidle_simple_enter(dev, drv, new_index);
else
return exynos4_enter_core0_aftr(dev, drv, new_index);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-04-25 12:11 ` Amit Daniel Kachhap
@ 2012-04-25 14:44 ` Daniel Lezcano
-1 siblings, 0 replies; 14+ messages in thread
From: Daniel Lezcano @ 2012-04-25 14:44 UTC (permalink / raw)
To: Amit Daniel Kachhap
Cc: linux-samsung-soc, linux-arm-kernel, kgene.kim, linaro-dev,
patches, Robert Lee
On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
> This patch enables core cpuidle timekeeping and irq enabling and
> remove those redundant parts from the exynos cpuidle drivers
>
> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
> CC: Robert Lee<rob.lee@linaro.org>
> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
> ---
> arch/arm/mach-exynos/cpuidle.c | 53 ++++-----------------------------------
> 1 files changed, 6 insertions(+), 47 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
> index 33ab4e7..26dac28 100644
> --- a/arch/arm/mach-exynos/cpuidle.c
> +++ b/arch/arm/mach-exynos/cpuidle.c
> @@ -20,6 +20,7 @@
> #include<asm/smp_scu.h>
> #include<asm/suspend.h>
> #include<asm/unified.h>
> +#include<asm/cpuidle.h>
> #include<mach/regs-pmu.h>
> #include<mach/pmu.h>
>
> @@ -34,22 +35,12 @@
>
> #define S5P_CHECK_AFTR 0xFCBA0D10
>
> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> - struct cpuidle_driver *drv,
> - int index);
> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> struct cpuidle_driver *drv,
> int index);
>
> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> - [0] = {
> - .enter = exynos4_enter_idle,
> - .exit_latency = 1,
> - .target_residency = 100000,
> - .flags = CPUIDLE_FLAG_TIME_VALID,
> - .name = "C0",
> - .desc = "ARM clock gating(WFI)",
> - },
> + [0] = ARM_CPUIDLE_WFI_STATE,
> [1] = {
> .enter = exynos4_enter_lowpower,
> .exit_latency = 300,
> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>
> static struct cpuidle_driver exynos4_idle_driver = {
> - .name = "exynos4_idle",
> - .owner = THIS_MODULE,
> + .name = "exynos4_idle",
> + .owner = THIS_MODULE,
> + .en_core_tk_irqen = 1,
> };
>
> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
> struct cpuidle_driver *drv,
> int index)
> {
> - struct timeval before, after;
> - int idle_time;
> unsigned long tmp;
>
> - local_irq_disable();
> - do_gettimeofday(&before);
> -
> exynos4_set_wakeupmask();
>
> /* Set value of power down register for aftr mode */
> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
> /* Clear wakeup state register */
> __raw_writel(0x0, S5P_WAKEUP_STAT);
>
> - do_gettimeofday(&after);
> -
> - local_irq_enable();
> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> - (after.tv_usec - before.tv_usec);
> -
> - dev->last_residency = idle_time;
> - return index;
> -}
> -
> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> - struct cpuidle_driver *drv,
> - int index)
> -{
> - struct timeval before, after;
> - int idle_time;
> -
> - local_irq_disable();
> - do_gettimeofday(&before);
> -
> - cpu_do_idle();
> -
> - do_gettimeofday(&after);
> - local_irq_enable();
> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> - (after.tv_usec - before.tv_usec);
> -
> - dev->last_residency = idle_time;
> return index;
> }
>
> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> new_index = drv->safe_state_index;
>
> if (new_index == 0)
> - return exynos4_enter_idle(dev, drv, new_index);
> + return arm_cpuidle_simple_enter(dev, drv, new_index);
> else
> return exynos4_enter_core0_aftr(dev, drv, new_index);
> }
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-04-25 14:44 ` Daniel Lezcano
0 siblings, 0 replies; 14+ messages in thread
From: Daniel Lezcano @ 2012-04-25 14:44 UTC (permalink / raw)
To: linux-arm-kernel
On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
> This patch enables core cpuidle timekeeping and irq enabling and
> remove those redundant parts from the exynos cpuidle drivers
>
> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
> CC: Robert Lee<rob.lee@linaro.org>
> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
> ---
> arch/arm/mach-exynos/cpuidle.c | 53 ++++-----------------------------------
> 1 files changed, 6 insertions(+), 47 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
> index 33ab4e7..26dac28 100644
> --- a/arch/arm/mach-exynos/cpuidle.c
> +++ b/arch/arm/mach-exynos/cpuidle.c
> @@ -20,6 +20,7 @@
> #include<asm/smp_scu.h>
> #include<asm/suspend.h>
> #include<asm/unified.h>
> +#include<asm/cpuidle.h>
> #include<mach/regs-pmu.h>
> #include<mach/pmu.h>
>
> @@ -34,22 +35,12 @@
>
> #define S5P_CHECK_AFTR 0xFCBA0D10
>
> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> - struct cpuidle_driver *drv,
> - int index);
> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> struct cpuidle_driver *drv,
> int index);
>
> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> - [0] = {
> - .enter = exynos4_enter_idle,
> - .exit_latency = 1,
> - .target_residency = 100000,
> - .flags = CPUIDLE_FLAG_TIME_VALID,
> - .name = "C0",
> - .desc = "ARM clock gating(WFI)",
> - },
> + [0] = ARM_CPUIDLE_WFI_STATE,
> [1] = {
> .enter = exynos4_enter_lowpower,
> .exit_latency = 300,
> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>
> static struct cpuidle_driver exynos4_idle_driver = {
> - .name = "exynos4_idle",
> - .owner = THIS_MODULE,
> + .name = "exynos4_idle",
> + .owner = THIS_MODULE,
> + .en_core_tk_irqen = 1,
> };
>
> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
> struct cpuidle_driver *drv,
> int index)
> {
> - struct timeval before, after;
> - int idle_time;
> unsigned long tmp;
>
> - local_irq_disable();
> - do_gettimeofday(&before);
> -
> exynos4_set_wakeupmask();
>
> /* Set value of power down register for aftr mode */
> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct cpuidle_device *dev,
> /* Clear wakeup state register */
> __raw_writel(0x0, S5P_WAKEUP_STAT);
>
> - do_gettimeofday(&after);
> -
> - local_irq_enable();
> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> - (after.tv_usec - before.tv_usec);
> -
> - dev->last_residency = idle_time;
> - return index;
> -}
> -
> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> - struct cpuidle_driver *drv,
> - int index)
> -{
> - struct timeval before, after;
> - int idle_time;
> -
> - local_irq_disable();
> - do_gettimeofday(&before);
> -
> - cpu_do_idle();
> -
> - do_gettimeofday(&after);
> - local_irq_enable();
> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> - (after.tv_usec - before.tv_usec);
> -
> - dev->last_residency = idle_time;
> return index;
> }
>
> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> new_index = drv->safe_state_index;
>
> if (new_index == 0)
> - return exynos4_enter_idle(dev, drv, new_index);
> + return arm_cpuidle_simple_enter(dev, drv, new_index);
> else
> return exynos4_enter_core0_aftr(dev, drv, new_index);
> }
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
--
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-04-25 14:44 ` Daniel Lezcano
@ 2012-04-30 16:43 ` Rob Lee
-1 siblings, 0 replies; 14+ messages in thread
From: Rob Lee @ 2012-04-30 16:43 UTC (permalink / raw)
To: Amit Daniel Kachhap
Cc: Daniel Lezcano, linux-samsung-soc, linux-arm-kernel, kgene.kim,
linaro-dev, patches
On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
>>
>> This patch enables core cpuidle timekeeping and irq enabling and
>> remove those redundant parts from the exynos cpuidle drivers
>>
>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
>> CC: Robert Lee<rob.lee@linaro.org>
>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
>> ---
>> arch/arm/mach-exynos/cpuidle.c | 53
>> ++++-----------------------------------
>> 1 files changed, 6 insertions(+), 47 deletions(-)
>>
>> diff --git a/arch/arm/mach-exynos/cpuidle.c
>> b/arch/arm/mach-exynos/cpuidle.c
>> index 33ab4e7..26dac28 100644
>> --- a/arch/arm/mach-exynos/cpuidle.c
>> +++ b/arch/arm/mach-exynos/cpuidle.c
>> @@ -20,6 +20,7 @@
>> #include<asm/smp_scu.h>
>> #include<asm/suspend.h>
>> #include<asm/unified.h>
>> +#include<asm/cpuidle.h>
>> #include<mach/regs-pmu.h>
>> #include<mach/pmu.h>
>>
>> @@ -34,22 +35,12 @@
>>
>> #define S5P_CHECK_AFTR 0xFCBA0D10
>>
>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>> - struct cpuidle_driver *drv,
>> - int index);
>> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
>> struct cpuidle_driver *drv,
>> int index);
>>
>> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
>> - [0] = {
>> - .enter = exynos4_enter_idle,
>> - .exit_latency = 1,
>> - .target_residency = 100000,
>> - .flags = CPUIDLE_FLAG_TIME_VALID,
>> - .name = "C0",
>> - .desc = "ARM clock gating(WFI)",
>> - },
>> + [0] = ARM_CPUIDLE_WFI_STATE,
>> [1] = {
>> .enter = exynos4_enter_lowpower,
>> .exit_latency = 300,
>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
>> __initdata = {
>> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>>
>> static struct cpuidle_driver exynos4_idle_driver = {
>> - .name = "exynos4_idle",
>> - .owner = THIS_MODULE,
>> + .name = "exynos4_idle",
>> + .owner = THIS_MODULE,
>> + .en_core_tk_irqen = 1,
>> };
>>
>> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
>> cpuidle_device *dev,
>> struct cpuidle_driver *drv,
>> int index)
>> {
>> - struct timeval before, after;
>> - int idle_time;
>> unsigned long tmp;
>>
>> - local_irq_disable();
>> - do_gettimeofday(&before);
>> -
>> exynos4_set_wakeupmask();
>>
>> /* Set value of power down register for aftr mode */
>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
>> cpuidle_device *dev,
>> /* Clear wakeup state register */
>> __raw_writel(0x0, S5P_WAKEUP_STAT);
>>
>> - do_gettimeofday(&after);
>> -
>> - local_irq_enable();
>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>> - (after.tv_usec - before.tv_usec);
>> -
>> - dev->last_residency = idle_time;
>> - return index;
>> -}
>> -
>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>> - struct cpuidle_driver *drv,
>> - int index)
>> -{
>> - struct timeval before, after;
>> - int idle_time;
>> -
>> - local_irq_disable();
>> - do_gettimeofday(&before);
>> -
>> - cpu_do_idle();
>> -
>> - do_gettimeofday(&after);
>> - local_irq_enable();
>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>> - (after.tv_usec - before.tv_usec);
>> -
>> - dev->last_residency = idle_time;
>> return index;
>> }
>>
>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
>> cpuidle_device *dev,
>> new_index = drv->safe_state_index;
>>
>> if (new_index == 0)
>> - return exynos4_enter_idle(dev, drv, new_index);
>> + return arm_cpuidle_simple_enter(dev, drv, new_index);
>> else
>> return exynos4_enter_core0_aftr(dev, drv, new_index);
>> }
Acked-by: Robert Lee <rob.lee@linaro.org>
>
>
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>
> --
> <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
>
> Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-04-30 16:43 ` Rob Lee
0 siblings, 0 replies; 14+ messages in thread
From: Rob Lee @ 2012-04-30 16:43 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
>>
>> This patch enables core cpuidle timekeeping and irq enabling and
>> remove those redundant parts from the exynos cpuidle drivers
>>
>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
>> CC: Robert Lee<rob.lee@linaro.org>
>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
>> ---
>> ?arch/arm/mach-exynos/cpuidle.c | ? 53
>> ++++-----------------------------------
>> ?1 files changed, 6 insertions(+), 47 deletions(-)
>>
>> diff --git a/arch/arm/mach-exynos/cpuidle.c
>> b/arch/arm/mach-exynos/cpuidle.c
>> index 33ab4e7..26dac28 100644
>> --- a/arch/arm/mach-exynos/cpuidle.c
>> +++ b/arch/arm/mach-exynos/cpuidle.c
>> @@ -20,6 +20,7 @@
>> ?#include<asm/smp_scu.h>
>> ?#include<asm/suspend.h>
>> ?#include<asm/unified.h>
>> +#include<asm/cpuidle.h>
>> ?#include<mach/regs-pmu.h>
>> ?#include<mach/pmu.h>
>>
>> @@ -34,22 +35,12 @@
>>
>> ?#define S5P_CHECK_AFTR ? ? ? ? ? ? ? ?0xFCBA0D10
>>
>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>> - ? ? ? ? ? ? ? ? ? ? ? struct cpuidle_driver *drv,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index);
>> ?static int exynos4_enter_lowpower(struct cpuidle_device *dev,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct cpuidle_driver *drv,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int index);
>>
>> ?static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
>> - ? ? ? [0] = {
>> - ? ? ? ? ? ? ? .enter ? ? ? ? ? ? ? ? ?= exynos4_enter_idle,
>> - ? ? ? ? ? ? ? .exit_latency ? ? ? ? ? = 1,
>> - ? ? ? ? ? ? ? .target_residency ? ? ? = 100000,
>> - ? ? ? ? ? ? ? .flags ? ? ? ? ? ? ? ? ?= CPUIDLE_FLAG_TIME_VALID,
>> - ? ? ? ? ? ? ? .name ? ? ? ? ? ? ? ? ? = "C0",
>> - ? ? ? ? ? ? ? .desc ? ? ? ? ? ? ? ? ? = "ARM clock gating(WFI)",
>> - ? ? ? },
>> + ? ? ? [0] = ARM_CPUIDLE_WFI_STATE,
>> ? ? ? ?[1] = {
>> ? ? ? ? ? ? ? ?.enter ? ? ? ? ? ? ? ? ?= exynos4_enter_lowpower,
>> ? ? ? ? ? ? ? ?.exit_latency ? ? ? ? ? = 300,
>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
>> __initdata = {
>> ?static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>>
>> ?static struct cpuidle_driver exynos4_idle_driver = {
>> - ? ? ? .name ? ? ? ? ? = "exynos4_idle",
>> - ? ? ? .owner ? ? ? ? ?= THIS_MODULE,
>> + ? ? ? .name ? ? ? ? ? ? ? ? ? = "exynos4_idle",
>> + ? ? ? .owner ? ? ? ? ? ? ? ? ?= THIS_MODULE,
>> + ? ? ? .en_core_tk_irqen ? ? ? = 1,
>> ?};
>>
>> ?/* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
>> cpuidle_device *dev,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct cpuidle_driver *drv,
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int index)
>> ?{
>> - ? ? ? struct timeval before, after;
>> - ? ? ? int idle_time;
>> ? ? ? ?unsigned long tmp;
>>
>> - ? ? ? local_irq_disable();
>> - ? ? ? do_gettimeofday(&before);
>> -
>> ? ? ? ?exynos4_set_wakeupmask();
>>
>> ? ? ? ?/* Set value of power down register for aftr mode */
>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
>> cpuidle_device *dev,
>> ? ? ? ?/* Clear wakeup state register */
>> ? ? ? ?__raw_writel(0x0, S5P_WAKEUP_STAT);
>>
>> - ? ? ? do_gettimeofday(&after);
>> -
>> - ? ? ? local_irq_enable();
>> - ? ? ? idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>> - ? ? ? ? ? ? ? ? ? (after.tv_usec - before.tv_usec);
>> -
>> - ? ? ? dev->last_residency = idle_time;
>> - ? ? ? return index;
>> -}
>> -
>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct cpuidle_driver *drv,
>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index)
>> -{
>> - ? ? ? struct timeval before, after;
>> - ? ? ? int idle_time;
>> -
>> - ? ? ? local_irq_disable();
>> - ? ? ? do_gettimeofday(&before);
>> -
>> - ? ? ? cpu_do_idle();
>> -
>> - ? ? ? do_gettimeofday(&after);
>> - ? ? ? local_irq_enable();
>> - ? ? ? idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>> - ? ? ? ? ? ? ? ? ? (after.tv_usec - before.tv_usec);
>> -
>> - ? ? ? dev->last_residency = idle_time;
>> ? ? ? ?return index;
>> ?}
>>
>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
>> cpuidle_device *dev,
>> ? ? ? ? ? ? ? ?new_index = drv->safe_state_index;
>>
>> ? ? ? ?if (new_index == 0)
>> - ? ? ? ? ? ? ? return exynos4_enter_idle(dev, drv, new_index);
>> + ? ? ? ? ? ? ? return arm_cpuidle_simple_enter(dev, drv, new_index);
>> ? ? ? ?else
>> ? ? ? ? ? ? ? ?return exynos4_enter_core0_aftr(dev, drv, new_index);
>> ?}
Acked-by: Robert Lee <rob.lee@linaro.org>
>
>
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>
> --
> ?<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>
> Follow Linaro: ?<http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-04-30 16:43 ` Rob Lee
@ 2012-05-08 4:01 ` amit kachhap
-1 siblings, 0 replies; 14+ messages in thread
From: amit kachhap @ 2012-05-08 4:01 UTC (permalink / raw)
To: Kukjin Kim
Cc: Rob Lee, Daniel Lezcano, linux-samsung-soc, linux-arm-kernel,
linaro-dev, patches
Hi Mr Kukjin,
Any comment or update about this patch?
Regards,
Amit Daniel
On Mon, Apr 30, 2012 at 10:13 PM, Rob Lee <rob.lee@linaro.org> wrote:
> On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
> <daniel.lezcano@linaro.org> wrote:
>> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
>>>
>>> This patch enables core cpuidle timekeeping and irq enabling and
>>> remove those redundant parts from the exynos cpuidle drivers
>>>
>>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
>>> CC: Robert Lee<rob.lee@linaro.org>
>>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
>>> ---
>>> arch/arm/mach-exynos/cpuidle.c | 53
>>> ++++-----------------------------------
>>> 1 files changed, 6 insertions(+), 47 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-exynos/cpuidle.c
>>> b/arch/arm/mach-exynos/cpuidle.c
>>> index 33ab4e7..26dac28 100644
>>> --- a/arch/arm/mach-exynos/cpuidle.c
>>> +++ b/arch/arm/mach-exynos/cpuidle.c
>>> @@ -20,6 +20,7 @@
>>> #include<asm/smp_scu.h>
>>> #include<asm/suspend.h>
>>> #include<asm/unified.h>
>>> +#include<asm/cpuidle.h>
>>> #include<mach/regs-pmu.h>
>>> #include<mach/pmu.h>
>>>
>>> @@ -34,22 +35,12 @@
>>>
>>> #define S5P_CHECK_AFTR 0xFCBA0D10
>>>
>>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>>> - struct cpuidle_driver *drv,
>>> - int index);
>>> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
>>> struct cpuidle_driver *drv,
>>> int index);
>>>
>>> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
>>> - [0] = {
>>> - .enter = exynos4_enter_idle,
>>> - .exit_latency = 1,
>>> - .target_residency = 100000,
>>> - .flags = CPUIDLE_FLAG_TIME_VALID,
>>> - .name = "C0",
>>> - .desc = "ARM clock gating(WFI)",
>>> - },
>>> + [0] = ARM_CPUIDLE_WFI_STATE,
>>> [1] = {
>>> .enter = exynos4_enter_lowpower,
>>> .exit_latency = 300,
>>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
>>> __initdata = {
>>> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>>>
>>> static struct cpuidle_driver exynos4_idle_driver = {
>>> - .name = "exynos4_idle",
>>> - .owner = THIS_MODULE,
>>> + .name = "exynos4_idle",
>>> + .owner = THIS_MODULE,
>>> + .en_core_tk_irqen = 1,
>>> };
>>>
>>> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
>>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
>>> cpuidle_device *dev,
>>> struct cpuidle_driver *drv,
>>> int index)
>>> {
>>> - struct timeval before, after;
>>> - int idle_time;
>>> unsigned long tmp;
>>>
>>> - local_irq_disable();
>>> - do_gettimeofday(&before);
>>> -
>>> exynos4_set_wakeupmask();
>>>
>>> /* Set value of power down register for aftr mode */
>>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
>>> cpuidle_device *dev,
>>> /* Clear wakeup state register */
>>> __raw_writel(0x0, S5P_WAKEUP_STAT);
>>>
>>> - do_gettimeofday(&after);
>>> -
>>> - local_irq_enable();
>>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>>> - (after.tv_usec - before.tv_usec);
>>> -
>>> - dev->last_residency = idle_time;
>>> - return index;
>>> -}
>>> -
>>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>>> - struct cpuidle_driver *drv,
>>> - int index)
>>> -{
>>> - struct timeval before, after;
>>> - int idle_time;
>>> -
>>> - local_irq_disable();
>>> - do_gettimeofday(&before);
>>> -
>>> - cpu_do_idle();
>>> -
>>> - do_gettimeofday(&after);
>>> - local_irq_enable();
>>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>>> - (after.tv_usec - before.tv_usec);
>>> -
>>> - dev->last_residency = idle_time;
>>> return index;
>>> }
>>>
>>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
>>> cpuidle_device *dev,
>>> new_index = drv->safe_state_index;
>>>
>>> if (new_index == 0)
>>> - return exynos4_enter_idle(dev, drv, new_index);
>>> + return arm_cpuidle_simple_enter(dev, drv, new_index);
>>> else
>>> return exynos4_enter_core0_aftr(dev, drv, new_index);
>>> }
>
> Acked-by: Robert Lee <rob.lee@linaro.org>
>
>>
>>
>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>
>> --
>> <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
>>
>> Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
>> <http://twitter.com/#!/linaroorg> Twitter |
>> <http://www.linaro.org/linaro-blog/> Blog
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-05-08 4:01 ` amit kachhap
0 siblings, 0 replies; 14+ messages in thread
From: amit kachhap @ 2012-05-08 4:01 UTC (permalink / raw)
To: linux-arm-kernel
Hi Mr Kukjin,
Any comment or update about this patch?
Regards,
Amit Daniel
On Mon, Apr 30, 2012 at 10:13 PM, Rob Lee <rob.lee@linaro.org> wrote:
> On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
> <daniel.lezcano@linaro.org> wrote:
>> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
>>>
>>> This patch enables core cpuidle timekeeping and irq enabling and
>>> remove those redundant parts from the exynos cpuidle drivers
>>>
>>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
>>> CC: Robert Lee<rob.lee@linaro.org>
>>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
>>> ---
>>> ?arch/arm/mach-exynos/cpuidle.c | ? 53
>>> ++++-----------------------------------
>>> ?1 files changed, 6 insertions(+), 47 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-exynos/cpuidle.c
>>> b/arch/arm/mach-exynos/cpuidle.c
>>> index 33ab4e7..26dac28 100644
>>> --- a/arch/arm/mach-exynos/cpuidle.c
>>> +++ b/arch/arm/mach-exynos/cpuidle.c
>>> @@ -20,6 +20,7 @@
>>> ?#include<asm/smp_scu.h>
>>> ?#include<asm/suspend.h>
>>> ?#include<asm/unified.h>
>>> +#include<asm/cpuidle.h>
>>> ?#include<mach/regs-pmu.h>
>>> ?#include<mach/pmu.h>
>>>
>>> @@ -34,22 +35,12 @@
>>>
>>> ?#define S5P_CHECK_AFTR ? ? ? ? ? ? ? ?0xFCBA0D10
>>>
>>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>>> - ? ? ? ? ? ? ? ? ? ? ? struct cpuidle_driver *drv,
>>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index);
>>> ?static int exynos4_enter_lowpower(struct cpuidle_device *dev,
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct cpuidle_driver *drv,
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int index);
>>>
>>> ?static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
>>> - ? ? ? [0] = {
>>> - ? ? ? ? ? ? ? .enter ? ? ? ? ? ? ? ? ?= exynos4_enter_idle,
>>> - ? ? ? ? ? ? ? .exit_latency ? ? ? ? ? = 1,
>>> - ? ? ? ? ? ? ? .target_residency ? ? ? = 100000,
>>> - ? ? ? ? ? ? ? .flags ? ? ? ? ? ? ? ? ?= CPUIDLE_FLAG_TIME_VALID,
>>> - ? ? ? ? ? ? ? .name ? ? ? ? ? ? ? ? ? = "C0",
>>> - ? ? ? ? ? ? ? .desc ? ? ? ? ? ? ? ? ? = "ARM clock gating(WFI)",
>>> - ? ? ? },
>>> + ? ? ? [0] = ARM_CPUIDLE_WFI_STATE,
>>> ? ? ? ?[1] = {
>>> ? ? ? ? ? ? ? ?.enter ? ? ? ? ? ? ? ? ?= exynos4_enter_lowpower,
>>> ? ? ? ? ? ? ? ?.exit_latency ? ? ? ? ? = 300,
>>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
>>> __initdata = {
>>> ?static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
>>>
>>> ?static struct cpuidle_driver exynos4_idle_driver = {
>>> - ? ? ? .name ? ? ? ? ? = "exynos4_idle",
>>> - ? ? ? .owner ? ? ? ? ?= THIS_MODULE,
>>> + ? ? ? .name ? ? ? ? ? ? ? ? ? = "exynos4_idle",
>>> + ? ? ? .owner ? ? ? ? ? ? ? ? ?= THIS_MODULE,
>>> + ? ? ? .en_core_tk_irqen ? ? ? = 1,
>>> ?};
>>>
>>> ?/* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
>>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
>>> cpuidle_device *dev,
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct cpuidle_driver *drv,
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int index)
>>> ?{
>>> - ? ? ? struct timeval before, after;
>>> - ? ? ? int idle_time;
>>> ? ? ? ?unsigned long tmp;
>>>
>>> - ? ? ? local_irq_disable();
>>> - ? ? ? do_gettimeofday(&before);
>>> -
>>> ? ? ? ?exynos4_set_wakeupmask();
>>>
>>> ? ? ? ?/* Set value of power down register for aftr mode */
>>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
>>> cpuidle_device *dev,
>>> ? ? ? ?/* Clear wakeup state register */
>>> ? ? ? ?__raw_writel(0x0, S5P_WAKEUP_STAT);
>>>
>>> - ? ? ? do_gettimeofday(&after);
>>> -
>>> - ? ? ? local_irq_enable();
>>> - ? ? ? idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>>> - ? ? ? ? ? ? ? ? ? (after.tv_usec - before.tv_usec);
>>> -
>>> - ? ? ? dev->last_residency = idle_time;
>>> - ? ? ? return index;
>>> -}
>>> -
>>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
>>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct cpuidle_driver *drv,
>>> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index)
>>> -{
>>> - ? ? ? struct timeval before, after;
>>> - ? ? ? int idle_time;
>>> -
>>> - ? ? ? local_irq_disable();
>>> - ? ? ? do_gettimeofday(&before);
>>> -
>>> - ? ? ? cpu_do_idle();
>>> -
>>> - ? ? ? do_gettimeofday(&after);
>>> - ? ? ? local_irq_enable();
>>> - ? ? ? idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
>>> - ? ? ? ? ? ? ? ? ? (after.tv_usec - before.tv_usec);
>>> -
>>> - ? ? ? dev->last_residency = idle_time;
>>> ? ? ? ?return index;
>>> ?}
>>>
>>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
>>> cpuidle_device *dev,
>>> ? ? ? ? ? ? ? ?new_index = drv->safe_state_index;
>>>
>>> ? ? ? ?if (new_index == 0)
>>> - ? ? ? ? ? ? ? return exynos4_enter_idle(dev, drv, new_index);
>>> + ? ? ? ? ? ? ? return arm_cpuidle_simple_enter(dev, drv, new_index);
>>> ? ? ? ?else
>>> ? ? ? ? ? ? ? ?return exynos4_enter_core0_aftr(dev, drv, new_index);
>>> ?}
>
> Acked-by: Robert Lee <rob.lee@linaro.org>
>
>>
>>
>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>
>> --
>> ?<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs
>>
>> Follow Linaro: ?<http://www.facebook.com/pages/Linaro> Facebook |
>> <http://twitter.com/#!/linaroorg> Twitter |
>> <http://www.linaro.org/linaro-blog/> Blog
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-05-08 4:01 ` amit kachhap
@ 2012-05-09 11:53 ` Kukjin Kim
-1 siblings, 0 replies; 14+ messages in thread
From: Kukjin Kim @ 2012-05-09 11:53 UTC (permalink / raw)
To: 'amit kachhap'
Cc: 'Rob Lee', 'Daniel Lezcano',
linux-samsung-soc, linux-arm-kernel, linaro-dev, patches
amit kachhap wrote:
>
> Hi Mr Kukjin,
>
> Any comment or update about this patch?
>
I'm not sure we don't need to check the idle_time?
Others, looks ok to me.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
> Regards,
> Amit Daniel
>
> On Mon, Apr 30, 2012 at 10:13 PM, Rob Lee <rob.lee@linaro.org> wrote:
> > On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
> > <daniel.lezcano@linaro.org> wrote:
> >> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
> >>>
> >>> This patch enables core cpuidle timekeeping and irq enabling and
> >>> remove those redundant parts from the exynos cpuidle drivers
> >>>
> >>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
> >>> CC: Robert Lee<rob.lee@linaro.org>
> >>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
> >>> ---
> >>> arch/arm/mach-exynos/cpuidle.c | 53
> >>> ++++-----------------------------------
> >>> 1 files changed, 6 insertions(+), 47 deletions(-)
> >>>
> >>> diff --git a/arch/arm/mach-exynos/cpuidle.c
> >>> b/arch/arm/mach-exynos/cpuidle.c
> >>> index 33ab4e7..26dac28 100644
> >>> --- a/arch/arm/mach-exynos/cpuidle.c
> >>> +++ b/arch/arm/mach-exynos/cpuidle.c
> >>> @@ -20,6 +20,7 @@
> >>> #include<asm/smp_scu.h>
> >>> #include<asm/suspend.h>
> >>> #include<asm/unified.h>
> >>> +#include<asm/cpuidle.h>
> >>> #include<mach/regs-pmu.h>
> >>> #include<mach/pmu.h>
> >>>
> >>> @@ -34,22 +35,12 @@
> >>>
> >>> #define S5P_CHECK_AFTR 0xFCBA0D10
> >>>
> >>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> >>> - struct cpuidle_driver *drv,
> >>> - int index);
> >>> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> >>> struct cpuidle_driver *drv,
> >>> int index);
> >>>
> >>> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> >>> - [0] = {
> >>> - .enter = exynos4_enter_idle,
> >>> - .exit_latency = 1,
> >>> - .target_residency = 100000,
> >>> - .flags = CPUIDLE_FLAG_TIME_VALID,
> >>> - .name = "C0",
> >>> - .desc = "ARM clock gating(WFI)",
> >>> - },
> >>> + [0] = ARM_CPUIDLE_WFI_STATE,
> >>> [1] = {
> >>> .enter = exynos4_enter_lowpower,
> >>> .exit_latency = 300,
> >>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
> >>> __initdata = {
> >>> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
> >>>
> >>> static struct cpuidle_driver exynos4_idle_driver = {
> >>> - .name = "exynos4_idle",
> >>> - .owner = THIS_MODULE,
> >>> + .name = "exynos4_idle",
> >>> + .owner = THIS_MODULE,
> >>> + .en_core_tk_irqen = 1,
> >>> };
> >>>
> >>> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
> >>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
> >>> cpuidle_device *dev,
> >>> struct cpuidle_driver *drv,
> >>> int index)
> >>> {
> >>> - struct timeval before, after;
> >>> - int idle_time;
> >>> unsigned long tmp;
> >>>
> >>> - local_irq_disable();
> >>> - do_gettimeofday(&before);
> >>> -
> >>> exynos4_set_wakeupmask();
> >>>
> >>> /* Set value of power down register for aftr mode */
> >>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
> >>> cpuidle_device *dev,
> >>> /* Clear wakeup state register */
> >>> __raw_writel(0x0, S5P_WAKEUP_STAT);
> >>>
> >>> - do_gettimeofday(&after);
> >>> -
> >>> - local_irq_enable();
> >>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> >>> - (after.tv_usec - before.tv_usec);
> >>> -
> >>> - dev->last_residency = idle_time;
> >>> - return index;
> >>> -}
> >>> -
> >>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> >>> - struct cpuidle_driver *drv,
> >>> - int index)
> >>> -{
> >>> - struct timeval before, after;
> >>> - int idle_time;
> >>> -
> >>> - local_irq_disable();
> >>> - do_gettimeofday(&before);
> >>> -
> >>> - cpu_do_idle();
> >>> -
> >>> - do_gettimeofday(&after);
> >>> - local_irq_enable();
> >>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> >>> - (after.tv_usec - before.tv_usec);
> >>> -
> >>> - dev->last_residency = idle_time;
> >>> return index;
> >>> }
> >>>
> >>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
> >>> cpuidle_device *dev,
> >>> new_index = drv->safe_state_index;
> >>>
> >>> if (new_index == 0)
> >>> - return exynos4_enter_idle(dev, drv, new_index);
> >>> + return arm_cpuidle_simple_enter(dev, drv, new_index);
> >>> else
> >>> return exynos4_enter_core0_aftr(dev, drv, new_index);
> >>> }
> >
> > Acked-by: Robert Lee <rob.lee@linaro.org>
> >
> >>
> >>
> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> >>
> >> --
> >> <http://www.linaro.org/> Linaro.org │ Open source software for ARM
> SoCs
> >>
> >> Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
> >> <http://twitter.com/#!/linaroorg> Twitter |
> >> <http://www.linaro.org/linaro-blog/> Blog
> >>
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-samsung-
> soc" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-05-09 11:53 ` Kukjin Kim
0 siblings, 0 replies; 14+ messages in thread
From: Kukjin Kim @ 2012-05-09 11:53 UTC (permalink / raw)
To: linux-arm-kernel
amit kachhap wrote:
>
> Hi Mr Kukjin,
>
> Any comment or update about this patch?
>
I'm not sure we don't need to check the idle_time?
Others, looks ok to me.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
> Regards,
> Amit Daniel
>
> On Mon, Apr 30, 2012 at 10:13 PM, Rob Lee <rob.lee@linaro.org> wrote:
> > On Wed, Apr 25, 2012 at 9:44 AM, Daniel Lezcano
> > <daniel.lezcano@linaro.org> wrote:
> >> On 04/25/2012 02:11 PM, Amit Daniel Kachhap wrote:
> >>>
> >>> This patch enables core cpuidle timekeeping and irq enabling and
> >>> remove those redundant parts from the exynos cpuidle drivers
> >>>
> >>> CC: Daniel Lezcano<daniel.lezcano@linaro.org>
> >>> CC: Robert Lee<rob.lee@linaro.org>
> >>> Signed-off-by: Amit Daniel<amit.kachhap@linaro.org>
> >>> ---
> >>> arch/arm/mach-exynos/cpuidle.c | 53
> >>> ++++-----------------------------------
> >>> 1 files changed, 6 insertions(+), 47 deletions(-)
> >>>
> >>> diff --git a/arch/arm/mach-exynos/cpuidle.c
> >>> b/arch/arm/mach-exynos/cpuidle.c
> >>> index 33ab4e7..26dac28 100644
> >>> --- a/arch/arm/mach-exynos/cpuidle.c
> >>> +++ b/arch/arm/mach-exynos/cpuidle.c
> >>> @@ -20,6 +20,7 @@
> >>> #include<asm/smp_scu.h>
> >>> #include<asm/suspend.h>
> >>> #include<asm/unified.h>
> >>> +#include<asm/cpuidle.h>
> >>> #include<mach/regs-pmu.h>
> >>> #include<mach/pmu.h>
> >>>
> >>> @@ -34,22 +35,12 @@
> >>>
> >>> #define S5P_CHECK_AFTR 0xFCBA0D10
> >>>
> >>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> >>> - struct cpuidle_driver *drv,
> >>> - int index);
> >>> static int exynos4_enter_lowpower(struct cpuidle_device *dev,
> >>> struct cpuidle_driver *drv,
> >>> int index);
> >>>
> >>> static struct cpuidle_state exynos4_cpuidle_set[] __initdata = {
> >>> - [0] = {
> >>> - .enter = exynos4_enter_idle,
> >>> - .exit_latency = 1,
> >>> - .target_residency = 100000,
> >>> - .flags = CPUIDLE_FLAG_TIME_VALID,
> >>> - .name = "C0",
> >>> - .desc = "ARM clock gating(WFI)",
> >>> - },
> >>> + [0] = ARM_CPUIDLE_WFI_STATE,
> >>> [1] = {
> >>> .enter = exynos4_enter_lowpower,
> >>> .exit_latency = 300,
> >>> @@ -63,8 +54,9 @@ static struct cpuidle_state exynos4_cpuidle_set[]
> >>> __initdata = {
> >>> static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);
> >>>
> >>> static struct cpuidle_driver exynos4_idle_driver = {
> >>> - .name = "exynos4_idle",
> >>> - .owner = THIS_MODULE,
> >>> + .name = "exynos4_idle",
> >>> + .owner = THIS_MODULE,
> >>> + .en_core_tk_irqen = 1,
> >>> };
> >>>
> >>> /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
> >>> @@ -103,13 +95,8 @@ static int exynos4_enter_core0_aftr(struct
> >>> cpuidle_device *dev,
> >>> struct cpuidle_driver *drv,
> >>> int index)
> >>> {
> >>> - struct timeval before, after;
> >>> - int idle_time;
> >>> unsigned long tmp;
> >>>
> >>> - local_irq_disable();
> >>> - do_gettimeofday(&before);
> >>> -
> >>> exynos4_set_wakeupmask();
> >>>
> >>> /* Set value of power down register for aftr mode */
> >>> @@ -150,34 +137,6 @@ static int exynos4_enter_core0_aftr(struct
> >>> cpuidle_device *dev,
> >>> /* Clear wakeup state register */
> >>> __raw_writel(0x0, S5P_WAKEUP_STAT);
> >>>
> >>> - do_gettimeofday(&after);
> >>> -
> >>> - local_irq_enable();
> >>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> >>> - (after.tv_usec - before.tv_usec);
> >>> -
> >>> - dev->last_residency = idle_time;
> >>> - return index;
> >>> -}
> >>> -
> >>> -static int exynos4_enter_idle(struct cpuidle_device *dev,
> >>> - struct cpuidle_driver *drv,
> >>> - int index)
> >>> -{
> >>> - struct timeval before, after;
> >>> - int idle_time;
> >>> -
> >>> - local_irq_disable();
> >>> - do_gettimeofday(&before);
> >>> -
> >>> - cpu_do_idle();
> >>> -
> >>> - do_gettimeofday(&after);
> >>> - local_irq_enable();
> >>> - idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
> >>> - (after.tv_usec - before.tv_usec);
> >>> -
> >>> - dev->last_residency = idle_time;
> >>> return index;
> >>> }
> >>>
> >>> @@ -192,7 +151,7 @@ static int exynos4_enter_lowpower(struct
> >>> cpuidle_device *dev,
> >>> new_index = drv->safe_state_index;
> >>>
> >>> if (new_index == 0)
> >>> - return exynos4_enter_idle(dev, drv, new_index);
> >>> + return arm_cpuidle_simple_enter(dev, drv, new_index);
> >>> else
> >>> return exynos4_enter_core0_aftr(dev, drv, new_index);
> >>> }
> >
> > Acked-by: Robert Lee <rob.lee@linaro.org>
> >
> >>
> >>
> >> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> >>
> >> --
> >> <http://www.linaro.org/> Linaro.org ? Open source software for ARM
> SoCs
> >>
> >> Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
> >> <http://twitter.com/#!/linaroorg> Twitter |
> >> <http://www.linaro.org/linaro-blog/> Blog
> >>
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-samsung-
> soc" in
> > the body of a message to majordomo at vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-05-09 11:53 ` Kukjin Kim
@ 2012-05-09 12:09 ` Daniel Lezcano
-1 siblings, 0 replies; 14+ messages in thread
From: Daniel Lezcano @ 2012-05-09 12:09 UTC (permalink / raw)
To: Kukjin Kim
Cc: 'amit kachhap', 'Rob Lee',
linux-samsung-soc, linux-arm-kernel, linaro-dev, patches
On 05/09/2012 01:53 PM, Kukjin Kim wrote:
> amit kachhap wrote:
>>
>> Hi Mr Kukjin,
>>
>> Any comment or update about this patch?
>>
> I'm not sure we don't need to check the idle_time?
> Others, looks ok to me.
Hi,
may be I misunderstood your question but the behavior is not changed
here, just the code is refactored and using a common routine where the
time is computed.
The idle_time computation is done by the cpuidle core now if the
en_core_tk_irqen flag is enabled. That allows to remove a lot of
duplicated code across the cpuidle drivers.
Thanks
-- Daniel
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-05-09 12:09 ` Daniel Lezcano
0 siblings, 0 replies; 14+ messages in thread
From: Daniel Lezcano @ 2012-05-09 12:09 UTC (permalink / raw)
To: linux-arm-kernel
On 05/09/2012 01:53 PM, Kukjin Kim wrote:
> amit kachhap wrote:
>>
>> Hi Mr Kukjin,
>>
>> Any comment or update about this patch?
>>
> I'm not sure we don't need to check the idle_time?
> Others, looks ok to me.
Hi,
may be I misunderstood your question but the behavior is not changed
here, just the code is refactored and using a common routine where the
time is computed.
The idle_time computation is done by the cpuidle core now if the
en_core_tk_irqen flag is enabled. That allows to remove a lot of
duplicated code across the cpuidle drivers.
Thanks
-- Daniel
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
2012-05-09 12:09 ` Daniel Lezcano
@ 2012-05-09 12:18 ` Kukjin Kim
-1 siblings, 0 replies; 14+ messages in thread
From: Kukjin Kim @ 2012-05-09 12:18 UTC (permalink / raw)
To: 'Daniel Lezcano'
Cc: 'amit kachhap', 'Rob Lee',
linux-samsung-soc, linux-arm-kernel, linaro-dev, patches
Daniel Lezcano wrote:
>
> On 05/09/2012 01:53 PM, Kukjin Kim wrote:
> > amit kachhap wrote:
> >>
> >> Hi Mr Kukjin,
> >>
> >> Any comment or update about this patch?
> >>
> > I'm not sure we don't need to check the idle_time?
> > Others, looks ok to me.
>
> Hi,
>
> may be I misunderstood your question but the behavior is not changed
> here, just the code is refactored and using a common routine where the
> time is computed.
>
> The idle_time computation is done by the cpuidle core now if the
> en_core_tk_irqen flag is enabled. That allows to remove a lot of
> duplicated code across the cpuidle drivers.
>
OK, I see and checked. Daniel, thanks.
Amit, this looks ok to me, will apply.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable
@ 2012-05-09 12:18 ` Kukjin Kim
0 siblings, 0 replies; 14+ messages in thread
From: Kukjin Kim @ 2012-05-09 12:18 UTC (permalink / raw)
To: linux-arm-kernel
Daniel Lezcano wrote:
>
> On 05/09/2012 01:53 PM, Kukjin Kim wrote:
> > amit kachhap wrote:
> >>
> >> Hi Mr Kukjin,
> >>
> >> Any comment or update about this patch?
> >>
> > I'm not sure we don't need to check the idle_time?
> > Others, looks ok to me.
>
> Hi,
>
> may be I misunderstood your question but the behavior is not changed
> here, just the code is refactored and using a common routine where the
> time is computed.
>
> The idle_time computation is done by the cpuidle core now if the
> en_core_tk_irqen flag is enabled. That allows to remove a lot of
> duplicated code across the cpuidle drivers.
>
OK, I see and checked. Daniel, thanks.
Amit, this looks ok to me, will apply.
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-05-09 12:18 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-25 12:11 [PATCH] ARM: exynos: Adapt to cpuidle core time keeping and irq enable Amit Daniel Kachhap
2012-04-25 12:11 ` Amit Daniel Kachhap
2012-04-25 14:44 ` Daniel Lezcano
2012-04-25 14:44 ` Daniel Lezcano
2012-04-30 16:43 ` Rob Lee
2012-04-30 16:43 ` Rob Lee
2012-05-08 4:01 ` amit kachhap
2012-05-08 4:01 ` amit kachhap
2012-05-09 11:53 ` Kukjin Kim
2012-05-09 11:53 ` Kukjin Kim
2012-05-09 12:09 ` Daniel Lezcano
2012-05-09 12:09 ` Daniel Lezcano
2012-05-09 12:18 ` Kukjin Kim
2012-05-09 12:18 ` Kukjin Kim
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.