162306a36Sopenharmony_ciBroadcom BCM6345-style Level 1 interrupt controller
262306a36Sopenharmony_ci
362306a36Sopenharmony_ciThis block is a first level interrupt controller that is typically connected
462306a36Sopenharmony_cidirectly to one of the HW INT lines on each CPU.
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciKey elements of the hardware design include:
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci- 32, 64 or 128 incoming level IRQ lines
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci- Most onchip peripherals are wired directly to an L1 input
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci- A separate instance of the register set for each CPU, allowing individual
1362306a36Sopenharmony_ci  peripheral IRQs to be routed to any CPU
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci- Contains one or more enable/status word pairs per CPU
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci- No atomic set/clear operations
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci- No polarity/level/edge settings
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci- No FIFO or priority encoder logic; software is expected to read all
2262306a36Sopenharmony_ci  2-4 status words to determine which IRQs are pending
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciRequired properties:
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci- compatible: should be "brcm,bcm<soc>-l1-intc", "brcm,bcm6345-l1-intc"
2762306a36Sopenharmony_ci- reg: specifies the base physical address and size of the registers;
2862306a36Sopenharmony_ci  the number of supported IRQs is inferred from the size argument
2962306a36Sopenharmony_ci- interrupt-controller: identifies the node as an interrupt controller
3062306a36Sopenharmony_ci- #interrupt-cells: specifies the number of cells needed to encode an interrupt
3162306a36Sopenharmony_ci  source, should be 1.
3262306a36Sopenharmony_ci- interrupts: specifies the interrupt line(s) in the interrupt-parent controller
3362306a36Sopenharmony_ci  node; valid values depend on the type of parent interrupt controller
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciIf multiple reg ranges and interrupt-parent entries are present on an SMP
3662306a36Sopenharmony_cisystem, the driver will allow IRQ SMP affinity to be set up through the
3762306a36Sopenharmony_ci/proc/irq/ interface.  In the simplest possible configuration, only one
3862306a36Sopenharmony_cireg range and one interrupt-parent is needed.
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciThe driver operates in native CPU endian by default, there is no support for
4162306a36Sopenharmony_cispecifying an alternative endianness.
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciExample:
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciperiph_intc: interrupt-controller@10000000 {
4662306a36Sopenharmony_ci        compatible = "brcm,bcm63168-l1-intc", "brcm,bcm6345-l1-intc";
4762306a36Sopenharmony_ci        reg = <0x10000020 0x20>,
4862306a36Sopenharmony_ci              <0x10000040 0x20>;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci        interrupt-controller;
5162306a36Sopenharmony_ci        #interrupt-cells = <1>;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci        interrupt-parent = <&cpu_intc>;
5462306a36Sopenharmony_ci        interrupts = <2>, <3>;
5562306a36Sopenharmony_ci};
56