2012-01-19 21:53:50 +08:00
|
|
|
* ARM architected timer
|
|
|
|
|
2013-07-19 07:59:29 +08:00
|
|
|
ARM cores may have a per-core architected timer, which provides per-cpu timers,
|
|
|
|
or a memory mapped architected timer, which provides up to 8 frames with a
|
|
|
|
physical and optional virtual timer per frame.
|
2012-01-19 21:53:50 +08:00
|
|
|
|
2013-07-19 07:59:29 +08:00
|
|
|
The per-core architected timer is attached to a GIC to deliver its
|
|
|
|
per-processor interrupts via PPIs. The memory mapped timer is attached to a GIC
|
|
|
|
to deliver its interrupts via SPIs.
|
2012-01-19 21:53:50 +08:00
|
|
|
|
2013-07-19 07:59:29 +08:00
|
|
|
** CP15 Timer node properties:
|
2012-01-19 21:53:50 +08:00
|
|
|
|
2012-11-20 19:44:15 +08:00
|
|
|
- compatible : Should at least contain one of
|
|
|
|
"arm,armv7-timer"
|
|
|
|
"arm,armv8-timer"
|
2012-01-19 21:53:50 +08:00
|
|
|
|
|
|
|
- interrupts : Interrupt list for secure, non-secure, virtual and
|
|
|
|
hypervisor timers, in that order.
|
|
|
|
|
2015-03-21 01:57:47 +08:00
|
|
|
- clock-frequency : The frequency of the main counter, in Hz. Should be present
|
|
|
|
only where necessary to work around broken firmware which does not configure
|
|
|
|
CNTFRQ on all CPUs to a uniform correct value. Use of this property is
|
|
|
|
strongly discouraged; fix your firmware unless absolutely impossible.
|
2012-01-19 21:53:50 +08:00
|
|
|
|
clocksource: arch_arm_timer: Fix age-old arch timer C3STOP detection issue
ARM arch timers are tightly coupled with the CPU logic and lose context
on platform implementing HW power management when cores are powered
down at run-time. Marking the arch timers as C3STOP regardless of power
management capabilities causes issues on platforms with no power management,
since in that case the arch timers cannot possibly enter states where the
timer loses context at runtime and therefore can always be used as a high
resolution clockevent device.
In order to fix the C3STOP issue in a way compliant with how real HW
works, this patch adds a boolean property to the arch timer bindings
to define if the arch timer is managed by an always-on power domain.
This power domain is present on all ARM platforms to date, and manages
HW that must not be turned off, whatever the state of other HW
components (eg power controller). On platforms with no power management
capabilities, it is the only power domain present, which encompasses
and manages power supply for all HW components in the system.
If the timer is powered by the always-on power domain, the always-on
property must be present in the bindings which means that the timer cannot
be shutdown at runtime, so it is not a C3STOP clockevent device.
If the timer binding does not contain the always-on property, the timer is
assumed to be power-gateable, hence it must be defined as a C3STOP
clockevent device.
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Magnus Damm <damm@opensource.se>
Cc: Marc Carino <marc.ceeeee@gmail.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
2014-04-08 17:04:32 +08:00
|
|
|
- always-on : a boolean property. If present, the timer is powered through an
|
|
|
|
always-on power domain, therefore it never loses context.
|
|
|
|
|
2014-10-08 15:33:47 +08:00
|
|
|
** Optional properties:
|
|
|
|
|
|
|
|
- arm,cpu-registers-not-fw-configured : Firmware does not initialize
|
|
|
|
any of the generic timer CPU registers, which contain their
|
|
|
|
architecturally-defined reset values. Only supported for 32-bit
|
|
|
|
systems which follow the ARMv7 architected reset values.
|
|
|
|
|
|
|
|
|
2012-01-19 21:53:50 +08:00
|
|
|
Example:
|
|
|
|
|
|
|
|
timer {
|
|
|
|
compatible = "arm,cortex-a15-timer",
|
|
|
|
"arm,armv7-timer";
|
|
|
|
interrupts = <1 13 0xf08>,
|
|
|
|
<1 14 0xf08>,
|
|
|
|
<1 11 0xf08>,
|
|
|
|
<1 10 0xf08>;
|
|
|
|
clock-frequency = <100000000>;
|
|
|
|
};
|
2013-07-19 07:59:29 +08:00
|
|
|
|
|
|
|
** Memory mapped timer node properties:
|
|
|
|
|
|
|
|
- compatible : Should at least contain "arm,armv7-timer-mem".
|
|
|
|
|
2015-03-21 01:57:47 +08:00
|
|
|
- clock-frequency : The frequency of the main counter, in Hz. Should be present
|
|
|
|
only when firmware has not configured the MMIO CNTFRQ registers.
|
2013-07-19 07:59:29 +08:00
|
|
|
|
|
|
|
- reg : The control frame base address.
|
|
|
|
|
|
|
|
Note that #address-cells, #size-cells, and ranges shall be present to ensure
|
|
|
|
the CPU can address a frame's registers.
|
|
|
|
|
|
|
|
A timer node has up to 8 frame sub-nodes, each with the following properties:
|
|
|
|
|
|
|
|
- frame-number: 0 to 7.
|
|
|
|
|
|
|
|
- interrupts : Interrupt list for physical and virtual timers in that order.
|
|
|
|
The virtual timer interrupt is optional.
|
|
|
|
|
|
|
|
- reg : The first and second view base addresses in that order. The second view
|
|
|
|
base address is optional.
|
|
|
|
|
|
|
|
- status : "disabled" indicates the frame is not available for use. Optional.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
timer@f0000000 {
|
|
|
|
compatible = "arm,armv7-timer-mem";
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <1>;
|
|
|
|
ranges;
|
|
|
|
reg = <0xf0000000 0x1000>;
|
|
|
|
clock-frequency = <50000000>;
|
|
|
|
|
|
|
|
frame@f0001000 {
|
|
|
|
frame-number = <0>
|
|
|
|
interrupts = <0 13 0x8>,
|
|
|
|
<0 14 0x8>;
|
|
|
|
reg = <0xf0001000 0x1000>,
|
|
|
|
<0xf0002000 0x1000>;
|
|
|
|
};
|
|
|
|
|
|
|
|
frame@f0003000 {
|
|
|
|
frame-number = <1>
|
|
|
|
interrupts = <0 15 0x8>;
|
|
|
|
reg = <0xf0003000 0x1000>;
|
|
|
|
status = "disabled";
|
|
|
|
};
|
|
|
|
};
|