Message ID | 1463487350-13469-1-git-send-email-edgar.iglesias@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, May 17, 2016 at 02:15:50PM +0200, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com> > > Do not remap IRQs connected to secondary interrupt controllers. > These IRQs have no meaning to us until they connect to the > primary controller. > > Secondary IRQ controllers will at some point connect to the > primary controller (possibly via other IRQ controllers). We > map the IRQs at that last connection point. > > Reviewed-by: Julien Grall <julien.grall@linaro.org> > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Release-acked-by: Wei Liu <wei.liu2@citrix.com>
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 0ed86a7..06a2837 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -1176,6 +1176,23 @@ int dt_for_each_irq_map(const struct dt_device_node *dev, for ( i = 0; i < pintsize; i++ ) dt_raw_irq.specifier[i] = dt_read_number(imap + i, 1); + if ( dt_raw_irq.controller != dt_interrupt_controller ) + { + /* + * We don't map IRQs connected to secondary IRQ controllers as + * these IRQs have no meaning to us until they connect to the + * primary controller. + * + * Secondary IRQ controllers will at some point connect to + * the primary controller (possibly via other IRQ controllers). + * We map the IRQs at that last connection point. + */ + imap += pintsize; + imaplen -= pintsize; + dt_dprintk(" -> Skipped IRQ for secondary IRQ controller\n"); + continue; + } + ret = dt_irq_translate(&dt_raw_irq, &dt_irq); if ( ret ) {