mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-09 06:14:34 +02:00
The arm,arch_timer DT binding is extremely imprecise in describing the requirements for interrupts. Follow the architecture by making it explicit that: - the EL1 secure timer irq is required if EL3 is implemented - the EL1 physical timer irq is always required - the EL1 virtual timer irq is always required - the EL2 physical timer irq is required if EL2 is implemented - the EL2 virtual timer irq is required if FEAT_VHE is implemented The consequence of the above is that the minimum number of interrupts to be described is 2, and not 1. Finally, clean up the description which made the assumption that the timers are plugged into a GIC (unfortunately, that's not always true), drop the MMIO nonsense that has long be moved to a separate binding, and use the architectural terminology to describe the various interrupts. Signed-off-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org> Acked-by: Rob Herring (Arm) <robh@kernel.org> Link: https://patch.msgid.link/20260523140242.586031-5-maz@kernel.org
124 lines
3.8 KiB
YAML
124 lines
3.8 KiB
YAML
# SPDX-License-Identifier: GPL-2.0
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/timer/arm,arch_timer.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: ARM architected timer
|
|
|
|
maintainers:
|
|
- Marc Zyngier <marc.zyngier@arm.com>
|
|
- Mark Rutland <mark.rutland@arm.com>
|
|
description: |+
|
|
The per-core architected timer is expected to deliver per-CPU interrupts
|
|
(commonly to a GIC to deliver its per-processor interrupts as PPIs).
|
|
|
|
properties:
|
|
compatible:
|
|
oneOf:
|
|
- items:
|
|
- const: arm,cortex-a15-timer
|
|
- const: arm,armv7-timer
|
|
- items:
|
|
- enum:
|
|
- arm,armv7-timer
|
|
- arm,armv8-timer
|
|
- items:
|
|
- const: arm,armv8-timer
|
|
- const: arm,armv7-timer
|
|
|
|
interrupts:
|
|
minItems: 2
|
|
items:
|
|
- description: EL1 secure physical timer irq, if EL3 is implemented
|
|
- description: EL1 non-secure physical timer irq
|
|
- description: EL1 virtual timer irq
|
|
- description: EL2 physical timer irq, if EL2 is implemented
|
|
- description: EL2 virtual timer irq, if FEAT_VHE is implemented
|
|
|
|
interrupt-names:
|
|
oneOf:
|
|
- minItems: 2
|
|
items:
|
|
- const: phys
|
|
- const: virt
|
|
- const: hyp-phys
|
|
- const: hyp-virt
|
|
- minItems: 3
|
|
items:
|
|
- const: sec-phys
|
|
- const: phys
|
|
- const: virt
|
|
- const: hyp-phys
|
|
- const: hyp-virt
|
|
|
|
clock-frequency:
|
|
description: 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.
|
|
|
|
always-on:
|
|
type: boolean
|
|
description: If present, the timer is powered through an always-on power
|
|
domain, therefore it never loses context.
|
|
|
|
allwinner,erratum-unknown1:
|
|
type: boolean
|
|
description: Indicates the presence of an erratum found in Allwinner SoCs,
|
|
where reading certain values from the counter is unreliable. This also
|
|
affects writes to the tval register, due to the implicit counter read.
|
|
|
|
fsl,erratum-a008585:
|
|
type: boolean
|
|
description: Indicates the presence of QorIQ erratum A-008585, which says
|
|
that reading the counter is unreliable unless the same value is returned
|
|
by back-to-back reads. This also affects writes to the tval register, due
|
|
to the implicit counter read.
|
|
|
|
hisilicon,erratum-161010101:
|
|
type: boolean
|
|
description: Indicates the presence of Hisilicon erratum 161010101, which
|
|
says that reading the counters is unreliable in some cases, and reads may
|
|
return a value 32 beyond the correct value. This also affects writes to
|
|
the tval registers, due to the implicit counter read.
|
|
|
|
arm,cpu-registers-not-fw-configured:
|
|
type: boolean
|
|
description: 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.
|
|
|
|
arm,no-tick-in-suspend:
|
|
type: boolean
|
|
description: The main counter does not tick when the system is in
|
|
low-power system suspend on some SoCs. This behavior does not match the
|
|
Architecture Reference Manual's specification that the system counter "must
|
|
be implemented in an always-on power domain."
|
|
|
|
required:
|
|
- compatible
|
|
|
|
additionalProperties: false
|
|
|
|
oneOf:
|
|
- required:
|
|
- interrupts
|
|
- required:
|
|
- interrupts-extended
|
|
|
|
examples:
|
|
- |
|
|
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>;
|
|
};
|
|
|
|
...
|