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