summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/interrupt-controller/mti,gic.yaml
blob: 9f0eb3addac43d1e150b6ebac1fc04d2efbb0f95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# SPDX-License-Identifier: GPL-2.0-only
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/mti,gic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MIPS Global Interrupt Controller

maintainers:
  - Paul Burton <paulburton@kernel.org>
  - Thomas Bogendoerfer <tsbogend@alpha.franken.de>

description: |
  The MIPS GIC routes external interrupts to individual VPEs and IRQ pins.
  It also supports local (per-processor) interrupts and software-generated
  interrupts which can be used as IPIs. The GIC also includes a free-running
  global timer, per-CPU count/compare timers, and a watchdog.

properties:
  compatible:
    const: mti,gic

  "#interrupt-cells":
    const: 3
    description: |
      The 1st cell is the type of interrupt: local or shared defined in the
      file 'dt-bindings/interrupt-controller/mips-gic.h'. The 2nd cell is the
      GIC interrupt number. The 3d cell encodes the interrupt flags setting up
      the IRQ trigger modes, which are defined in the file
      'dt-bindings/interrupt-controller/irq.h'.

  reg:
    description: |
      Base address and length of the GIC registers space. If not present,
      the base address reported by the hardware GCR_GIC_BASE will be used.
    maxItems: 1

  interrupt-controller: true

  mti,reserved-cpu-vectors:
    description: |
      Specifies the list of CPU interrupt vectors to which the GIC may not
      route interrupts. This property is ignored if the CPU is started in EIC
      mode.
    allOf:
      - $ref: /schemas/types.yaml#definitions/uint32-array
      - minItems: 1
        maxItems: 6
        uniqueItems: true
        items:
          minimum: 2
          maximum: 7

  mti,reserved-ipi-vectors:
    description: |
      Specifies the range of GIC interrupts that are reserved for IPIs.
      It accepts two values: the 1st is the starting interrupt and the 2nd is
      the size of the reserved range. If not specified, the driver will
      allocate the last (2 * number of VPEs in the system).
    allOf:
      - $ref: /schemas/types.yaml#definitions/uint32-array
      - items:
          - minimum: 0
            maximum: 254
          - minimum: 2
            maximum: 254

  timer:
    type: object
    description: |
      MIPS GIC includes a free-running global timer, per-CPU count/compare
      timers, and a watchdog. Currently only the GIC Timer is supported.
    properties:
      compatible:
        const: mti,gic-timer

      interrupts:
        description: |
          Interrupt for the GIC local timer, so normally it's suppose to be of
          <GIC_LOCAL X IRQ_TYPE_NONE> format.
        maxItems: 1

      clocks:
        maxItems: 1

      clock-frequency: true

    required:
      - compatible
      - interrupts

    oneOf:
      - required:
          - clocks
      - required:
          - clock-frequency

    additionalProperties: false

unevaluatedProperties: false

required:
  - compatible
  - "#interrupt-cells"
  - interrupt-controller

examples:
  - |
    #include <dt-bindings/interrupt-controller/mips-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    interrupt-controller@1bdc0000 {
      compatible = "mti,gic";
      reg = <0x1bdc0000 0x20000>;
      interrupt-controller;
      #interrupt-cells = <3>;
      mti,reserved-cpu-vectors = <7>;
      mti,reserved-ipi-vectors = <40 8>;

      timer {
        compatible = "mti,gic-timer";
        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
        clock-frequency = <50000000>;
      };
    };
  - |
    #include <dt-bindings/interrupt-controller/mips-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    interrupt-controller@1bdc0000 {
      compatible = "mti,gic";
      reg = <0x1bdc0000 0x20000>;
      interrupt-controller;
      #interrupt-cells = <3>;

      timer {
        compatible = "mti,gic-timer";
        interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
        clocks = <&cpu_pll>;
      };
    };
  - |
    interrupt-controller {
      compatible = "mti,gic";
      interrupt-controller;
      #interrupt-cells = <3>;
    };
...