public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer
@ 2014-09-11 12:06 Stefan Agner
  2014-09-11 12:06 ` [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource Stefan Agner
  2014-09-12  7:59 ` [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Shawn Guo
  0 siblings, 2 replies; 7+ messages in thread
From: Stefan Agner @ 2014-09-11 12:06 UTC (permalink / raw)
  To: shawn.guo, kernel
  Cc: festevam, jingchang.lu, linux-arm-kernel, linux-kernel,
	Stefan Agner

Add Global Timer support which is part of the Snoop Control Unit
of the Cortex-A5 processor. This Global Timer is compatible with the
Cortex-A9 implementation. It's a 64-bit timer and is clocked by the
peripheral clock, which is typically 133 or 166MHz on Vybrid.

Signed-off-by: Stefan Agner <stefan@agner.ch>
---
 arch/arm/boot/dts/vf610.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi
index 4d2ec32..a03abf6 100644
--- a/arch/arm/boot/dts/vf610.dtsi
+++ b/arch/arm/boot/dts/vf610.dtsi
@@ -11,6 +11,7 @@
 #include "vf610-pinfunc.h"
 #include <dt-bindings/clock/vf610-clock.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
 
 / {
 	aliases {
@@ -83,6 +84,13 @@
 				      <0x40002100 0x100>;
 			};
 
+			global_timer: global-timer@40002200 {
+				compatible = "arm,cortex-a9-global-timer";
+				reg = <0x40002200 0x20>;
+				interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&clks VF610_CLK_PLATFORM_BUS>;
+			};
+
 			L2: l2-cache@40006000 {
 				compatible = "arm,pl310-cache";
 				reg = <0x40006000 0x1000>;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource
  2014-09-11 12:06 [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Stefan Agner
@ 2014-09-11 12:06 ` Stefan Agner
  2014-09-25  7:50   ` Shawn Guo
  2014-09-12  7:59 ` [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Shawn Guo
  1 sibling, 1 reply; 7+ messages in thread
From: Stefan Agner @ 2014-09-11 12:06 UTC (permalink / raw)
  To: shawn.guo, kernel
  Cc: festevam, jingchang.lu, linux-arm-kernel, linux-kernel,
	Stefan Agner

Use ARM Global Timer as clocksource instead of the PIT timer. This
leaves the PIT timer for other users e.g. the secondary Cortex-M4
core. Also, the Global Timer has double the precission (running at
pheripheral clock compared to IPG clock) and a 64-bit incrementing
counter register.

Signed-off-by: Stefan Agner <stefan@agner.ch>
---
Theoretically we could remove the PIT driver now. But we could also
enable both drivers, but is having two clock source useful for the
Kernel at all?

 arch/arm/mach-imx/Kconfig | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 64161aa..adc77180 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -656,7 +656,8 @@ config SOC_VF610
 	bool "Vybrid Family VF610 support"
 	select ARM_GIC
 	select PINCTRL_VF610
-	select VF_PIT_TIMER
+	select ARM_GLOBAL_TIMER
+	select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
 	select PL310_ERRATA_769419 if CACHE_L2X0
 
 	help
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer
  2014-09-11 12:06 [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Stefan Agner
  2014-09-11 12:06 ` [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource Stefan Agner
@ 2014-09-12  7:59 ` Shawn Guo
  2014-09-19 14:32   ` Stefan Agner
  1 sibling, 1 reply; 7+ messages in thread
From: Shawn Guo @ 2014-09-12  7:59 UTC (permalink / raw)
  To: Stefan Agner
  Cc: kernel, festevam, jingchang.lu, linux-arm-kernel, linux-kernel

On Thu, Sep 11, 2014 at 02:06:14PM +0200, Stefan Agner wrote:
> Add Global Timer support which is part of the Snoop Control Unit
> of the Cortex-A5 processor. This Global Timer is compatible with the
> Cortex-A9 implementation. It's a 64-bit timer and is clocked by the
> peripheral clock, which is typically 133 or 166MHz on Vybrid.
> 
> Signed-off-by: Stefan Agner <stefan@agner.ch>
> ---
>  arch/arm/boot/dts/vf610.dtsi | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi
> index 4d2ec32..a03abf6 100644
> --- a/arch/arm/boot/dts/vf610.dtsi
> +++ b/arch/arm/boot/dts/vf610.dtsi
> @@ -11,6 +11,7 @@
>  #include "vf610-pinfunc.h"
>  #include <dt-bindings/clock/vf610-clock.h>
>  #include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>  
>  / {
>  	aliases {
> @@ -83,6 +84,13 @@
>  				      <0x40002100 0x100>;
>  			};
>  
> +			global_timer: global-timer@40002200 {

I think it's more idiomatic to use the generic name 'timer' for the
node.

Shawn

> +				compatible = "arm,cortex-a9-global-timer";
> +				reg = <0x40002200 0x20>;
> +				interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
> +				clocks = <&clks VF610_CLK_PLATFORM_BUS>;
> +			};
> +
>  			L2: l2-cache@40006000 {
>  				compatible = "arm,pl310-cache";
>  				reg = <0x40006000 0x1000>;
> -- 
> 2.1.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer
  2014-09-12  7:59 ` [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Shawn Guo
@ 2014-09-19 14:32   ` Stefan Agner
  0 siblings, 0 replies; 7+ messages in thread
From: Stefan Agner @ 2014-09-19 14:32 UTC (permalink / raw)
  To: Shawn Guo; +Cc: kernel, festevam, jingchang.lu, linux-arm-kernel, linux-kernel

Am 2014-09-12 09:59, schrieb Shawn Guo:
> On Thu, Sep 11, 2014 at 02:06:14PM +0200, Stefan Agner wrote:
>> Add Global Timer support which is part of the Snoop Control Unit
>> of the Cortex-A5 processor. This Global Timer is compatible with the
>> Cortex-A9 implementation. It's a 64-bit timer and is clocked by the
>> peripheral clock, which is typically 133 or 166MHz on Vybrid.
>>
>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>> ---
>>  arch/arm/boot/dts/vf610.dtsi | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi
>> index 4d2ec32..a03abf6 100644
>> --- a/arch/arm/boot/dts/vf610.dtsi
>> +++ b/arch/arm/boot/dts/vf610.dtsi
>> @@ -11,6 +11,7 @@
>>  #include "vf610-pinfunc.h"
>>  #include <dt-bindings/clock/vf610-clock.h>
>>  #include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>>
>>  / {
>>  	aliases {
>> @@ -83,6 +84,13 @@
>>  				      <0x40002100 0x100>;
>>  			};
>>
>> +			global_timer: global-timer@40002200 {
> 
> I think it's more idiomatic to use the generic name 'timer' for the
> node.

Agree to that. I guess you can change that when you apply it, in case
there are no other objections to this patchset..?

> 
> Shawn
> 
>> +				compatible = "arm,cortex-a9-global-timer";
>> +				reg = <0x40002200 0x20>;
>> +				interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
>> +				clocks = <&clks VF610_CLK_PLATFORM_BUS>;
>> +			};
>> +
>>  			L2: l2-cache@40006000 {
>>  				compatible = "arm,pl310-cache";
>>  				reg = <0x40006000 0x1000>;
>> --
>> 2.1.0
>>


--
Stefan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource
  2014-09-11 12:06 ` [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource Stefan Agner
@ 2014-09-25  7:50   ` Shawn Guo
  2014-09-25  8:25     ` Stefan Agner
  0 siblings, 1 reply; 7+ messages in thread
From: Shawn Guo @ 2014-09-25  7:50 UTC (permalink / raw)
  To: Stefan Agner
  Cc: kernel, festevam, jingchang.lu, linux-arm-kernel, linux-kernel

On Thu, Sep 11, 2014 at 02:06:15PM +0200, Stefan Agner wrote:
> Use ARM Global Timer as clocksource instead of the PIT timer. This
> leaves the PIT timer for other users e.g. the secondary Cortex-M4
> core. Also, the Global Timer has double the precission (running at
> pheripheral clock compared to IPG clock) and a 64-bit incrementing
> counter register.

I just think of one thing.  Will this change cause a problem of the low
power idle support in case we want to power down ARM core in there?

Shawn

> 
> Signed-off-by: Stefan Agner <stefan@agner.ch>
> ---
> Theoretically we could remove the PIT driver now. But we could also
> enable both drivers, but is having two clock source useful for the
> Kernel at all?
> 
>  arch/arm/mach-imx/Kconfig | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 64161aa..adc77180 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -656,7 +656,8 @@ config SOC_VF610
>  	bool "Vybrid Family VF610 support"
>  	select ARM_GIC
>  	select PINCTRL_VF610
> -	select VF_PIT_TIMER
> +	select ARM_GLOBAL_TIMER
> +	select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
>  	select PL310_ERRATA_769419 if CACHE_L2X0
>  
>  	help
> -- 
> 2.1.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource
  2014-09-25  7:50   ` Shawn Guo
@ 2014-09-25  8:25     ` Stefan Agner
  2014-09-25 15:10       ` Shawn Guo
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Agner @ 2014-09-25  8:25 UTC (permalink / raw)
  To: Shawn Guo; +Cc: kernel, festevam, jingchang.lu, linux-arm-kernel, linux-kernel

Am 2014-09-25 09:50, schrieb Shawn Guo:
> On Thu, Sep 11, 2014 at 02:06:15PM +0200, Stefan Agner wrote:
>> Use ARM Global Timer as clocksource instead of the PIT timer. This
>> leaves the PIT timer for other users e.g. the secondary Cortex-M4
>> core. Also, the Global Timer has double the precission (running at
>> pheripheral clock compared to IPG clock) and a 64-bit incrementing
>> counter register.
> 
> I just think of one thing.  Will this change cause a problem of the low
> power idle support in case we want to power down ARM core in there?
> 

I'm not sure what really happend to the Global Timer when we power down
the ARM core. We use a clocksoure of different power domain now, so it
might make a difference in low power modes, but I think it will improve
things: The PIT timer's clock currently have been clock gated even in
STOP mode, which does not power down the ARM core. And it would be shut
down completely in LP-Mode 1-3 which since PIT is part of the big power
domain 1. 

But AFAIK, its not required that the clocksource is running while in low
power modes. The time should just not jump, and if the timers registers
are lost during suspend, a proper suspend/resume support need to be
implemented. 


> 
>>
>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>> ---
>> Theoretically we could remove the PIT driver now. But we could also
>> enable both drivers, but is having two clock source useful for the
>> Kernel at all?
>>
>>  arch/arm/mach-imx/Kconfig | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
>> index 64161aa..adc77180 100644
>> --- a/arch/arm/mach-imx/Kconfig
>> +++ b/arch/arm/mach-imx/Kconfig
>> @@ -656,7 +656,8 @@ config SOC_VF610
>>  	bool "Vybrid Family VF610 support"
>>  	select ARM_GIC
>>  	select PINCTRL_VF610
>> -	select VF_PIT_TIMER
>> +	select ARM_GLOBAL_TIMER
>> +	select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
>>  	select PL310_ERRATA_769419 if CACHE_L2X0
>>
>>  	help
>> --
>> 2.1.0
>>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource
  2014-09-25  8:25     ` Stefan Agner
@ 2014-09-25 15:10       ` Shawn Guo
  0 siblings, 0 replies; 7+ messages in thread
From: Shawn Guo @ 2014-09-25 15:10 UTC (permalink / raw)
  To: Stefan Agner
  Cc: kernel, festevam, jingchang.lu, linux-arm-kernel, linux-kernel

On Thu, Sep 25, 2014 at 10:25:13AM +0200, Stefan Agner wrote:
> Am 2014-09-25 09:50, schrieb Shawn Guo:
> > On Thu, Sep 11, 2014 at 02:06:15PM +0200, Stefan Agner wrote:
> >> Use ARM Global Timer as clocksource instead of the PIT timer. This
> >> leaves the PIT timer for other users e.g. the secondary Cortex-M4
> >> core. Also, the Global Timer has double the precission (running at
> >> pheripheral clock compared to IPG clock) and a 64-bit incrementing
> >> counter register.
> > 
> > I just think of one thing.  Will this change cause a problem of the low
> > power idle support in case we want to power down ARM core in there?
> > 
> 
> I'm not sure what really happend to the Global Timer when we power down
> the ARM core. We use a clocksoure of different power domain now, so it
> might make a difference in low power modes, but I think it will improve
> things: The PIT timer's clock currently have been clock gated even in
> STOP mode, which does not power down the ARM core. And it would be shut
> down completely in LP-Mode 1-3 which since PIT is part of the big power
> domain 1. 
> 
> But AFAIK, its not required that the clocksource is running while in low
> power modes. The time should just not jump, and if the timers registers
> are lost during suspend, a proper suspend/resume support need to be
> implemented. 

Sorry, I should be more specific in the first place.  What I'm concerned
is more about clockevent than clocksource.  If some day we have a
cpuidle driver for vf610, which powers off ARM core in a deep C-state,
the clockevent device will be gone as long as system enters the C-state,
and no timer interrupt can wake up the core from idle state.

Shawn

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-09-25 15:11 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-11 12:06 [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Stefan Agner
2014-09-11 12:06 ` [PATCH 2/2] ARM: vf610: Use ARM Global Timer as clocksource Stefan Agner
2014-09-25  7:50   ` Shawn Guo
2014-09-25  8:25     ` Stefan Agner
2014-09-25 15:10       ` Shawn Guo
2014-09-12  7:59 ` [PATCH 1/2] ARM: dts: vf610: Add ARM Global Timer Shawn Guo
2014-09-19 14:32   ` Stefan Agner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox