162306a36Sopenharmony_ciSome socs have a large number of interrupts requests to service
262306a36Sopenharmony_cithe needs of its many peripherals and subsystems. All of the
362306a36Sopenharmony_ciinterrupt lines from the subsystems are not needed at the same
462306a36Sopenharmony_citime, so they have to be muxed to the irq-controller appropriately.
562306a36Sopenharmony_ciIn such places a interrupt controllers are preceded by an CROSSBAR
662306a36Sopenharmony_cithat provides flexibility in muxing the device requests to the controller
762306a36Sopenharmony_ciinputs.
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciRequired properties:
1062306a36Sopenharmony_ci- compatible : Should be "ti,irq-crossbar"
1162306a36Sopenharmony_ci- reg: Base address and the size of the crossbar registers.
1262306a36Sopenharmony_ci- interrupt-controller: indicates that this block is an interrupt controller.
1362306a36Sopenharmony_ci- ti,max-irqs: Total number of irqs available at the parent interrupt controller.
1462306a36Sopenharmony_ci- ti,max-crossbar-sources: Maximum number of crossbar sources that can be routed.
1562306a36Sopenharmony_ci- ti,reg-size: Size of a individual register in bytes. Every individual
1662306a36Sopenharmony_ci	    register is assumed to be of same size. Valid sizes are 1, 2, 4.
1762306a36Sopenharmony_ci- ti,irqs-reserved: List of the reserved irq lines that are not muxed using
1862306a36Sopenharmony_ci		 crossbar. These interrupt lines are reserved in the soc,
1962306a36Sopenharmony_ci		 so crossbar bar driver should not consider them as free
2062306a36Sopenharmony_ci		 lines.
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciOptional properties:
2362306a36Sopenharmony_ci- ti,irqs-skip: This is similar to "ti,irqs-reserved", but these are for
2462306a36Sopenharmony_ci  SOC-specific hard-wiring of those irqs which unexpectedly bypasses the
2562306a36Sopenharmony_ci  crossbar. These irqs have a crossbar register, but still cannot be used.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci- ti,irqs-safe-map: integer which maps to a safe configuration to use
2862306a36Sopenharmony_ci  when the interrupt controller irq is unused (when not provided, default is 0)
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciExamples:
3162306a36Sopenharmony_ci		crossbar_mpu: crossbar@4a002a48 {
3262306a36Sopenharmony_ci			compatible = "ti,irq-crossbar";
3362306a36Sopenharmony_ci			reg = <0x4a002a48 0x130>;
3462306a36Sopenharmony_ci			ti,max-irqs = <160>;
3562306a36Sopenharmony_ci			ti,max-crossbar-sources = <400>;
3662306a36Sopenharmony_ci			ti,reg-size = <2>;
3762306a36Sopenharmony_ci			ti,irqs-reserved = <0 1 2 3 5 6 131 132>;
3862306a36Sopenharmony_ci			ti,irqs-skip = <10 133 139 140>;
3962306a36Sopenharmony_ci		};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciConsumer:
4262306a36Sopenharmony_ci========
4362306a36Sopenharmony_ciSee Documentation/devicetree/bindings/interrupt-controller/interrupts.txt and
4462306a36Sopenharmony_ciDocumentation/devicetree/bindings/interrupt-controller/arm,gic.yaml for
4562306a36Sopenharmony_cifurther details.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciAn interrupt consumer on an SoC using crossbar will use:
4862306a36Sopenharmony_ci	interrupts = <GIC_SPI request_number interrupt_level>
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciExample:
5162306a36Sopenharmony_ci	device_x@4a023000 {
5262306a36Sopenharmony_ci		/* Crossbar 8 used */
5362306a36Sopenharmony_ci		interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
5462306a36Sopenharmony_ci		...
5562306a36Sopenharmony_ci	};
56