# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/arm,vic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ARM Vectored Interrupt Controller

maintainers:
  - Rob Herring <robh@kernel.org>

description: |+
  One or more Vectored Interrupt Controllers (VIC's) can be connected in an
  ARM system for interrupt routing.  For multiple controllers they can either
  be nested or have the outputs wire-OR'd together.

allOf:
  - $ref: /schemas/interrupt-controller.yaml#

properties:
  compatible:
    enum:
      - arm,pl190-vic
      - arm,pl192-vic
      - arm,versatile-vic

  interrupt-controller: true

  "#interrupt-cells":
    const: 1
    description:
      The number of cells to define the interrupts.  It must be 1 as the
      VIC has no configuration options for interrupt sources. The single
      cell defines the interrupt number.

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  valid-mask:
    description:
      A one cell big bit mask of valid interrupt sources. Each bit
      represents single interrupt source, starting from source 0 at
      LSb and ending at source 31 at MSb. A bit that is set means
      that the source is wired and clear means otherwise. If unspecified,
      defaults to all valid.
    $ref: /schemas/types.yaml#/definitions/uint32

  valid-wakeup-mask:
    description:
      A one cell big bit mask of interrupt sources that can be configured
      as wake up source for the system. Order of bits is the same as for
      valid-mask property. A set bit means that this interrupt source
      can be configured as a wake up source for the system. If unspecied,
      defaults to all interrupt sources configurable as wake up sources.
    $ref: /schemas/types.yaml#/definitions/uint32

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

additionalProperties: false

examples:
  - |
    // PL192 VIC
    vic0: interrupt-controller@60000 {
      compatible = "arm,pl192-vic";
      interrupt-controller;
      #interrupt-cells = <1>;
      reg = <0x60000 0x1000>;

      valid-mask = <0xffffff7f>;
      valid-wakeup-mask = <0x0000ff7f>;
    };

...
