18c2ecf20Sopenharmony_ciBroadcom BCM6345-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.
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciKey elements of the hardware design include:
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci- 32, 64 or 128 incoming level IRQ lines
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci- Most onchip peripherals are wired directly to an L1 input
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci- A separate instance of the register set for each CPU, allowing individual
138c2ecf20Sopenharmony_ci  peripheral IRQs to be routed to any CPU
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci- Contains one or more enable/status word pairs per CPU
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci- No atomic set/clear operations
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci- No polarity/level/edge settings
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci- No FIFO or priority encoder logic; software is expected to read all
228c2ecf20Sopenharmony_ci  2-4 status words to determine which IRQs are pending
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ciRequired properties:
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci- compatible: should be "brcm,bcm<soc>-l1-intc", "brcm,bcm6345-l1-intc"
278c2ecf20Sopenharmony_ci- reg: specifies the base physical address and size of the registers;
288c2ecf20Sopenharmony_ci  the number of supported IRQs is inferred from the size argument
298c2ecf20Sopenharmony_ci- interrupt-controller: identifies the node as an interrupt controller
308c2ecf20Sopenharmony_ci- #interrupt-cells: specifies the number of cells needed to encode an interrupt
318c2ecf20Sopenharmony_ci  source, should be 1.
328c2ecf20Sopenharmony_ci- interrupts: specifies the interrupt line(s) in the interrupt-parent controller
338c2ecf20Sopenharmony_ci  node; valid values depend on the type of parent interrupt controller
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciIf multiple reg ranges and interrupt-parent entries are present on an SMP
368c2ecf20Sopenharmony_cisystem, the driver will allow IRQ SMP affinity to be set up through the
378c2ecf20Sopenharmony_ci/proc/irq/ interface.  In the simplest possible configuration, only one
388c2ecf20Sopenharmony_cireg range and one interrupt-parent is needed.
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ciThe driver operates in native CPU endian by default, there is no support for
418c2ecf20Sopenharmony_cispecifying an alternative endianness.
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ciExample:
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciperiph_intc: interrupt-controller@10000000 {
468c2ecf20Sopenharmony_ci        compatible = "brcm,bcm63168-l1-intc", "brcm,bcm6345-l1-intc";
478c2ecf20Sopenharmony_ci        reg = <0x10000020 0x20>,
488c2ecf20Sopenharmony_ci              <0x10000040 0x20>;
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci        interrupt-controller;
518c2ecf20Sopenharmony_ci        #interrupt-cells = <1>;
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci        interrupt-parent = <&cpu_intc>;
548c2ecf20Sopenharmony_ci        interrupts = <2>, <3>;
558c2ecf20Sopenharmony_ci};
56