1*4882a593SmuzhiyunBCM2835 Top-Level ("ARMCTRL") Interrupt Controller
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunThe BCM2835 contains a custom top-level interrupt controller, which supports
4*4882a593Smuzhiyun72 interrupt sources using a 2-level register scheme. The interrupt
5*4882a593Smuzhiyuncontroller, or the HW block containing it, is referred to occasionally
6*4882a593Smuzhiyunas "armctrl" in the SoC documentation, hence naming of this binding.
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunThe BCM2836 contains the same interrupt controller with the same
9*4882a593Smuzhiyuninterrupts, but the per-CPU interrupt controller is the root, and an
10*4882a593Smuzhiyuninterrupt there indicates that the ARMCTRL has an interrupt to handle.
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunRequired properties:
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun- compatible : should be "brcm,bcm2835-armctrl-ic" or
15*4882a593Smuzhiyun                 "brcm,bcm2836-armctrl-ic"
16*4882a593Smuzhiyun- reg : Specifies base physical address and size of the registers.
17*4882a593Smuzhiyun- interrupt-controller : Identifies the node as an interrupt controller
18*4882a593Smuzhiyun- #interrupt-cells : Specifies the number of cells needed to encode an
19*4882a593Smuzhiyun  interrupt source. The value shall be 2.
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun  The 1st cell is the interrupt bank; 0 for interrupts in the "IRQ basic
22*4882a593Smuzhiyun  pending" register, or 1/2 respectively for interrupts in the "IRQ pending
23*4882a593Smuzhiyun  1/2" register.
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun  The 2nd cell contains the interrupt number within the bank. Valid values
26*4882a593Smuzhiyun  are 0..7 for bank 0, and 0..31 for bank 1.
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunAdditional required properties for brcm,bcm2836-armctrl-ic:
29*4882a593Smuzhiyun- interrupts : Specifies the interrupt on the parent for this interrupt
30*4882a593Smuzhiyun  controller to handle.
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunThe interrupt sources are as follows:
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunBank 0:
35*4882a593Smuzhiyun0: ARM_TIMER
36*4882a593Smuzhiyun1: ARM_MAILBOX
37*4882a593Smuzhiyun2: ARM_DOORBELL_0
38*4882a593Smuzhiyun3: ARM_DOORBELL_1
39*4882a593Smuzhiyun4: VPU0_HALTED
40*4882a593Smuzhiyun5: VPU1_HALTED
41*4882a593Smuzhiyun6: ILLEGAL_TYPE0
42*4882a593Smuzhiyun7: ILLEGAL_TYPE1
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunBank 1:
45*4882a593Smuzhiyun0: TIMER0
46*4882a593Smuzhiyun1: TIMER1
47*4882a593Smuzhiyun2: TIMER2
48*4882a593Smuzhiyun3: TIMER3
49*4882a593Smuzhiyun4: CODEC0
50*4882a593Smuzhiyun5: CODEC1
51*4882a593Smuzhiyun6: CODEC2
52*4882a593Smuzhiyun7: VC_JPEG
53*4882a593Smuzhiyun8: ISP
54*4882a593Smuzhiyun9: VC_USB
55*4882a593Smuzhiyun10: VC_3D
56*4882a593Smuzhiyun11: TRANSPOSER
57*4882a593Smuzhiyun12: MULTICORESYNC0
58*4882a593Smuzhiyun13: MULTICORESYNC1
59*4882a593Smuzhiyun14: MULTICORESYNC2
60*4882a593Smuzhiyun15: MULTICORESYNC3
61*4882a593Smuzhiyun16: DMA0
62*4882a593Smuzhiyun17: DMA1
63*4882a593Smuzhiyun18: VC_DMA2
64*4882a593Smuzhiyun19: VC_DMA3
65*4882a593Smuzhiyun20: DMA4
66*4882a593Smuzhiyun21: DMA5
67*4882a593Smuzhiyun22: DMA6
68*4882a593Smuzhiyun23: DMA7
69*4882a593Smuzhiyun24: DMA8
70*4882a593Smuzhiyun25: DMA9
71*4882a593Smuzhiyun26: DMA10
72*4882a593Smuzhiyun27: DMA11-14 - shared interrupt for DMA 11 to 14
73*4882a593Smuzhiyun28: DMAALL - triggers on all dma interrupts (including chanel 15)
74*4882a593Smuzhiyun29: AUX
75*4882a593Smuzhiyun30: ARM
76*4882a593Smuzhiyun31: VPUDMA
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunBank 2:
79*4882a593Smuzhiyun0: HOSTPORT
80*4882a593Smuzhiyun1: VIDEOSCALER
81*4882a593Smuzhiyun2: CCP2TX
82*4882a593Smuzhiyun3: SDC
83*4882a593Smuzhiyun4: DSI0
84*4882a593Smuzhiyun5: AVE
85*4882a593Smuzhiyun6: CAM0
86*4882a593Smuzhiyun7: CAM1
87*4882a593Smuzhiyun8: HDMI0
88*4882a593Smuzhiyun9: HDMI1
89*4882a593Smuzhiyun10: PIXELVALVE1
90*4882a593Smuzhiyun11: I2CSPISLV
91*4882a593Smuzhiyun12: DSI1
92*4882a593Smuzhiyun13: PWA0
93*4882a593Smuzhiyun14: PWA1
94*4882a593Smuzhiyun15: CPR
95*4882a593Smuzhiyun16: SMI
96*4882a593Smuzhiyun17: GPIO0
97*4882a593Smuzhiyun18: GPIO1
98*4882a593Smuzhiyun19: GPIO2
99*4882a593Smuzhiyun20: GPIO3
100*4882a593Smuzhiyun21: VC_I2C
101*4882a593Smuzhiyun22: VC_SPI
102*4882a593Smuzhiyun23: VC_I2SPCM
103*4882a593Smuzhiyun24: VC_SDIO
104*4882a593Smuzhiyun25: VC_UART
105*4882a593Smuzhiyun26: SLIMBUS
106*4882a593Smuzhiyun27: VEC
107*4882a593Smuzhiyun28: CPG
108*4882a593Smuzhiyun29: RNG
109*4882a593Smuzhiyun30: VC_ARASANSDIO
110*4882a593Smuzhiyun31: AVSPMON
111*4882a593Smuzhiyun
112*4882a593SmuzhiyunExample:
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun/* BCM2835, first level */
115*4882a593Smuzhiyunintc: interrupt-controller {
116*4882a593Smuzhiyun	compatible = "brcm,bcm2835-armctrl-ic";
117*4882a593Smuzhiyun	reg = <0x7e00b200 0x200>;
118*4882a593Smuzhiyun	interrupt-controller;
119*4882a593Smuzhiyun	#interrupt-cells = <2>;
120*4882a593Smuzhiyun};
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun/* BCM2836, second level */
123*4882a593Smuzhiyunintc: interrupt-controller {
124*4882a593Smuzhiyun	compatible = "brcm,bcm2836-armctrl-ic";
125*4882a593Smuzhiyun	reg = <0x7e00b200 0x200>;
126*4882a593Smuzhiyun	interrupt-controller;
127*4882a593Smuzhiyun	#interrupt-cells = <2>;
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun	interrupt-parent = <&local_intc>;
130*4882a593Smuzhiyun	interrupts = <8>;
131*4882a593Smuzhiyun};
132