[PATCH v3 5/9] dt-bindings: timer: Add schema for realtek,otto-timer

Chris Packham posted 9 patches 1 year, 5 months ago
There is a newer version of this series
[PATCH v3 5/9] dt-bindings: timer: Add schema for realtek,otto-timer
Posted by Chris Packham 1 year, 5 months ago
Add the devicetree schema for the realtek,otto-timer present on a number
of Realtek SoCs.

Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
---

Notes:
    Changes in v3:
    - Use items to describe regs and interrupt properties
    - Remove minItems condition
    Changes in v2:
    - Use specific compatible (rtl9302-timer instead of rtl930x-timer)
    - Remove unnecessary label
    - Remove unused irq flags (interrupt controller is one-cell)
    - Set minItems for reg and interrupts based on compatible

 .../bindings/timer/realtek,otto-timer.yaml    | 63 +++++++++++++++++++
 1 file changed, 63 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/timer/realtek,otto-timer.yaml

diff --git a/Documentation/devicetree/bindings/timer/realtek,otto-timer.yaml b/Documentation/devicetree/bindings/timer/realtek,otto-timer.yaml
new file mode 100644
index 000000000000..7b6ec2c69484
--- /dev/null
+++ b/Documentation/devicetree/bindings/timer/realtek,otto-timer.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/timer/realtek,otto-timer.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Realtek Otto SoCs Timer/Counter
+
+description:
+  Realtek SoCs support a number of timers/counters. These are used
+  as a per CPU clock event generator and an overall CPU clocksource.
+
+maintainers:
+  - Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+properties:
+  $nodename:
+    pattern: "^timer@[0-9a-f]+$"
+
+  compatible:
+    items:
+      - enum:
+          - realtek,rtl9302-timer
+      - const: realtek,otto-timer
+
+  reg:
+    items:
+      - description: timer0 registers
+      - description: timer1 registers
+      - description: timer2 registers
+      - description: timer3 registers
+      - description: timer4 registers
+
+  clocks:
+    maxItems: 1
+
+  interrupts:
+    items:
+      - description: timer0 interrupt
+      - description: timer1 interrupt
+      - description: timer2 interrupt
+      - description: timer3 interrupt
+      - description: timer4 interrupt
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - interrupts
+
+additionalProperties: false
+
+examples:
+  - |
+    timer@3200 {
+      compatible = "realtek,rtl9302-timer", "realtek,otto-timer";
+      reg = <0x3200 0x10>, <0x3210 0x10>, <0x3220 0x10>,
+            <0x3230 0x10>, <0x3240 0x10>;
+
+      interrupt-parent = <&intc>;
+      interrupts = <7>, <8>, <9>, <10>, <11>;
+      clocks = <&lx_clk>;
+    };
-- 
2.45.2
Re: [PATCH v3 5/9] dt-bindings: timer: Add schema for realtek,otto-timer
Posted by Sander Vanheule 1 year, 5 months ago
Hi Chris,

Thanks for submitting these patches!

On Thu, 2024-06-27 at 16:33 +1200, Chris Packham wrote:
> Add the devicetree schema for the realtek,otto-timer present on a number
> of Realtek SoCs.
> 
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> ---
[...]

> +
> +  reg:
> +    items:
> +      - description: timer0 registers
> +      - description: timer1 registers
> +      - description: timer2 registers
> +      - description: timer3 registers
> +      - description: timer4 registers
> +
> +  clocks:
> +    maxItems: 1
> +
> +  interrupts:
> +    items:
> +      - description: timer0 interrupt
> +      - description: timer1 interrupt
> +      - description: timer2 interrupt
> +      - description: timer3 interrupt
> +      - description: timer4 interrupt

Instead of providing a (SoC dependent) number of reg and interrupt items, can't we just
provide one reg+interrupt per timer and instantiate one block for however many timers the
SoC has?

> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    timer@3200 {
> +      compatible = "realtek,rtl9302-timer", "realtek,otto-timer";
> +      reg = <0x3200 0x10>, <0x3210 0x10>, <0x3220 0x10>,
> +            <0x3230 0x10>, <0x3240 0x10>;
> +
> +      interrupt-parent = <&intc>;
> +      interrupts = <7>, <8>, <9>, <10>, <11>;
> +      clocks = <&lx_clk>;
> +    };

So this would become:
	timer@3200 {
		compatible = ...
		reg = <0x3200 0x10>;
		interrupt-parent = <&intc>;
		interrupts = <7>;
		...
	};
	timer@3210 {
		compatible = ...
		reg = <0x3210 0x10>;
		interrupt-parent = <&intc>;
		interrupts = <8>;
		...
	};
	...

More verbose, but it also makes the binding a bit simpler. The driver can then still do
whatever it wants with all the timers that are registered, although some more resource
locking might be required.

Best,
Sander
Re: [PATCH v3 5/9] dt-bindings: timer: Add schema for realtek,otto-timer
Posted by Chris Packham 1 year, 5 months ago
On 30/06/24 08:40, Sander Vanheule wrote:
> Hi Chris,
>
> Thanks for submitting these patches!
>
> On Thu, 2024-06-27 at 16:33 +1200, Chris Packham wrote:
>> Add the devicetree schema for the realtek,otto-timer present on a number
>> of Realtek SoCs.
>>
>> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
>> ---
> [...]
>
>> +
>> +  reg:
>> +    items:
>> +      - description: timer0 registers
>> +      - description: timer1 registers
>> +      - description: timer2 registers
>> +      - description: timer3 registers
>> +      - description: timer4 registers
>> +
>> +  clocks:
>> +    maxItems: 1
>> +
>> +  interrupts:
>> +    items:
>> +      - description: timer0 interrupt
>> +      - description: timer1 interrupt
>> +      - description: timer2 interrupt
>> +      - description: timer3 interrupt
>> +      - description: timer4 interrupt
> Instead of providing a (SoC dependent) number of reg and interrupt items, can't we just
> provide one reg+interrupt per timer and instantiate one block for however many timers the
> SoC has?
>
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> +  - |
>> +    timer@3200 {
>> +      compatible = "realtek,rtl9302-timer", "realtek,otto-timer";
>> +      reg = <0x3200 0x10>, <0x3210 0x10>, <0x3220 0x10>,
>> +            <0x3230 0x10>, <0x3240 0x10>;
>> +
>> +      interrupt-parent = <&intc>;
>> +      interrupts = <7>, <8>, <9>, <10>, <11>;
>> +      clocks = <&lx_clk>;
>> +    };
> So this would become:
> 	timer@3200 {
> 		compatible = ...
> 		reg = <0x3200 0x10>;
> 		interrupt-parent = <&intc>;
> 		interrupts = <7>;
> 		...
> 	};
> 	timer@3210 {
> 		compatible = ...
> 		reg = <0x3210 0x10>;
> 		interrupt-parent = <&intc>;
> 		interrupts = <8>;
> 		...
> 	};
> 	...
>
> More verbose, but it also makes the binding a bit simpler. The driver can then still do
> whatever it wants with all the timers that are registered, although some more resource
> locking might be required.

I kind of prefer the single entry for the whole TCU. If we were to fold 
the watchdog into this then we could have a single larger range that 
covered all the timers similar to the ingenic,tcu. But that would 
technically be a breaking change at this point.
Re: [PATCH v3 5/9] dt-bindings: timer: Add schema for realtek,otto-timer
Posted by Krzysztof Kozlowski 1 year, 5 months ago
On 27/06/2024 06:33, Chris Packham wrote:
> Add the devicetree schema for the realtek,otto-timer present on a number
> of Realtek SoCs.
> 
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>


Best regards,
Krzysztof