# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/brcm,bcm7120-l2-intc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom BCM7120-style Level 2 and Broadcom BCM3380 Level 1 / Level 2

maintainers:
  - Florian Fainelli <f.fainelli@gmail.com>

description: >
  This interrupt controller hardware is a second level interrupt controller that
  is hooked to a parent interrupt controller: e.g: ARM GIC for ARM-based
  platforms. It can be found on BCM7xxx products starting with BCM7120.

  Such an interrupt controller has the following hardware design:

  - outputs multiple interrupts signals towards its interrupt controller parent

  - controls how some of the interrupts will be flowing, whether they will
    directly output an interrupt signal towards the interrupt controller parent,
    or if they will output an interrupt signal at this 2nd level interrupt
    controller, in particular for UARTs

  - has one 32-bit enable word and one 32-bit status word

  - no atomic set/clear operations

  - not all bits within the interrupt controller actually map to an interrupt

  The typical hardware layout for this controller is represented below:

  2nd level interrupt line		Outputs for the parent controller (e.g: ARM GIC)

  0 -----[ MUX ] ------------|==========> GIC interrupt 75
            \-----------\
                         |
  1 -----[ MUX ] --------)---|==========> GIC interrupt 76
            \------------|
                         |
  2 -----[ MUX ] --------)---|==========> GIC interrupt 77
            \------------|
                         |
  3 ---------------------|
  4 ---------------------|
  5 ---------------------|
  7 ---------------------|---|===========> GIC interrupt 66
  9 ---------------------|
  10 --------------------|
  11 --------------------/

  6 ------------------------\
                            |===========> GIC interrupt 64
  8 ------------------------/

  12 ........................ X
  13 ........................ X           (not connected)
  ..
  31 ........................ X

  The BCM3380 Level 1 / Level 2 interrupt controller shows up in various forms
  on many BCM338x/BCM63xx chipsets. It has the following properties:

  - outputs a single interrupt signal to its interrupt controller parent

  - contains one or more enable/status word pairs, which often appear at
    different offsets in different blocks

  - no atomic set/clear operations

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

properties:
  compatible:
    items:
      - enum:
          - brcm,bcm7120-l2-intc
          - brcm,bcm3380-l2-intc

  reg:
    minItems: 1
    maxItems: 4
    description: >
      Specifies the base physical address and size of the registers

  interrupt-controller: true

  "#interrupt-cells":
    const: 1

  interrupts:
    minItems: 1
    maxItems: 32

  brcm,int-map-mask:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    description: >
      32-bits bit mask describing how many and which interrupts are wired to
      this 2nd level interrupt controller, and how they match their respective
      interrupt parents. Should match exactly the number of interrupts
      specified in the 'interrupts' property.

  brcm,irq-can-wake:
    type: boolean
    description: >
      If present, this means the L2 controller can be used as a wakeup source
      for system suspend/resume.

  brcm,int-fwd-mask:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    maxItems: 1
    description: >
      if present, a bit mask to configure the interrupts which have a mux gate,
      typically UARTs. Setting these bits will make their respective interrupt
      outputs bypass this 2nd level interrupt controller completely; it is
      completely transparent for the interrupt controller parent. This should
      have one 32-bit word per enable/status pair.

additionalProperties: false

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

examples:
  - |
    irq0_intc: interrupt-controller@f0406800 {
      compatible = "brcm,bcm7120-l2-intc";
      interrupt-parent = <&intc>;
      #interrupt-cells = <1>;
      reg = <0xf0406800 0x8>;
      interrupt-controller;
      interrupts = <0x0 0x42 0x0>, <0x0 0x40 0x0>;
      brcm,int-map-mask = <0xeb8>, <0x140>;
      brcm,int-fwd-mask = <0x7>;
    };

  - |
    irq1_intc: interrupt-controller@10000020 {
       compatible = "brcm,bcm3380-l2-intc";
       reg = <0x10000024 0x4>, <0x1000002c 0x4>,
             <0x10000020 0x4>, <0x10000028 0x4>;
       interrupt-controller;
       #interrupt-cells = <1>;
       interrupt-parent = <&cpu_intc>;
       interrupts = <2>;
    };
