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