The first_irq needs to be zero to get a linear domain and that comes with special semantics. We want to simplify this going forward but some documentation never hurts.
Unified · Split
| @@ -143,7 +143,10 @@ static unsigned int irq_domain_legacy_revmap(struct irq_domain *domain, · 142 unmodified lines | ||
| 143 | 143 | * irq_domain_add_simple() - Allocate and register a simple irq_domain. |
| 144 | 144 | * @of_node: pointer to interrupt controller's device tree node. |
| 145 | 145 | * @size: total number of irqs in mapping |
| 146 | − * @first_irq: first number of irq block assigned to the domain | |
| 146 | + * @first_irq: first number of irq block assigned to the domain, | |
| 147 | + * pass zero to assign irqs on-the-fly. This will result in a | |
| 148 | + * linear IRQ domain so it is important to use irq_create_mapping() | |
| 149 | + * for each used IRQ, especially when SPARSE_IRQ is enabled. | |
| 147 | 150 | * @ops: map/unmap domain callbacks |
| 148 | 151 | * @host_data: Controller private data pointer |
| 149 | 152 | * |