aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.yaml
blob: 625eb22bedf0b5b53edd7439a00bbcbce62d159e (plain) (blame)
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>;
    };