18c2ecf20Sopenharmony_ciSome socs have a large number of interrupts requests to service
28c2ecf20Sopenharmony_cithe needs of its many peripherals and subsystems. All of the
38c2ecf20Sopenharmony_ciinterrupt lines from the subsystems are not needed at the same
48c2ecf20Sopenharmony_citime, so they have to be muxed to the irq-controller appropriately.
58c2ecf20Sopenharmony_ciIn such places a interrupt controllers are preceded by an CROSSBAR
68c2ecf20Sopenharmony_cithat provides flexibility in muxing the device requests to the controller
78c2ecf20Sopenharmony_ciinputs.
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciRequired properties:
108c2ecf20Sopenharmony_ci- compatible : Should be "ti,irq-crossbar"
118c2ecf20Sopenharmony_ci- reg: Base address and the size of the crossbar registers.
128c2ecf20Sopenharmony_ci- interrupt-controller: indicates that this block is an interrupt controller.
138c2ecf20Sopenharmony_ci- ti,max-irqs: Total number of irqs available at the parent interrupt controller.
148c2ecf20Sopenharmony_ci- ti,max-crossbar-sources: Maximum number of crossbar sources that can be routed.
158c2ecf20Sopenharmony_ci- ti,reg-size: Size of a individual register in bytes. Every individual
168c2ecf20Sopenharmony_ci	    register is assumed to be of same size. Valid sizes are 1, 2, 4.
178c2ecf20Sopenharmony_ci- ti,irqs-reserved: List of the reserved irq lines that are not muxed using
188c2ecf20Sopenharmony_ci		 crossbar. These interrupt lines are reserved in the soc,
198c2ecf20Sopenharmony_ci		 so crossbar bar driver should not consider them as free
208c2ecf20Sopenharmony_ci		 lines.
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ciOptional properties:
238c2ecf20Sopenharmony_ci- ti,irqs-skip: This is similar to "ti,irqs-reserved", but these are for
248c2ecf20Sopenharmony_ci  SOC-specific hard-wiring of those irqs which unexpectedly bypasses the
258c2ecf20Sopenharmony_ci  crossbar. These irqs have a crossbar register, but still cannot be used.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci- ti,irqs-safe-map: integer which maps to a safe configuration to use
288c2ecf20Sopenharmony_ci  when the interrupt controller irq is unused (when not provided, default is 0)
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciExamples:
318c2ecf20Sopenharmony_ci		crossbar_mpu: crossbar@4a002a48 {
328c2ecf20Sopenharmony_ci			compatible = "ti,irq-crossbar";
338c2ecf20Sopenharmony_ci			reg = <0x4a002a48 0x130>;
348c2ecf20Sopenharmony_ci			ti,max-irqs = <160>;
358c2ecf20Sopenharmony_ci			ti,max-crossbar-sources = <400>;
368c2ecf20Sopenharmony_ci			ti,reg-size = <2>;
378c2ecf20Sopenharmony_ci			ti,irqs-reserved = <0 1 2 3 5 6 131 132>;
388c2ecf20Sopenharmony_ci			ti,irqs-skip = <10 133 139 140>;
398c2ecf20Sopenharmony_ci		};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciConsumer:
428c2ecf20Sopenharmony_ci========
438c2ecf20Sopenharmony_ciSee Documentation/devicetree/bindings/interrupt-controller/interrupts.txt and
448c2ecf20Sopenharmony_ciDocumentation/devicetree/bindings/interrupt-controller/arm,gic.yaml for
458c2ecf20Sopenharmony_cifurther details.
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciAn interrupt consumer on an SoC using crossbar will use:
488c2ecf20Sopenharmony_ci	interrupts = <GIC_SPI request_number interrupt_level>
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciExample:
518c2ecf20Sopenharmony_ci	device_x@4a023000 {
528c2ecf20Sopenharmony_ci		/* Crossbar 8 used */
538c2ecf20Sopenharmony_ci		interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
548c2ecf20Sopenharmony_ci		...
558c2ecf20Sopenharmony_ci	};
56