Documentation / devicetree / bindings / interrupt-controller / brcm,bcm2835-armctrl-ic.yaml


Based on kernel version 6.16. Page generated on 2025-08-06 08:57 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/brcm,bcm2835-armctrl-ic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: BCM2835 ARMCTRL Interrupt Controller

maintainers:
  - Florian Fainelli <florian.fainelli@broadcom.com>
  - Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>

description: >
  The BCM2835 contains a custom top-level interrupt controller, which supports
  72 interrupt sources using a 2-level register scheme. The interrupt
  controller, or the HW block containing it, is referred to occasionally as
  "armctrl" in the SoC documentation, hence naming of this binding.
 
  The BCM2836 contains the same interrupt controller with the same interrupts,
  but the per-CPU interrupt controller is the root, and an interrupt there
  indicates that the ARMCTRL has an interrupt to handle.
 
  The interrupt sources are as follows:
 
  Bank 0:
    0: ARM_TIMER
    1: ARM_MAILBOX
    2: ARM_DOORBELL_0
    3: ARM_DOORBELL_1
    4: VPU0_HALTED
    5: VPU1_HALTED
    6: ILLEGAL_TYPE0
    7: ILLEGAL_TYPE1
 
  Bank 1:
    0: TIMER0
    1: TIMER1
    2: TIMER2
    3: TIMER3
    4: CODEC0
    5: CODEC1
    6: CODEC2
    7: VC_JPEG
    8: ISP
    9: VC_USB
    10: VC_3D
    11: TRANSPOSER
    12: MULTICORESYNC0
    13: MULTICORESYNC1
    14: MULTICORESYNC2
    15: MULTICORESYNC3
    16: DMA0
    17: DMA1
    18: VC_DMA2
    19: VC_DMA3
    20: DMA4
    21: DMA5
    22: DMA6
    23: DMA7
    24: DMA8
    25: DMA9
    26: DMA10
    27: DMA11-14 - shared interrupt for DMA 11 to 14
    28: DMAALL - triggers on all dma interrupts (including channel 15)
    29: AUX
    30: ARM
    31: VPUDMA
 
  Bank 2:
    0: HOSTPORT
    1: VIDEOSCALER
    2: CCP2TX
    3: SDC
    4: DSI0
    5: AVE
    6: CAM0
    7: CAM1
    8: HDMI0
    9: HDMI1
    10: PIXELVALVE1
    11: I2CSPISLV
    12: DSI1
    13: PWA0
    14: PWA1
    15: CPR
    16: SMI
    17: GPIO0
    18: GPIO1
    19: GPIO2
    20: GPIO3
    21: VC_I2C
    22: VC_SPI
    23: VC_I2SPCM
    24: VC_SDIO
    25: VC_UART
    26: SLIMBUS
    27: VEC
    28: CPG
    29: RNG
    30: VC_ARASANSDIO
    31: AVSPMON

properties:
  compatible:
    enum:
      - brcm,bcm2835-armctrl-ic
      - brcm,bcm2836-armctrl-ic

  reg:
    maxItems: 1

  interrupt-controller: true
 
  '#interrupt-cells':
    const: 2
    description: >
      The 1st cell is the interrupt bank; 0 for interrupts in the "IRQ basic
      pending" register, or 1/2 respectively for interrupts in the "IRQ pending
      1/2" register.
 
      The 2nd cell contains the interrupt number within the bank. Valid values
      are 0..7 for bank 0, and 0..31 for bank 1.

  interrupts:
    maxItems: 1

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

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: brcm,bcm2836-armctrl-ic
    then:
      required:
        - interrupts
    else:
      properties:
        interrupts: false

additionalProperties: false

examples:
  - |
    interrupt-controller@7e00b200 {
        compatible = "brcm,bcm2835-armctrl-ic";
        reg = <0x7e00b200 0x200>;
        interrupt-controller;
        #interrupt-cells = <2>;
    };
  - |
    interrupt-controller@7e00b200 {
        compatible = "brcm,bcm2836-armctrl-ic";
        reg = <0x7e00b200 0x200>;
        interrupt-controller;
        #interrupt-cells = <2>;
        interrupts = <8>;
    };