18c2ecf20Sopenharmony_ciBroadcom BCM7038-style Level 1 interrupt controller
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ciThis block is a first level interrupt controller that is typically connected
48c2ecf20Sopenharmony_cidirectly to one of the HW INT lines on each CPU.  Every BCM7xxx set-top chip
58c2ecf20Sopenharmony_cisince BCM7038 has contained this hardware.
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ciKey elements of the hardware design include:
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci- 64, 96, 128, or 160 incoming level IRQ lines
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci- Most onchip peripherals are wired directly to an L1 input
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci- A separate instance of the register set for each CPU, allowing individual
148c2ecf20Sopenharmony_ci  peripheral IRQs to be routed to any CPU
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci- Atomic mask/unmask operations
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci- No polarity/level/edge settings
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci- No FIFO or priority encoder logic; software is expected to read all
218c2ecf20Sopenharmony_ci  2-5 status words to determine which IRQs are pending
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ciRequired properties:
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci- compatible: should be "brcm,bcm7038-l1-intc"
268c2ecf20Sopenharmony_ci- reg: specifies the base physical address and size of the registers;
278c2ecf20Sopenharmony_ci  the number of supported IRQs is inferred from the size argument
288c2ecf20Sopenharmony_ci- interrupt-controller: identifies the node as an interrupt controller
298c2ecf20Sopenharmony_ci- #interrupt-cells: specifies the number of cells needed to encode an interrupt
308c2ecf20Sopenharmony_ci  source, should be 1.
318c2ecf20Sopenharmony_ci- interrupts: specifies the interrupt line(s) in the interrupt-parent controller
328c2ecf20Sopenharmony_ci  node; valid values depend on the type of parent interrupt controller
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciOptional properties:
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci- brcm,irq-can-wake: If present, this means the L1 controller can be used as a
378c2ecf20Sopenharmony_ci  wakeup source for system suspend/resume.
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ciOptional properties:
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci- brcm,int-fwd-mask: if present, a bit mask to indicate which interrupts
428c2ecf20Sopenharmony_ci  have already been configured by the firmware and should be left unmanaged.
438c2ecf20Sopenharmony_ci  This should have one 32-bit word per status/set/clear/mask group.
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciIf multiple reg ranges and interrupt-parent entries are present on an SMP
468c2ecf20Sopenharmony_cisystem, the driver will allow IRQ SMP affinity to be set up through the
478c2ecf20Sopenharmony_ci/proc/irq/ interface.  In the simplest possible configuration, only one
488c2ecf20Sopenharmony_cireg range and one interrupt-parent is needed.
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciExample:
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciperiph_intc: periph_intc@1041a400 {
538c2ecf20Sopenharmony_ci        compatible = "brcm,bcm7038-l1-intc";
548c2ecf20Sopenharmony_ci        reg = <0x1041a400 0x30 0x1041a600 0x30>;
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci        interrupt-controller;
578c2ecf20Sopenharmony_ci        #interrupt-cells = <1>;
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci        interrupt-parent = <&cpu_intc>;
608c2ecf20Sopenharmony_ci        interrupts = <2>, <3>;
618c2ecf20Sopenharmony_ci};
62