Re: [PATCH v3 4/6] dt-bindings: interrupt-controller: realtek,rtl-intc: require parents
From: Rob Herring
Date: Fri Jan 21 2022 - 17:57:00 EST
On Sun, Jan 09, 2022 at 03:54:35PM +0100, Sander Vanheule wrote:
> The interrupt router has 32 inputs and up to 15 outputs, and the way
> these are mapped to each other is runtime configurable. The outputs of
> this interrupt router on the other hand, are connected to a fixed set of
> parent interrupts. This means that "interrupt-map" is inappropriate, and
> rather a list of parent interrupts should be specified.
I'm not sure why interrupt-map is not appropriate. It is not appropriate
if you have to touch the interrupt router h/w in servicing the
interrupts. If you just need one time configuration of the mapping, then
it should be fine to use I think.
> Two-part compatibles are introduced to be able to require "interrupts"
> for new devicetrees. The relevant descriptions are extended or added to
> more clearly describe the inputs and outputs of this router. The old
> compatible, "interrupt-map" and "#address-cells", is deprecated.
> Interrupt specifiers for new compatibles will require two cells, to
> indicate the output selection.
>
> To prevent spurious changes when more SoCs are added, "allOf" is used
> with one "if", and the compatible enum only has one item.
>
> The example is updated to provide a correct example for RTL8380 SoCs.
>
> Signed-off-by: Sander Vanheule <sander@xxxxxxxxxxxxx>
> ---
> .../realtek,rtl-intc.yaml | 78 ++++++++++++++-----
> 1 file changed, 58 insertions(+), 20 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/interrupt-controller/realtek,rtl-intc.yaml b/Documentation/devicetree/bindings/interrupt-controller/realtek,rtl-intc.yaml
> index 9e76fff20323..aab8d44010af 100644
> --- a/Documentation/devicetree/bindings/interrupt-controller/realtek,rtl-intc.yaml
> +++ b/Documentation/devicetree/bindings/interrupt-controller/realtek,rtl-intc.yaml
> @@ -6,6 +6,10 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>
> title: Realtek RTL SoC interrupt controller devicetree bindings
>
> +description:
> + Interrupt router for Realtek MIPS SoCs, allowing each SoC interrupt to be
> + routed to one parent interrupt, or left disconnected.
> +
> maintainers:
> - Birger Koblitz <mail@xxxxxxxxxxxxxxxxx>
> - Bert Vermeulen <bert@xxxxxxxx>
> @@ -13,45 +17,79 @@ maintainers:
>
> properties:
> compatible:
> - const: realtek,rtl-intc
> + oneOf:
> + - items:
> + - enum:
> + - realtek,rtl8380-intc
> + - const: realtek,rtl-intc
> + - const: realtek,rtl-intc
> + deprecated: true
>
> - "#interrupt-cells":
> - const: 1
> + "#interrupt-cells": true
>
> reg:
> maxItems: 1
>
> interrupts:
> - maxItems: 1
> + minItems: 1
> + maxItems: 15
> + description:
> + List of parent interrupts, in the order that they are connected to this
> + interrupt router's outputs.
>
> interrupt-controller: true
>
> - "#address-cells":
> - const: 0
> -
> - interrupt-map:
> - description: Describes mapping from SoC interrupts to CPU interrupts
> -
> required:
> - compatible
> - reg
> - "#interrupt-cells"
> - interrupt-controller
> - - "#address-cells"
> - - interrupt-map
> +
> +allOf:
> + - if:
> + properties:
> + compatible:
> + const: realtek,rtl-intc
> + then:
> + properties:
> + "#interrupt-cells":
> + const: 1
> +
> + "#address-cells":
> + const: 0
> +
> + interrupt-map: true
> + required:
> + - "#address-cells"
> + - interrupt-map
> + else:
> + properties:
> + "#interrupt-cells":
> + description:
> + Two cells to specify which line to connect to, and which output it should
> + be routed to. Both cells use a zero-based index.
Picking the index picks the priority? Which is higher priority?
> + const: 2
> + required:
> + - interrupts
>
> additionalProperties: false
>
> examples:
> - |
> intc: interrupt-controller@3000 {
> - compatible = "realtek,rtl-intc";
> - #interrupt-cells = <1>;
> + compatible = "realtek,rtl8380-intc", "realtek,rtl-intc";
> + #interrupt-cells = <2>;
> interrupt-controller;
> - reg = <0x3000 0x20>;
> - #address-cells = <0>;
> - interrupt-map =
> - <31 &cpuintc 2>,
> - <30 &cpuintc 1>,
> - <29 &cpuintc 5>;
> + reg = <0x3000 0x18>;
> +
> + interrupt-parent = <&cpuintc>;
> + interrupts = <2>, <3>, <4>, <5>, <6>;
> + };
> +
> + irq-consumer@0 {
> + reg = <0 4>;
> + interrupt-parent = <&intc>;
> + interrupts =
> + <19 3>, /* IRQ 19, routed to output 3 (cpuintc 5) */
> + <18 4>; /* IRQ 18, routed to output 4 (cpuintc 6) */
> };
> --
> 2.33.1
>
>