summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/irqchip/irq-gic-v2m.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c
index f5fe0100f9ff..4359f0583377 100644
--- a/drivers/irqchip/irq-gic-v2m.c
+++ b/drivers/irqchip/irq-gic-v2m.c
@@ -110,7 +110,7 @@ static void gicv2m_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
110 if (v2m->flags & GICV2M_NEEDS_SPI_OFFSET) 110 if (v2m->flags & GICV2M_NEEDS_SPI_OFFSET)
111 msg->data -= v2m->spi_offset; 111 msg->data -= v2m->spi_offset;
112 112
113 iommu_dma_map_msi_msg(data->irq, msg); 113 iommu_dma_compose_msi_msg(irq_data_get_msi_desc(data), msg);
114} 114}
115 115
116static struct irq_chip gicv2m_irq_chip = { 116static struct irq_chip gicv2m_irq_chip = {
@@ -167,6 +167,7 @@ static void gicv2m_unalloc_msi(struct v2m_data *v2m, unsigned int hwirq,
167static int gicv2m_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, 167static int gicv2m_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
168 unsigned int nr_irqs, void *args) 168 unsigned int nr_irqs, void *args)
169{ 169{
170 msi_alloc_info_t *info = args;
170 struct v2m_data *v2m = NULL, *tmp; 171 struct v2m_data *v2m = NULL, *tmp;
171 int hwirq, offset, i, err = 0; 172 int hwirq, offset, i, err = 0;
172 173
@@ -186,6 +187,11 @@ static int gicv2m_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
186 187
187 hwirq = v2m->spi_start + offset; 188 hwirq = v2m->spi_start + offset;
188 189
190 err = iommu_dma_prepare_msi(info->desc,
191 v2m->res.start + V2M_MSI_SETSPI_NS);
192 if (err)
193 return err;
194
189 for (i = 0; i < nr_irqs; i++) { 195 for (i = 0; i < nr_irqs; i++) {
190 err = gicv2m_irq_gic_domain_alloc(domain, virq + i, hwirq + i); 196 err = gicv2m_irq_gic_domain_alloc(domain, virq + i, hwirq + i);
191 if (err) 197 if (err)