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