162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/timer/arm,arch_timer.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: ARM architected timer
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Marc Zyngier <marc.zyngier@arm.com>
1162306a36Sopenharmony_ci  - Mark Rutland <mark.rutland@arm.com>
1262306a36Sopenharmony_cidescription: |+
1362306a36Sopenharmony_ci  ARM cores may have a per-core architected timer, which provides per-cpu timers,
1462306a36Sopenharmony_ci  or a memory mapped architected timer, which provides up to 8 frames with a
1562306a36Sopenharmony_ci  physical and optional virtual timer per frame.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci  The per-core architected timer is attached to a GIC to deliver its
1862306a36Sopenharmony_ci  per-processor interrupts via PPIs. The memory mapped timer is attached to a GIC
1962306a36Sopenharmony_ci  to deliver its interrupts via SPIs.
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciproperties:
2262306a36Sopenharmony_ci  compatible:
2362306a36Sopenharmony_ci    oneOf:
2462306a36Sopenharmony_ci      - items:
2562306a36Sopenharmony_ci          - const: arm,cortex-a15-timer
2662306a36Sopenharmony_ci          - const: arm,armv7-timer
2762306a36Sopenharmony_ci      - items:
2862306a36Sopenharmony_ci          - enum:
2962306a36Sopenharmony_ci              - arm,armv7-timer
3062306a36Sopenharmony_ci              - arm,armv8-timer
3162306a36Sopenharmony_ci      - items:
3262306a36Sopenharmony_ci          - const: arm,armv8-timer
3362306a36Sopenharmony_ci          - const: arm,armv7-timer
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  interrupts:
3662306a36Sopenharmony_ci    minItems: 1
3762306a36Sopenharmony_ci    items:
3862306a36Sopenharmony_ci      - description: secure timer irq
3962306a36Sopenharmony_ci      - description: non-secure timer irq
4062306a36Sopenharmony_ci      - description: virtual timer irq
4162306a36Sopenharmony_ci      - description: hypervisor timer irq
4262306a36Sopenharmony_ci      - description: hypervisor virtual timer irq
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  interrupt-names:
4562306a36Sopenharmony_ci    oneOf:
4662306a36Sopenharmony_ci      - minItems: 2
4762306a36Sopenharmony_ci        items:
4862306a36Sopenharmony_ci          - const: phys
4962306a36Sopenharmony_ci          - const: virt
5062306a36Sopenharmony_ci          - const: hyp-phys
5162306a36Sopenharmony_ci          - const: hyp-virt
5262306a36Sopenharmony_ci      - minItems: 3
5362306a36Sopenharmony_ci        items:
5462306a36Sopenharmony_ci          - const: sec-phys
5562306a36Sopenharmony_ci          - const: phys
5662306a36Sopenharmony_ci          - const: virt
5762306a36Sopenharmony_ci          - const: hyp-phys
5862306a36Sopenharmony_ci          - const: hyp-virt
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  clock-frequency:
6162306a36Sopenharmony_ci    description: The frequency of the main counter, in Hz. Should be present
6262306a36Sopenharmony_ci      only where necessary to work around broken firmware which does not configure
6362306a36Sopenharmony_ci      CNTFRQ on all CPUs to a uniform correct value. Use of this property is
6462306a36Sopenharmony_ci      strongly discouraged; fix your firmware unless absolutely impossible.
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci  always-on:
6762306a36Sopenharmony_ci    type: boolean
6862306a36Sopenharmony_ci    description: If present, the timer is powered through an always-on power
6962306a36Sopenharmony_ci      domain, therefore it never loses context.
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  allwinner,erratum-unknown1:
7262306a36Sopenharmony_ci    type: boolean
7362306a36Sopenharmony_ci    description: Indicates the presence of an erratum found in Allwinner SoCs,
7462306a36Sopenharmony_ci      where reading certain values from the counter is unreliable. This also
7562306a36Sopenharmony_ci      affects writes to the tval register, due to the implicit counter read.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  fsl,erratum-a008585:
7862306a36Sopenharmony_ci    type: boolean
7962306a36Sopenharmony_ci    description: Indicates the presence of QorIQ erratum A-008585, which says
8062306a36Sopenharmony_ci      that reading the counter is unreliable unless the same value is returned
8162306a36Sopenharmony_ci      by back-to-back reads. This also affects writes to the tval register, due
8262306a36Sopenharmony_ci      to the implicit counter read.
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci  hisilicon,erratum-161010101:
8562306a36Sopenharmony_ci    type: boolean
8662306a36Sopenharmony_ci    description: Indicates the presence of Hisilicon erratum 161010101, which
8762306a36Sopenharmony_ci      says that reading the counters is unreliable in some cases, and reads may
8862306a36Sopenharmony_ci      return a value 32 beyond the correct value. This also affects writes to
8962306a36Sopenharmony_ci      the tval registers, due to the implicit counter read.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci  arm,cpu-registers-not-fw-configured:
9262306a36Sopenharmony_ci    type: boolean
9362306a36Sopenharmony_ci    description: Firmware does not initialize any of the generic timer CPU
9462306a36Sopenharmony_ci      registers, which contain their architecturally-defined reset values. Only
9562306a36Sopenharmony_ci      supported for 32-bit systems which follow the ARMv7 architected reset
9662306a36Sopenharmony_ci      values.
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci  arm,no-tick-in-suspend:
9962306a36Sopenharmony_ci    type: boolean
10062306a36Sopenharmony_ci    description: The main counter does not tick when the system is in
10162306a36Sopenharmony_ci      low-power system suspend on some SoCs. This behavior does not match the
10262306a36Sopenharmony_ci      Architecture Reference Manual's specification that the system counter "must
10362306a36Sopenharmony_ci      be implemented in an always-on power domain."
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_cirequired:
10662306a36Sopenharmony_ci  - compatible
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciadditionalProperties: false
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_cioneOf:
11162306a36Sopenharmony_ci  - required:
11262306a36Sopenharmony_ci      - interrupts
11362306a36Sopenharmony_ci  - required:
11462306a36Sopenharmony_ci      - interrupts-extended
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ciexamples:
11762306a36Sopenharmony_ci  - |
11862306a36Sopenharmony_ci    timer {
11962306a36Sopenharmony_ci      compatible = "arm,cortex-a15-timer",
12062306a36Sopenharmony_ci             "arm,armv7-timer";
12162306a36Sopenharmony_ci      interrupts = <1 13 0xf08>,
12262306a36Sopenharmony_ci             <1 14 0xf08>,
12362306a36Sopenharmony_ci             <1 11 0xf08>,
12462306a36Sopenharmony_ci             <1 10 0xf08>;
12562306a36Sopenharmony_ci      clock-frequency = <100000000>;
12662306a36Sopenharmony_ci    };
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci...
129