|
@@ -358,6 +358,13 @@ static int axon_msi_probe(struct of_device *device,
|
|
goto out_free_msic;
|
|
goto out_free_msic;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ virq = irq_of_parse_and_map(dn, 0);
|
|
|
|
+ if (virq == NO_IRQ) {
|
|
|
|
+ printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
|
|
|
|
+ dn->full_name);
|
|
|
|
+ goto out_free_fifo;
|
|
|
|
+ }
|
|
|
|
+
|
|
msic->irq_host = irq_alloc_host(of_node_get(dn), IRQ_HOST_MAP_NOMAP,
|
|
msic->irq_host = irq_alloc_host(of_node_get(dn), IRQ_HOST_MAP_NOMAP,
|
|
NR_IRQS, &msic_host_ops, 0);
|
|
NR_IRQS, &msic_host_ops, 0);
|
|
if (!msic->irq_host) {
|
|
if (!msic->irq_host) {
|
|
@@ -368,13 +375,6 @@ static int axon_msi_probe(struct of_device *device,
|
|
|
|
|
|
msic->irq_host->host_data = msic;
|
|
msic->irq_host->host_data = msic;
|
|
|
|
|
|
- virq = irq_of_parse_and_map(dn, 0);
|
|
|
|
- if (virq == NO_IRQ) {
|
|
|
|
- printk(KERN_ERR "axon_msi: irq parse and map failed for %s\n",
|
|
|
|
- dn->full_name);
|
|
|
|
- goto out_free_host;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
set_irq_data(virq, msic);
|
|
set_irq_data(virq, msic);
|
|
set_irq_chained_handler(virq, axon_msi_cascade);
|
|
set_irq_chained_handler(virq, axon_msi_cascade);
|
|
pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq);
|
|
pr_debug("axon_msi: irq 0x%x setup for axon_msi\n", virq);
|
|
@@ -399,8 +399,6 @@ static int axon_msi_probe(struct of_device *device,
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
-out_free_host:
|
|
|
|
- kfree(msic->irq_host);
|
|
|
|
out_free_fifo:
|
|
out_free_fifo:
|
|
dma_free_coherent(&device->dev, MSIC_FIFO_SIZE_BYTES, msic->fifo_virt,
|
|
dma_free_coherent(&device->dev, MSIC_FIFO_SIZE_BYTES, msic->fifo_virt,
|
|
msic->fifo_phys);
|
|
msic->fifo_phys);
|