Documentation / devicetree / bindings / interrupt-controller / mti,gic.yaml


Based on kernel version 6.8. Page generated on 2024-03-11 21:26 EST.

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
# 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.
    $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).
    $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

additionalProperties: 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>;
    };
...