aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/irqchip/irq-gic-v3-its.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 75d396b9b666..1e364d3ad9c5 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -1178,7 +1178,7 @@ static void its_irq_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
1178 msg->address_hi = upper_32_bits(addr); 1178 msg->address_hi = upper_32_bits(addr);
1179 msg->data = its_get_event_id(d); 1179 msg->data = its_get_event_id(d);
1180 1180
1181 iommu_dma_map_msi_msg(d->irq, msg); 1181 iommu_dma_compose_msi_msg(irq_data_get_msi_desc(d), msg);
1182} 1182}
1183 1183
1184static int its_irq_set_irqchip_state(struct irq_data *d, 1184static int its_irq_set_irqchip_state(struct irq_data *d,
@@ -2563,6 +2563,7 @@ static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2563{ 2563{
2564 msi_alloc_info_t *info = args; 2564 msi_alloc_info_t *info = args;
2565 struct its_device *its_dev = info->scratchpad[0].ptr; 2565 struct its_device *its_dev = info->scratchpad[0].ptr;
2566 struct its_node *its = its_dev->its;
2566 irq_hw_number_t hwirq; 2567 irq_hw_number_t hwirq;
2567 int err; 2568 int err;
2568 int i; 2569 int i;
@@ -2571,6 +2572,10 @@ static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2571 if (err) 2572 if (err)
2572 return err; 2573 return err;
2573 2574
2575 err = iommu_dma_prepare_msi(info->desc, its->get_msi_base(its_dev));
2576 if (err)
2577 return err;
2578
2574 for (i = 0; i < nr_irqs; i++) { 2579 for (i = 0; i < nr_irqs; i++) {
2575 err = its_irq_gic_domain_alloc(domain, virq + i, hwirq + i); 2580 err = its_irq_gic_domain_alloc(domain, virq + i, hwirq + i);
2576 if (err) 2581 if (err)