Hi On Thu, Nov 6, 2014 at 10:23 AM, Lorenzo Pieralisi <[email protected]> wrote: > On Thu, Nov 06, 2014 at 05:57:19PM +0000, Anatol Pomozov wrote: >> Quoting ARMv8 Reference Manual section D6.1: >> "The system counter must be implemented in an always-on power domain." > > Do not mix up the system counter with arch timers. System counter is > always-on, but the arch timer(s) logic (that implements eg timers > comparators against the system counter value) might not be (timer logic > is in the processor), so it can be lost on processor(s) power down.
Thanks everyone for replies. I am trying to enable tegra20_timer on my board. But this driver does not compile because it uses headers from arch/arm. It particular it needs register_persistent_clock() function. How I suppose to port tegra20_timer to ARM64? Do I just need to duplicate the function declaration/implementation to arch/arm64? > > NAK. > > Lorenzo > >> There is no need to keep 'always-on' configurable on ARMv8. We ignore >> this dts property value and unconditionally set it to true. > > >> >> The issue was discovered while working on ARMv8 board with only one timer >> (arm arch timer). If 'always-on' is false then it disables high-resolution >> timer functionality. >> >> Signed-off-by: Anatol Pomozov <[email protected]> >> --- >> .../devicetree/bindings/arm/arch_timer.txt | 8 ++++++-- >> drivers/clocksource/arm_arch_timer.c | 21 >> +++++++++++++++++---- >> 2 files changed, 23 insertions(+), 6 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/arm/arch_timer.txt >> b/Documentation/devicetree/bindings/arm/arch_timer.txt >> index 37b2caf..cb2d572 100644 >> --- a/Documentation/devicetree/bindings/arm/arch_timer.txt >> +++ b/Documentation/devicetree/bindings/arm/arch_timer.txt >> @@ -19,8 +19,12 @@ to deliver its interrupts via SPIs. >> >> - clock-frequency : The frequency of the main counter, in Hz. Optional. >> >> -- always-on : a boolean property. If present, the timer is powered through >> an >> - always-on power domain, therefore it never loses context. >> +- always-on : an "armv7-timer" specific boolean property. >> + If present, the timer is powered through an always-on power domain, >> therefore >> + it never loses context. >> + ARMv8 system timer is in always-on power domain (per Architecture >> Reference >> + section D6.1) thus this proprty is ignored for "arm,armv8-timer" >> compatible >> + timer. >> >> Example: >> >> diff --git a/drivers/clocksource/arm_arch_timer.c >> b/drivers/clocksource/arm_arch_timer.c >> index 2133f9d..610052d 100644 >> --- a/drivers/clocksource/arm_arch_timer.c >> +++ b/drivers/clocksource/arm_arch_timer.c >> @@ -719,13 +719,26 @@ static void __init arch_timer_init(struct device_node >> *np) >> } >> } >> >> - arch_timer_c3stop = !of_property_read_bool(np, "always-on"); >> - >> arch_timer_register(); >> arch_timer_common_init(); >> } >> -CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", >> arch_timer_init); >> -CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", >> arch_timer_init); >> + >> +static void __init v7_arch_timer_init(struct device_node *np) >> +{ >> + arch_timer_c3stop = !of_property_read_bool(np, "always-on"); >> + arch_timer_init(np); >> +} >> + >> +static void __init v8_arch_timer_init(struct device_node *np) >> +{ >> + /* Per ARMv8 Architecture Reference Manual section D6.1 >> + * the system timer is in always-on power domain. >> + */ >> + arch_timer_c3stop = false; >> + arch_timer_init(np); >> +} >> +CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", >> v7_arch_timer_init); >> +CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", >> v8_arch_timer_init); >> >> static void __init arch_timer_mem_init(struct device_node *np) >> { >> -- >> 2.1.0.rc2.206.gedb03e5 >> >> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

