Index: sys/arm/arm/gic.c =================================================================== --- sys/arm/arm/gic.c +++ sys/arm/arm/gic.c @@ -914,12 +914,19 @@ KASSERT(trig == INTR_TRIGGER_EDGE, ("%s: MSI interrupts must be edge triggered", __func__)); } else if (data != NULL) { - u_int irq; + if (data->type == INTR_MAP_DATA_FDT) { + u_int irq; - /* Get config for resource. */ - if (gic_map_intr(dev, data, &irq, &pol, &trig) || - gi->gi_irq != irq) - return (EINVAL); + /* Get config for resource. */ + if (gic_map_intr(dev, data, &irq, &pol, &trig) || + gi->gi_irq != irq) + return (EINVAL); + } else if (data->type == INTR_MAP_DATA_MSI) { + /* Non-GICv2m MSI */ + pol = INTR_POLARITY_HIGH; + trig = INTR_TRIGGER_EDGE; + } else + return (ENOTSUP); } else { pol = INTR_POLARITY_CONFORM; trig = INTR_TRIGGER_CONFORM;