ARM: gic: fix irq_alloc_descs handling for sparse irq
authorRob Herring <rob.herring@calxeda.com>
Fri, 21 Oct 2011 22:14:27 +0000 (17:14 -0500)
committerArnd Bergmann <arnd@arndb.de>
Mon, 31 Oct 2011 13:03:27 +0000 (14:03 +0100)
commitf37a53cc5d8a8fb199e41386d125d8c2ed9e54ef
treeccf7658e1dae54e7b3eeaa8413dd86d4b865eaec
parentb3f7ed0324091e2cb23fe1b3c10570700f614014
ARM: gic: fix irq_alloc_descs handling for sparse irq

Commit "ARM: gic: add irq_domain support" (b49b6ff) breaks SPARSE_IRQ
on platforms with GIC. When SPARSE_IRQ is enabled, all NR_IRQS or
mach_desc->nr_irqs will be allocated by arch_probe_nr_irqs(). This caused
irq_alloc_descs to allocate irq_descs after the pre-allocated space.

Make irq_alloc_descs search for an exact irq range and assume it has
been pre-allocated on failure. For DT probing dynamic allocation is used.
DT enabled platforms should set their nr_irqs to NR_IRQ_LEGACY and have all
irq_chips allocate their irq_descs with irq_alloc_descs if SPARSE_IRQ is
enabled.

gic_init irq_start param is changed to be signed with negative meaning do
dynamic Linux irq assigment.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
arch/arm/common/gic.c
arch/arm/include/asm/hardware/gic.h