xref: /openbmc/linux/Documentation/devicetree/bindings/interrupt-controller/brcm,bcm7120-l2-intc.yaml (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
107f7f686SFlorian Fainelli# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
207f7f686SFlorian Fainelli%YAML 1.2
307f7f686SFlorian Fainelli---
407f7f686SFlorian Fainelli$id: http://devicetree.org/schemas/interrupt-controller/brcm,bcm7120-l2-intc.yaml#
507f7f686SFlorian Fainelli$schema: http://devicetree.org/meta-schemas/core.yaml#
607f7f686SFlorian Fainelli
794360916SFlorian Fainellititle: Broadcom BCM7120-style Level 2 and Broadcom BCM3380 Level 1 / Level 2
807f7f686SFlorian Fainelli
907f7f686SFlorian Fainellimaintainers:
1007f7f686SFlorian Fainelli  - Florian Fainelli <f.fainelli@gmail.com>
1107f7f686SFlorian Fainelli
1207f7f686SFlorian Fainellidescription: >
1307f7f686SFlorian Fainelli  This interrupt controller hardware is a second level interrupt controller that
1407f7f686SFlorian Fainelli  is hooked to a parent interrupt controller: e.g: ARM GIC for ARM-based
1507f7f686SFlorian Fainelli  platforms. It can be found on BCM7xxx products starting with BCM7120.
1607f7f686SFlorian Fainelli
1707f7f686SFlorian Fainelli  Such an interrupt controller has the following hardware design:
1807f7f686SFlorian Fainelli
1907f7f686SFlorian Fainelli  - outputs multiple interrupts signals towards its interrupt controller parent
2007f7f686SFlorian Fainelli
2107f7f686SFlorian Fainelli  - controls how some of the interrupts will be flowing, whether they will
2207f7f686SFlorian Fainelli    directly output an interrupt signal towards the interrupt controller parent,
2307f7f686SFlorian Fainelli    or if they will output an interrupt signal at this 2nd level interrupt
2407f7f686SFlorian Fainelli    controller, in particular for UARTs
2507f7f686SFlorian Fainelli
2607f7f686SFlorian Fainelli  - has one 32-bit enable word and one 32-bit status word
2707f7f686SFlorian Fainelli
2807f7f686SFlorian Fainelli  - no atomic set/clear operations
2907f7f686SFlorian Fainelli
3007f7f686SFlorian Fainelli  - not all bits within the interrupt controller actually map to an interrupt
3107f7f686SFlorian Fainelli
3207f7f686SFlorian Fainelli  The typical hardware layout for this controller is represented below:
3307f7f686SFlorian Fainelli
3407f7f686SFlorian Fainelli  2nd level interrupt line		Outputs for the parent controller (e.g: ARM GIC)
3507f7f686SFlorian Fainelli
3607f7f686SFlorian Fainelli  0 -----[ MUX ] ------------|==========> GIC interrupt 75
3707f7f686SFlorian Fainelli            \-----------\
3807f7f686SFlorian Fainelli                         |
3907f7f686SFlorian Fainelli  1 -----[ MUX ] --------)---|==========> GIC interrupt 76
4007f7f686SFlorian Fainelli            \------------|
4107f7f686SFlorian Fainelli                         |
4207f7f686SFlorian Fainelli  2 -----[ MUX ] --------)---|==========> GIC interrupt 77
4307f7f686SFlorian Fainelli            \------------|
4407f7f686SFlorian Fainelli                         |
4507f7f686SFlorian Fainelli  3 ---------------------|
4607f7f686SFlorian Fainelli  4 ---------------------|
4707f7f686SFlorian Fainelli  5 ---------------------|
4807f7f686SFlorian Fainelli  7 ---------------------|---|===========> GIC interrupt 66
4907f7f686SFlorian Fainelli  9 ---------------------|
5007f7f686SFlorian Fainelli  10 --------------------|
5107f7f686SFlorian Fainelli  11 --------------------/
5207f7f686SFlorian Fainelli
5307f7f686SFlorian Fainelli  6 ------------------------\
5407f7f686SFlorian Fainelli                            |===========> GIC interrupt 64
5507f7f686SFlorian Fainelli  8 ------------------------/
5607f7f686SFlorian Fainelli
5707f7f686SFlorian Fainelli  12 ........................ X
5807f7f686SFlorian Fainelli  13 ........................ X           (not connected)
5907f7f686SFlorian Fainelli  ..
6007f7f686SFlorian Fainelli  31 ........................ X
6107f7f686SFlorian Fainelli
62*47aab533SBjorn Helgaas  The BCM3380 Level 1 / Level 2 interrupt controller shows up in various forms
6394360916SFlorian Fainelli  on many BCM338x/BCM63xx chipsets. It has the following properties:
6494360916SFlorian Fainelli
6594360916SFlorian Fainelli  - outputs a single interrupt signal to its interrupt controller parent
6694360916SFlorian Fainelli
6794360916SFlorian Fainelli  - contains one or more enable/status word pairs, which often appear at
6894360916SFlorian Fainelli    different offsets in different blocks
6994360916SFlorian Fainelli
7094360916SFlorian Fainelli  - no atomic set/clear operations
7194360916SFlorian Fainelli
7207f7f686SFlorian FainelliallOf:
7307f7f686SFlorian Fainelli  - $ref: /schemas/interrupt-controller.yaml#
7407f7f686SFlorian Fainelli
7507f7f686SFlorian Fainelliproperties:
7607f7f686SFlorian Fainelli  compatible:
7794360916SFlorian Fainelli    items:
7894360916SFlorian Fainelli      - enum:
7994360916SFlorian Fainelli          - brcm,bcm7120-l2-intc
8094360916SFlorian Fainelli          - brcm,bcm3380-l2-intc
8107f7f686SFlorian Fainelli
8207f7f686SFlorian Fainelli  reg:
8394360916SFlorian Fainelli    minItems: 1
8494360916SFlorian Fainelli    maxItems: 4
8507f7f686SFlorian Fainelli    description: >
8607f7f686SFlorian Fainelli      Specifies the base physical address and size of the registers
8707f7f686SFlorian Fainelli
8807f7f686SFlorian Fainelli  interrupt-controller: true
8907f7f686SFlorian Fainelli
9007f7f686SFlorian Fainelli  "#interrupt-cells":
9107f7f686SFlorian Fainelli    const: 1
9207f7f686SFlorian Fainelli
9307f7f686SFlorian Fainelli  interrupts:
9407f7f686SFlorian Fainelli    minItems: 1
9507f7f686SFlorian Fainelli    maxItems: 32
9607f7f686SFlorian Fainelli
9707f7f686SFlorian Fainelli  brcm,int-map-mask:
9807f7f686SFlorian Fainelli    $ref: /schemas/types.yaml#/definitions/uint32-array
9907f7f686SFlorian Fainelli    description: >
10007f7f686SFlorian Fainelli      32-bits bit mask describing how many and which interrupts are wired to
10107f7f686SFlorian Fainelli      this 2nd level interrupt controller, and how they match their respective
10207f7f686SFlorian Fainelli      interrupt parents. Should match exactly the number of interrupts
10307f7f686SFlorian Fainelli      specified in the 'interrupts' property.
10407f7f686SFlorian Fainelli
10507f7f686SFlorian Fainelli  brcm,irq-can-wake:
10607f7f686SFlorian Fainelli    type: boolean
10707f7f686SFlorian Fainelli    description: >
10807f7f686SFlorian Fainelli      If present, this means the L2 controller can be used as a wakeup source
10907f7f686SFlorian Fainelli      for system suspend/resume.
11007f7f686SFlorian Fainelli
11107f7f686SFlorian Fainelli  brcm,int-fwd-mask:
1120be465c6SRob Herring    $ref: /schemas/types.yaml#/definitions/uint32-array
1130be465c6SRob Herring    maxItems: 1
11407f7f686SFlorian Fainelli    description: >
11507f7f686SFlorian Fainelli      if present, a bit mask to configure the interrupts which have a mux gate,
11607f7f686SFlorian Fainelli      typically UARTs. Setting these bits will make their respective interrupt
11707f7f686SFlorian Fainelli      outputs bypass this 2nd level interrupt controller completely; it is
11807f7f686SFlorian Fainelli      completely transparent for the interrupt controller parent. This should
11907f7f686SFlorian Fainelli      have one 32-bit word per enable/status pair.
12007f7f686SFlorian Fainelli
12107f7f686SFlorian FainelliadditionalProperties: false
12207f7f686SFlorian Fainelli
12307f7f686SFlorian Fainellirequired:
12407f7f686SFlorian Fainelli  - compatible
12507f7f686SFlorian Fainelli  - reg
12607f7f686SFlorian Fainelli  - interrupt-controller
12707f7f686SFlorian Fainelli  - "#interrupt-cells"
12807f7f686SFlorian Fainelli  - interrupts
12907f7f686SFlorian Fainelli
13007f7f686SFlorian Fainelliexamples:
13107f7f686SFlorian Fainelli  - |
13207f7f686SFlorian Fainelli    irq0_intc: interrupt-controller@f0406800 {
13307f7f686SFlorian Fainelli      compatible = "brcm,bcm7120-l2-intc";
13407f7f686SFlorian Fainelli      interrupt-parent = <&intc>;
13507f7f686SFlorian Fainelli      #interrupt-cells = <1>;
13607f7f686SFlorian Fainelli      reg = <0xf0406800 0x8>;
13707f7f686SFlorian Fainelli      interrupt-controller;
13807f7f686SFlorian Fainelli      interrupts = <0x0 0x42 0x0>, <0x0 0x40 0x0>;
13907f7f686SFlorian Fainelli      brcm,int-map-mask = <0xeb8>, <0x140>;
14007f7f686SFlorian Fainelli      brcm,int-fwd-mask = <0x7>;
14107f7f686SFlorian Fainelli    };
14294360916SFlorian Fainelli
14394360916SFlorian Fainelli  - |
14494360916SFlorian Fainelli    irq1_intc: interrupt-controller@10000020 {
14594360916SFlorian Fainelli       compatible = "brcm,bcm3380-l2-intc";
14694360916SFlorian Fainelli       reg = <0x10000024 0x4>, <0x1000002c 0x4>,
14794360916SFlorian Fainelli             <0x10000020 0x4>, <0x10000028 0x4>;
14894360916SFlorian Fainelli       interrupt-controller;
14994360916SFlorian Fainelli       #interrupt-cells = <1>;
15094360916SFlorian Fainelli       interrupt-parent = <&cpu_intc>;
15194360916SFlorian Fainelli       interrupts = <2>;
15294360916SFlorian Fainelli    };
153