162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/timer/samsung,exynos4210-mct.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Samsung Exynos SoC Multi Core Timer (MCT) 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Krzysztof Kozlowski <krzk@kernel.org> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: |+ 1362306a36Sopenharmony_ci The Samsung's Multi Core Timer (MCT) module includes two main blocks, the 1462306a36Sopenharmony_ci global timer and CPU local timers. The global timer is a 64-bit free running 1562306a36Sopenharmony_ci up-counter and can generate 4 interrupts when the counter reaches one of the 1662306a36Sopenharmony_ci four preset counter values. The CPU local timers are 32-bit free running 1762306a36Sopenharmony_ci down-counters and generate an interrupt when the counter expires. There is 1862306a36Sopenharmony_ci one CPU local timer instantiated in MCT for every CPU in the system. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciproperties: 2162306a36Sopenharmony_ci compatible: 2262306a36Sopenharmony_ci oneOf: 2362306a36Sopenharmony_ci - enum: 2462306a36Sopenharmony_ci - samsung,exynos4210-mct 2562306a36Sopenharmony_ci - samsung,exynos4412-mct 2662306a36Sopenharmony_ci - items: 2762306a36Sopenharmony_ci - enum: 2862306a36Sopenharmony_ci - axis,artpec8-mct 2962306a36Sopenharmony_ci - samsung,exynos3250-mct 3062306a36Sopenharmony_ci - samsung,exynos5250-mct 3162306a36Sopenharmony_ci - samsung,exynos5260-mct 3262306a36Sopenharmony_ci - samsung,exynos5420-mct 3362306a36Sopenharmony_ci - samsung,exynos5433-mct 3462306a36Sopenharmony_ci - samsung,exynos850-mct 3562306a36Sopenharmony_ci - tesla,fsd-mct 3662306a36Sopenharmony_ci - const: samsung,exynos4210-mct 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci clocks: 3962306a36Sopenharmony_ci maxItems: 2 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci clock-names: 4262306a36Sopenharmony_ci items: 4362306a36Sopenharmony_ci - const: fin_pll 4462306a36Sopenharmony_ci - const: mct 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci reg: 4762306a36Sopenharmony_ci maxItems: 1 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci samsung,frc-shared: 5062306a36Sopenharmony_ci type: boolean 5162306a36Sopenharmony_ci description: | 5262306a36Sopenharmony_ci Indicates that the hardware requires that this processor share the 5362306a36Sopenharmony_ci free-running counter with a different (main) processor. 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci samsung,local-timers: 5662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 5762306a36Sopenharmony_ci minItems: 1 5862306a36Sopenharmony_ci maxItems: 16 5962306a36Sopenharmony_ci description: | 6062306a36Sopenharmony_ci List of indices of local timers usable from this processor. 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci interrupts: 6362306a36Sopenharmony_ci description: | 6462306a36Sopenharmony_ci Interrupts should be put in specific order. This is, the local timer 6562306a36Sopenharmony_ci interrupts should be specified after the four global timer interrupts 6662306a36Sopenharmony_ci have been specified: 6762306a36Sopenharmony_ci 0: Global Timer Interrupt 0 6862306a36Sopenharmony_ci 1: Global Timer Interrupt 1 6962306a36Sopenharmony_ci 2: Global Timer Interrupt 2 7062306a36Sopenharmony_ci 3: Global Timer Interrupt 3 7162306a36Sopenharmony_ci 4: Local Timer Interrupt 0 7262306a36Sopenharmony_ci 5: Local Timer Interrupt 1 7362306a36Sopenharmony_ci 6: .. 7462306a36Sopenharmony_ci 7: .. 7562306a36Sopenharmony_ci i: Local Timer Interrupt n 7662306a36Sopenharmony_ci For MCT block that uses a per-processor interrupt for local timers, such 7762306a36Sopenharmony_ci as ones compatible with "samsung,exynos4412-mct", only one local timer 7862306a36Sopenharmony_ci interrupt might be specified, meaning that all local timers use the same 7962306a36Sopenharmony_ci per processor interrupt. 8062306a36Sopenharmony_ci minItems: 5 # 4 Global + 1 local 8162306a36Sopenharmony_ci maxItems: 20 # 4 Global + 16 local 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cirequired: 8462306a36Sopenharmony_ci - compatible 8562306a36Sopenharmony_ci - clock-names 8662306a36Sopenharmony_ci - clocks 8762306a36Sopenharmony_ci - interrupts 8862306a36Sopenharmony_ci - reg 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciallOf: 9162306a36Sopenharmony_ci - if: 9262306a36Sopenharmony_ci not: 9362306a36Sopenharmony_ci properties: 9462306a36Sopenharmony_ci compatible: 9562306a36Sopenharmony_ci contains: 9662306a36Sopenharmony_ci enum: 9762306a36Sopenharmony_ci - axis,artpec8-mct 9862306a36Sopenharmony_ci then: 9962306a36Sopenharmony_ci properties: 10062306a36Sopenharmony_ci samsung,local-timers: false 10162306a36Sopenharmony_ci samsung,frc-shared: false 10262306a36Sopenharmony_ci - if: 10362306a36Sopenharmony_ci properties: 10462306a36Sopenharmony_ci compatible: 10562306a36Sopenharmony_ci contains: 10662306a36Sopenharmony_ci const: samsung,exynos3250-mct 10762306a36Sopenharmony_ci then: 10862306a36Sopenharmony_ci properties: 10962306a36Sopenharmony_ci interrupts: 11062306a36Sopenharmony_ci minItems: 8 11162306a36Sopenharmony_ci maxItems: 8 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci - if: 11462306a36Sopenharmony_ci properties: 11562306a36Sopenharmony_ci compatible: 11662306a36Sopenharmony_ci contains: 11762306a36Sopenharmony_ci const: samsung,exynos5250-mct 11862306a36Sopenharmony_ci then: 11962306a36Sopenharmony_ci properties: 12062306a36Sopenharmony_ci interrupts: 12162306a36Sopenharmony_ci minItems: 6 12262306a36Sopenharmony_ci maxItems: 6 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci - if: 12562306a36Sopenharmony_ci properties: 12662306a36Sopenharmony_ci compatible: 12762306a36Sopenharmony_ci contains: 12862306a36Sopenharmony_ci enum: 12962306a36Sopenharmony_ci - axis,artpec8-mct 13062306a36Sopenharmony_ci - samsung,exynos5260-mct 13162306a36Sopenharmony_ci - samsung,exynos5420-mct 13262306a36Sopenharmony_ci - samsung,exynos5433-mct 13362306a36Sopenharmony_ci - samsung,exynos850-mct 13462306a36Sopenharmony_ci then: 13562306a36Sopenharmony_ci properties: 13662306a36Sopenharmony_ci interrupts: 13762306a36Sopenharmony_ci minItems: 12 13862306a36Sopenharmony_ci maxItems: 12 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci - if: 14162306a36Sopenharmony_ci properties: 14262306a36Sopenharmony_ci compatible: 14362306a36Sopenharmony_ci contains: 14462306a36Sopenharmony_ci enum: 14562306a36Sopenharmony_ci - tesla,fsd-mct 14662306a36Sopenharmony_ci then: 14762306a36Sopenharmony_ci properties: 14862306a36Sopenharmony_ci interrupts: 14962306a36Sopenharmony_ci minItems: 16 15062306a36Sopenharmony_ci maxItems: 16 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ciadditionalProperties: false 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ciexamples: 15562306a36Sopenharmony_ci - | 15662306a36Sopenharmony_ci // In this example, the IP contains two local timers, using separate 15762306a36Sopenharmony_ci // interrupts, so two local timer interrupts have been specified, 15862306a36Sopenharmony_ci // in addition to four global timer interrupts. 15962306a36Sopenharmony_ci #include <dt-bindings/clock/exynos4.h> 16062306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci timer@10050000 { 16362306a36Sopenharmony_ci compatible = "samsung,exynos4210-mct"; 16462306a36Sopenharmony_ci reg = <0x10050000 0x800>; 16562306a36Sopenharmony_ci clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>; 16662306a36Sopenharmony_ci clock-names = "fin_pll", "mct"; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>, 16962306a36Sopenharmony_ci <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>, 17062306a36Sopenharmony_ci <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>, 17162306a36Sopenharmony_ci <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>, 17262306a36Sopenharmony_ci <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>, 17362306a36Sopenharmony_ci <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; 17462306a36Sopenharmony_ci }; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci - | 17762306a36Sopenharmony_ci // In this example, the timer interrupts are connected to two separate 17862306a36Sopenharmony_ci // interrupt controllers. Hence, an interrupts-extended is needed. 17962306a36Sopenharmony_ci #include <dt-bindings/clock/exynos4.h> 18062306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci timer@101c0000 { 18362306a36Sopenharmony_ci compatible = "samsung,exynos4210-mct"; 18462306a36Sopenharmony_ci reg = <0x101C0000 0x800>; 18562306a36Sopenharmony_ci clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>; 18662306a36Sopenharmony_ci clock-names = "fin_pll", "mct"; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci interrupts-extended = <&gic GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>, 18962306a36Sopenharmony_ci <&gic GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>, 19062306a36Sopenharmony_ci <&combiner 12 6>, 19162306a36Sopenharmony_ci <&combiner 12 7>, 19262306a36Sopenharmony_ci <&gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>, 19362306a36Sopenharmony_ci <&gic GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; 19462306a36Sopenharmony_ci }; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci - | 19762306a36Sopenharmony_ci // In this example, the IP contains four local timers, but using 19862306a36Sopenharmony_ci // a per-processor interrupt to handle them. Only one first local 19962306a36Sopenharmony_ci // interrupt is specified. 20062306a36Sopenharmony_ci #include <dt-bindings/clock/exynos4.h> 20162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci timer@10050000 { 20462306a36Sopenharmony_ci compatible = "samsung,exynos4412-mct"; 20562306a36Sopenharmony_ci reg = <0x10050000 0x800>; 20662306a36Sopenharmony_ci clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>; 20762306a36Sopenharmony_ci clock-names = "fin_pll", "mct"; 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>, 21062306a36Sopenharmony_ci <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>, 21162306a36Sopenharmony_ci <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>, 21262306a36Sopenharmony_ci <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>, 21362306a36Sopenharmony_ci <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>; 21462306a36Sopenharmony_ci }; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci - | 21762306a36Sopenharmony_ci // In this example, the IP contains four local timers, but using 21862306a36Sopenharmony_ci // a per-processor interrupt to handle them. All the local timer 21962306a36Sopenharmony_ci // interrupts are specified. 22062306a36Sopenharmony_ci #include <dt-bindings/clock/exynos4.h> 22162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci timer@10050000 { 22462306a36Sopenharmony_ci compatible = "samsung,exynos4412-mct"; 22562306a36Sopenharmony_ci reg = <0x10050000 0x800>; 22662306a36Sopenharmony_ci clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>; 22762306a36Sopenharmony_ci clock-names = "fin_pll", "mct"; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>, 23062306a36Sopenharmony_ci <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>, 23162306a36Sopenharmony_ci <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>, 23262306a36Sopenharmony_ci <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>, 23362306a36Sopenharmony_ci <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>, 23462306a36Sopenharmony_ci <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>, 23562306a36Sopenharmony_ci <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>, 23662306a36Sopenharmony_ci <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>; 23762306a36Sopenharmony_ci }; 238