xref: /openbmc/linux/Documentation/devicetree/bindings/interrupt-controller/brcm,bcm7120-l2-intc.yaml (revision 07f7f6867ecabe9c807bb17ce7449bd6bfd3a8dc)
1*07f7f686SFlorian Fainelli# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*07f7f686SFlorian Fainelli%YAML 1.2
3*07f7f686SFlorian Fainelli---
4*07f7f686SFlorian Fainelli$id: http://devicetree.org/schemas/interrupt-controller/brcm,bcm7120-l2-intc.yaml#
5*07f7f686SFlorian Fainelli$schema: http://devicetree.org/meta-schemas/core.yaml#
6*07f7f686SFlorian Fainelli
7*07f7f686SFlorian Fainellititle: Broadcom BCM7120-style Level 2 interrupt controller
8*07f7f686SFlorian Fainelli
9*07f7f686SFlorian Fainellimaintainers:
10*07f7f686SFlorian Fainelli  - Florian Fainelli <f.fainelli@gmail.com>
11*07f7f686SFlorian Fainelli
12*07f7f686SFlorian Fainellidescription: >
13*07f7f686SFlorian Fainelli  This interrupt controller hardware is a second level interrupt controller that
14*07f7f686SFlorian Fainelli  is hooked to a parent interrupt controller: e.g: ARM GIC for ARM-based
15*07f7f686SFlorian Fainelli  platforms. It can be found on BCM7xxx products starting with BCM7120.
16*07f7f686SFlorian Fainelli
17*07f7f686SFlorian Fainelli  Such an interrupt controller has the following hardware design:
18*07f7f686SFlorian Fainelli
19*07f7f686SFlorian Fainelli  - outputs multiple interrupts signals towards its interrupt controller parent
20*07f7f686SFlorian Fainelli
21*07f7f686SFlorian Fainelli  - controls how some of the interrupts will be flowing, whether they will
22*07f7f686SFlorian Fainelli    directly output an interrupt signal towards the interrupt controller parent,
23*07f7f686SFlorian Fainelli    or if they will output an interrupt signal at this 2nd level interrupt
24*07f7f686SFlorian Fainelli    controller, in particular for UARTs
25*07f7f686SFlorian Fainelli
26*07f7f686SFlorian Fainelli  - has one 32-bit enable word and one 32-bit status word
27*07f7f686SFlorian Fainelli
28*07f7f686SFlorian Fainelli  - no atomic set/clear operations
29*07f7f686SFlorian Fainelli
30*07f7f686SFlorian Fainelli  - not all bits within the interrupt controller actually map to an interrupt
31*07f7f686SFlorian Fainelli
32*07f7f686SFlorian Fainelli  The typical hardware layout for this controller is represented below:
33*07f7f686SFlorian Fainelli
34*07f7f686SFlorian Fainelli  2nd level interrupt line		Outputs for the parent controller (e.g: ARM GIC)
35*07f7f686SFlorian Fainelli
36*07f7f686SFlorian Fainelli  0 -----[ MUX ] ------------|==========> GIC interrupt 75
37*07f7f686SFlorian Fainelli            \-----------\
38*07f7f686SFlorian Fainelli                         |
39*07f7f686SFlorian Fainelli  1 -----[ MUX ] --------)---|==========> GIC interrupt 76
40*07f7f686SFlorian Fainelli            \------------|
41*07f7f686SFlorian Fainelli                         |
42*07f7f686SFlorian Fainelli  2 -----[ MUX ] --------)---|==========> GIC interrupt 77
43*07f7f686SFlorian Fainelli            \------------|
44*07f7f686SFlorian Fainelli                         |
45*07f7f686SFlorian Fainelli  3 ---------------------|
46*07f7f686SFlorian Fainelli  4 ---------------------|
47*07f7f686SFlorian Fainelli  5 ---------------------|
48*07f7f686SFlorian Fainelli  7 ---------------------|---|===========> GIC interrupt 66
49*07f7f686SFlorian Fainelli  9 ---------------------|
50*07f7f686SFlorian Fainelli  10 --------------------|
51*07f7f686SFlorian Fainelli  11 --------------------/
52*07f7f686SFlorian Fainelli
53*07f7f686SFlorian Fainelli  6 ------------------------\
54*07f7f686SFlorian Fainelli                            |===========> GIC interrupt 64
55*07f7f686SFlorian Fainelli  8 ------------------------/
56*07f7f686SFlorian Fainelli
57*07f7f686SFlorian Fainelli  12 ........................ X
58*07f7f686SFlorian Fainelli  13 ........................ X           (not connected)
59*07f7f686SFlorian Fainelli  ..
60*07f7f686SFlorian Fainelli  31 ........................ X
61*07f7f686SFlorian Fainelli
62*07f7f686SFlorian FainelliallOf:
63*07f7f686SFlorian Fainelli  - $ref: /schemas/interrupt-controller.yaml#
64*07f7f686SFlorian Fainelli
65*07f7f686SFlorian Fainelliproperties:
66*07f7f686SFlorian Fainelli  compatible:
67*07f7f686SFlorian Fainelli    const: brcm,bcm7120-l2-intc
68*07f7f686SFlorian Fainelli
69*07f7f686SFlorian Fainelli  reg:
70*07f7f686SFlorian Fainelli    maxItems: 1
71*07f7f686SFlorian Fainelli    description: >
72*07f7f686SFlorian Fainelli      Specifies the base physical address and size of the registers
73*07f7f686SFlorian Fainelli
74*07f7f686SFlorian Fainelli  interrupt-controller: true
75*07f7f686SFlorian Fainelli
76*07f7f686SFlorian Fainelli  "#interrupt-cells":
77*07f7f686SFlorian Fainelli    const: 1
78*07f7f686SFlorian Fainelli
79*07f7f686SFlorian Fainelli  interrupts:
80*07f7f686SFlorian Fainelli    minItems: 1
81*07f7f686SFlorian Fainelli    maxItems: 32
82*07f7f686SFlorian Fainelli
83*07f7f686SFlorian Fainelli  brcm,int-map-mask:
84*07f7f686SFlorian Fainelli    $ref: /schemas/types.yaml#/definitions/uint32-array
85*07f7f686SFlorian Fainelli    description: >
86*07f7f686SFlorian Fainelli      32-bits bit mask describing how many and which interrupts are wired to
87*07f7f686SFlorian Fainelli      this 2nd level interrupt controller, and how they match their respective
88*07f7f686SFlorian Fainelli      interrupt parents. Should match exactly the number of interrupts
89*07f7f686SFlorian Fainelli      specified in the 'interrupts' property.
90*07f7f686SFlorian Fainelli
91*07f7f686SFlorian Fainelli  brcm,irq-can-wake:
92*07f7f686SFlorian Fainelli    type: boolean
93*07f7f686SFlorian Fainelli    description: >
94*07f7f686SFlorian Fainelli      If present, this means the L2 controller can be used as a wakeup source
95*07f7f686SFlorian Fainelli      for system suspend/resume.
96*07f7f686SFlorian Fainelli
97*07f7f686SFlorian Fainelli  brcm,int-fwd-mask:
98*07f7f686SFlorian Fainelli    $ref: /schemas/types.yaml#/definitions/uint32
99*07f7f686SFlorian Fainelli    description: >
100*07f7f686SFlorian Fainelli      if present, a bit mask to configure the interrupts which have a mux gate,
101*07f7f686SFlorian Fainelli      typically UARTs. Setting these bits will make their respective interrupt
102*07f7f686SFlorian Fainelli      outputs bypass this 2nd level interrupt controller completely; it is
103*07f7f686SFlorian Fainelli      completely transparent for the interrupt controller parent. This should
104*07f7f686SFlorian Fainelli      have one 32-bit word per enable/status pair.
105*07f7f686SFlorian Fainelli
106*07f7f686SFlorian FainelliadditionalProperties: false
107*07f7f686SFlorian Fainelli
108*07f7f686SFlorian Fainellirequired:
109*07f7f686SFlorian Fainelli  - compatible
110*07f7f686SFlorian Fainelli  - reg
111*07f7f686SFlorian Fainelli  - interrupt-controller
112*07f7f686SFlorian Fainelli  - "#interrupt-cells"
113*07f7f686SFlorian Fainelli  - interrupts
114*07f7f686SFlorian Fainelli
115*07f7f686SFlorian Fainelliexamples:
116*07f7f686SFlorian Fainelli  - |
117*07f7f686SFlorian Fainelli    irq0_intc: interrupt-controller@f0406800 {
118*07f7f686SFlorian Fainelli      compatible = "brcm,bcm7120-l2-intc";
119*07f7f686SFlorian Fainelli      interrupt-parent = <&intc>;
120*07f7f686SFlorian Fainelli      #interrupt-cells = <1>;
121*07f7f686SFlorian Fainelli      reg = <0xf0406800 0x8>;
122*07f7f686SFlorian Fainelli      interrupt-controller;
123*07f7f686SFlorian Fainelli      interrupts = <0x0 0x42 0x0>, <0x0 0x40 0x0>;
124*07f7f686SFlorian Fainelli      brcm,int-map-mask = <0xeb8>, <0x140>;
125*07f7f686SFlorian Fainelli      brcm,int-fwd-mask = <0x7>;
126*07f7f686SFlorian Fainelli    };
127