196ca848eSSricharan RSome socs have a large number of interrupts requests to service
296ca848eSSricharan Rthe needs of its many peripherals and subsystems. All of the
396ca848eSSricharan Rinterrupt lines from the subsystems are not needed at the same
496ca848eSSricharan Rtime, so they have to be muxed to the irq-controller appropriately.
596ca848eSSricharan RIn such places a interrupt controllers are preceded by an CROSSBAR
696ca848eSSricharan Rthat provides flexibility in muxing the device requests to the controller
796ca848eSSricharan Rinputs.
896ca848eSSricharan R
996ca848eSSricharan RRequired properties:
1096ca848eSSricharan R- compatible : Should be "ti,irq-crossbar"
1196ca848eSSricharan R- reg: Base address and the size of the crossbar registers.
121e7449baSMarc Zyngier- interrupt-controller: indicates that this block is an interrupt controller.
131e7449baSMarc Zyngier- ti,max-irqs: Total number of irqs available at the parent interrupt controller.
142f7d2fb7SNishanth Menon- ti,max-crossbar-sources: Maximum number of crossbar sources that can be routed.
1596ca848eSSricharan R- ti,reg-size: Size of a individual register in bytes. Every individual
1696ca848eSSricharan R	    register is assumed to be of same size. Valid sizes are 1, 2, 4.
1796ca848eSSricharan R- ti,irqs-reserved: List of the reserved irq lines that are not muxed using
1896ca848eSSricharan R		 crossbar. These interrupt lines are reserved in the soc,
1996ca848eSSricharan R		 so crossbar bar driver should not consider them as free
2096ca848eSSricharan R		 lines.
2196ca848eSSricharan R
2264e0f8baSNishanth MenonOptional properties:
2364e0f8baSNishanth Menon- ti,irqs-skip: This is similar to "ti,irqs-reserved", but these are for
2464e0f8baSNishanth Menon  SOC-specific hard-wiring of those irqs which unexpectedly bypasses the
2564e0f8baSNishanth Menon  crossbar. These irqs have a crossbar register, but still cannot be used.
2664e0f8baSNishanth Menon
27a35057d1SNishanth Menon- ti,irqs-safe-map: integer which maps to a safe configuration to use
28a35057d1SNishanth Menon  when the interrupt controller irq is unused (when not provided, default is 0)
29a35057d1SNishanth Menon
3096ca848eSSricharan RExamples:
311e7449baSMarc Zyngier		crossbar_mpu: crossbar@4a002a48 {
3296ca848eSSricharan R			compatible = "ti,irq-crossbar";
3396ca848eSSricharan R			reg = <0x4a002a48 0x130>;
3496ca848eSSricharan R			ti,max-irqs = <160>;
352f7d2fb7SNishanth Menon			ti,max-crossbar-sources = <400>;
3696ca848eSSricharan R			ti,reg-size = <2>;
371e7449baSMarc Zyngier			ti,irqs-reserved = <0 1 2 3 5 6 131 132>;
3864e0f8baSNishanth Menon			ti,irqs-skip = <10 133 139 140>;
3996ca848eSSricharan R		};
409a34f73fSNishanth Menon
419a34f73fSNishanth MenonConsumer:
429a34f73fSNishanth Menon========
439a34f73fSNishanth MenonSee Documentation/devicetree/bindings/interrupt-controller/interrupts.txt and
44dfab9954SMauro Carvalho ChehabDocumentation/devicetree/bindings/interrupt-controller/arm,gic.yaml for
45ba180093SJon Hunterfurther details.
469a34f73fSNishanth Menon
479a34f73fSNishanth MenonAn interrupt consumer on an SoC using crossbar will use:
489a34f73fSNishanth Menon	interrupts = <GIC_SPI request_number interrupt_level>
499a34f73fSNishanth Menon
509a34f73fSNishanth MenonExample:
514c9847b7SMathieu Malaterre	device_x@4a023000 {
529a34f73fSNishanth Menon		/* Crossbar 8 used */
539a34f73fSNishanth Menon		interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
549a34f73fSNishanth Menon		...
559a34f73fSNishanth Menon	};
56