18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/interrupt-controller/mti,gic.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: MIPS Global Interrupt Controller
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Paul Burton <paulburton@kernel.org>
118c2ecf20Sopenharmony_ci  - Thomas Bogendoerfer <tsbogend@alpha.franken.de>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cidescription: |
148c2ecf20Sopenharmony_ci  The MIPS GIC routes external interrupts to individual VPEs and IRQ pins.
158c2ecf20Sopenharmony_ci  It also supports local (per-processor) interrupts and software-generated
168c2ecf20Sopenharmony_ci  interrupts which can be used as IPIs. The GIC also includes a free-running
178c2ecf20Sopenharmony_ci  global timer, per-CPU count/compare timers, and a watchdog.
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciproperties:
208c2ecf20Sopenharmony_ci  compatible:
218c2ecf20Sopenharmony_ci    const: mti,gic
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci  "#interrupt-cells":
248c2ecf20Sopenharmony_ci    const: 3
258c2ecf20Sopenharmony_ci    description: |
268c2ecf20Sopenharmony_ci      The 1st cell is the type of interrupt: local or shared defined in the
278c2ecf20Sopenharmony_ci      file 'dt-bindings/interrupt-controller/mips-gic.h'. The 2nd cell is the
288c2ecf20Sopenharmony_ci      GIC interrupt number. The 3d cell encodes the interrupt flags setting up
298c2ecf20Sopenharmony_ci      the IRQ trigger modes, which are defined in the file
308c2ecf20Sopenharmony_ci      'dt-bindings/interrupt-controller/irq.h'.
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci  reg:
338c2ecf20Sopenharmony_ci    description: |
348c2ecf20Sopenharmony_ci      Base address and length of the GIC registers space. If not present,
358c2ecf20Sopenharmony_ci      the base address reported by the hardware GCR_GIC_BASE will be used.
368c2ecf20Sopenharmony_ci    maxItems: 1
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci  interrupt-controller: true
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci  mti,reserved-cpu-vectors:
418c2ecf20Sopenharmony_ci    description: |
428c2ecf20Sopenharmony_ci      Specifies the list of CPU interrupt vectors to which the GIC may not
438c2ecf20Sopenharmony_ci      route interrupts. This property is ignored if the CPU is started in EIC
448c2ecf20Sopenharmony_ci      mode.
458c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32-array
468c2ecf20Sopenharmony_ci    minItems: 1
478c2ecf20Sopenharmony_ci    maxItems: 6
488c2ecf20Sopenharmony_ci    uniqueItems: true
498c2ecf20Sopenharmony_ci    items:
508c2ecf20Sopenharmony_ci      minimum: 2
518c2ecf20Sopenharmony_ci      maximum: 7
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci  mti,reserved-ipi-vectors:
548c2ecf20Sopenharmony_ci    description: |
558c2ecf20Sopenharmony_ci      Specifies the range of GIC interrupts that are reserved for IPIs.
568c2ecf20Sopenharmony_ci      It accepts two values: the 1st is the starting interrupt and the 2nd is
578c2ecf20Sopenharmony_ci      the size of the reserved range. If not specified, the driver will
588c2ecf20Sopenharmony_ci      allocate the last (2 * number of VPEs in the system).
598c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#definitions/uint32-array
608c2ecf20Sopenharmony_ci    items:
618c2ecf20Sopenharmony_ci      - minimum: 0
628c2ecf20Sopenharmony_ci        maximum: 254
638c2ecf20Sopenharmony_ci      - minimum: 2
648c2ecf20Sopenharmony_ci        maximum: 254
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci  timer:
678c2ecf20Sopenharmony_ci    type: object
688c2ecf20Sopenharmony_ci    description: |
698c2ecf20Sopenharmony_ci      MIPS GIC includes a free-running global timer, per-CPU count/compare
708c2ecf20Sopenharmony_ci      timers, and a watchdog. Currently only the GIC Timer is supported.
718c2ecf20Sopenharmony_ci    properties:
728c2ecf20Sopenharmony_ci      compatible:
738c2ecf20Sopenharmony_ci        const: mti,gic-timer
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci      interrupts:
768c2ecf20Sopenharmony_ci        description: |
778c2ecf20Sopenharmony_ci          Interrupt for the GIC local timer, so normally it's suppose to be of
788c2ecf20Sopenharmony_ci          <GIC_LOCAL X IRQ_TYPE_NONE> format.
798c2ecf20Sopenharmony_ci        maxItems: 1
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci      clocks:
828c2ecf20Sopenharmony_ci        maxItems: 1
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci      clock-frequency: true
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci    required:
878c2ecf20Sopenharmony_ci      - compatible
888c2ecf20Sopenharmony_ci      - interrupts
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci    oneOf:
918c2ecf20Sopenharmony_ci      - required:
928c2ecf20Sopenharmony_ci          - clocks
938c2ecf20Sopenharmony_ci      - required:
948c2ecf20Sopenharmony_ci          - clock-frequency
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci    additionalProperties: false
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ciadditionalProperties: false
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_cirequired:
1018c2ecf20Sopenharmony_ci  - compatible
1028c2ecf20Sopenharmony_ci  - "#interrupt-cells"
1038c2ecf20Sopenharmony_ci  - interrupt-controller
1048c2ecf20Sopenharmony_ci
1058c2ecf20Sopenharmony_ciexamples:
1068c2ecf20Sopenharmony_ci  - |
1078c2ecf20Sopenharmony_ci    #include <dt-bindings/interrupt-controller/mips-gic.h>
1088c2ecf20Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci    interrupt-controller@1bdc0000 {
1118c2ecf20Sopenharmony_ci      compatible = "mti,gic";
1128c2ecf20Sopenharmony_ci      reg = <0x1bdc0000 0x20000>;
1138c2ecf20Sopenharmony_ci      interrupt-controller;
1148c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
1158c2ecf20Sopenharmony_ci      mti,reserved-cpu-vectors = <7>;
1168c2ecf20Sopenharmony_ci      mti,reserved-ipi-vectors = <40 8>;
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci      timer {
1198c2ecf20Sopenharmony_ci        compatible = "mti,gic-timer";
1208c2ecf20Sopenharmony_ci        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
1218c2ecf20Sopenharmony_ci        clock-frequency = <50000000>;
1228c2ecf20Sopenharmony_ci      };
1238c2ecf20Sopenharmony_ci    };
1248c2ecf20Sopenharmony_ci  - |
1258c2ecf20Sopenharmony_ci    #include <dt-bindings/interrupt-controller/mips-gic.h>
1268c2ecf20Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci    interrupt-controller@1bdc0000 {
1298c2ecf20Sopenharmony_ci      compatible = "mti,gic";
1308c2ecf20Sopenharmony_ci      reg = <0x1bdc0000 0x20000>;
1318c2ecf20Sopenharmony_ci      interrupt-controller;
1328c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci      timer {
1358c2ecf20Sopenharmony_ci        compatible = "mti,gic-timer";
1368c2ecf20Sopenharmony_ci        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
1378c2ecf20Sopenharmony_ci        clocks = <&cpu_pll>;
1388c2ecf20Sopenharmony_ci      };
1398c2ecf20Sopenharmony_ci    };
1408c2ecf20Sopenharmony_ci  - |
1418c2ecf20Sopenharmony_ci    interrupt-controller {
1428c2ecf20Sopenharmony_ci      compatible = "mti,gic";
1438c2ecf20Sopenharmony_ci      interrupt-controller;
1448c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
1458c2ecf20Sopenharmony_ci    };
1468c2ecf20Sopenharmony_ci...
147