162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/interrupt-controller/mti,gic.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: MIPS Global Interrupt Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Paul Burton <paulburton@kernel.org>
1162306a36Sopenharmony_ci  - Thomas Bogendoerfer <tsbogend@alpha.franken.de>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  The MIPS GIC routes external interrupts to individual VPEs and IRQ pins.
1562306a36Sopenharmony_ci  It also supports local (per-processor) interrupts and software-generated
1662306a36Sopenharmony_ci  interrupts which can be used as IPIs. The GIC also includes a free-running
1762306a36Sopenharmony_ci  global timer, per-CPU count/compare timers, and a watchdog.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciproperties:
2062306a36Sopenharmony_ci  compatible:
2162306a36Sopenharmony_ci    const: mti,gic
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci  "#interrupt-cells":
2462306a36Sopenharmony_ci    const: 3
2562306a36Sopenharmony_ci    description: |
2662306a36Sopenharmony_ci      The 1st cell is the type of interrupt: local or shared defined in the
2762306a36Sopenharmony_ci      file 'dt-bindings/interrupt-controller/mips-gic.h'. The 2nd cell is the
2862306a36Sopenharmony_ci      GIC interrupt number. The 3d cell encodes the interrupt flags setting up
2962306a36Sopenharmony_ci      the IRQ trigger modes, which are defined in the file
3062306a36Sopenharmony_ci      'dt-bindings/interrupt-controller/irq.h'.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci  reg:
3362306a36Sopenharmony_ci    description: |
3462306a36Sopenharmony_ci      Base address and length of the GIC registers space. If not present,
3562306a36Sopenharmony_ci      the base address reported by the hardware GCR_GIC_BASE will be used.
3662306a36Sopenharmony_ci    maxItems: 1
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci  interrupt-controller: true
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  mti,reserved-cpu-vectors:
4162306a36Sopenharmony_ci    description: |
4262306a36Sopenharmony_ci      Specifies the list of CPU interrupt vectors to which the GIC may not
4362306a36Sopenharmony_ci      route interrupts. This property is ignored if the CPU is started in EIC
4462306a36Sopenharmony_ci      mode.
4562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
4662306a36Sopenharmony_ci    minItems: 1
4762306a36Sopenharmony_ci    maxItems: 6
4862306a36Sopenharmony_ci    uniqueItems: true
4962306a36Sopenharmony_ci    items:
5062306a36Sopenharmony_ci      minimum: 2
5162306a36Sopenharmony_ci      maximum: 7
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci  mti,reserved-ipi-vectors:
5462306a36Sopenharmony_ci    description: |
5562306a36Sopenharmony_ci      Specifies the range of GIC interrupts that are reserved for IPIs.
5662306a36Sopenharmony_ci      It accepts two values: the 1st is the starting interrupt and the 2nd is
5762306a36Sopenharmony_ci      the size of the reserved range. If not specified, the driver will
5862306a36Sopenharmony_ci      allocate the last (2 * number of VPEs in the system).
5962306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
6062306a36Sopenharmony_ci    items:
6162306a36Sopenharmony_ci      - minimum: 0
6262306a36Sopenharmony_ci        maximum: 254
6362306a36Sopenharmony_ci      - minimum: 2
6462306a36Sopenharmony_ci        maximum: 254
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci  timer:
6762306a36Sopenharmony_ci    type: object
6862306a36Sopenharmony_ci    description: |
6962306a36Sopenharmony_ci      MIPS GIC includes a free-running global timer, per-CPU count/compare
7062306a36Sopenharmony_ci      timers, and a watchdog. Currently only the GIC Timer is supported.
7162306a36Sopenharmony_ci    properties:
7262306a36Sopenharmony_ci      compatible:
7362306a36Sopenharmony_ci        const: mti,gic-timer
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci      interrupts:
7662306a36Sopenharmony_ci        description: |
7762306a36Sopenharmony_ci          Interrupt for the GIC local timer, so normally it's suppose to be of
7862306a36Sopenharmony_ci          <GIC_LOCAL X IRQ_TYPE_NONE> format.
7962306a36Sopenharmony_ci        maxItems: 1
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci      clocks:
8262306a36Sopenharmony_ci        maxItems: 1
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci      clock-frequency: true
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci    required:
8762306a36Sopenharmony_ci      - compatible
8862306a36Sopenharmony_ci      - interrupts
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci    oneOf:
9162306a36Sopenharmony_ci      - required:
9262306a36Sopenharmony_ci          - clocks
9362306a36Sopenharmony_ci      - required:
9462306a36Sopenharmony_ci          - clock-frequency
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci    additionalProperties: false
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciadditionalProperties: false
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_cirequired:
10162306a36Sopenharmony_ci  - compatible
10262306a36Sopenharmony_ci  - "#interrupt-cells"
10362306a36Sopenharmony_ci  - interrupt-controller
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ciexamples:
10662306a36Sopenharmony_ci  - |
10762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/mips-gic.h>
10862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci    interrupt-controller@1bdc0000 {
11162306a36Sopenharmony_ci      compatible = "mti,gic";
11262306a36Sopenharmony_ci      reg = <0x1bdc0000 0x20000>;
11362306a36Sopenharmony_ci      interrupt-controller;
11462306a36Sopenharmony_ci      #interrupt-cells = <3>;
11562306a36Sopenharmony_ci      mti,reserved-cpu-vectors = <7>;
11662306a36Sopenharmony_ci      mti,reserved-ipi-vectors = <40 8>;
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci      timer {
11962306a36Sopenharmony_ci        compatible = "mti,gic-timer";
12062306a36Sopenharmony_ci        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
12162306a36Sopenharmony_ci        clock-frequency = <50000000>;
12262306a36Sopenharmony_ci      };
12362306a36Sopenharmony_ci    };
12462306a36Sopenharmony_ci  - |
12562306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/mips-gic.h>
12662306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci    interrupt-controller@1bdc0000 {
12962306a36Sopenharmony_ci      compatible = "mti,gic";
13062306a36Sopenharmony_ci      reg = <0x1bdc0000 0x20000>;
13162306a36Sopenharmony_ci      interrupt-controller;
13262306a36Sopenharmony_ci      #interrupt-cells = <3>;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci      timer {
13562306a36Sopenharmony_ci        compatible = "mti,gic-timer";
13662306a36Sopenharmony_ci        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
13762306a36Sopenharmony_ci        clocks = <&cpu_pll>;
13862306a36Sopenharmony_ci      };
13962306a36Sopenharmony_ci    };
14062306a36Sopenharmony_ci  - |
14162306a36Sopenharmony_ci    interrupt-controller {
14262306a36Sopenharmony_ci      compatible = "mti,gic";
14362306a36Sopenharmony_ci      interrupt-controller;
14462306a36Sopenharmony_ci      #interrupt-cells = <3>;
14562306a36Sopenharmony_ci    };
14662306a36Sopenharmony_ci...
147