Commit 22285118 authored by Timur Tabi's avatar Timur Tabi Committed by Kumar Gala

powerpc/fsl_msi: fix support for multiple MSI ranges

Commit 6820fead ("powerpc/fsl_msi: Handle msi-available-ranges better") added
support for multiple ranges in the msi-available-ranges property, but it
miscalculated the MSIR index when multiple ranges are used.
Signed-off-by: default avatarTimur Tabi <timur@freescale.com>
Acked-by: default avatarScott Wood <scottwood@freescale.com>
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 2a05e333
...@@ -296,7 +296,7 @@ static int __devinit fsl_msi_setup_hwirq(struct fsl_msi *msi, ...@@ -296,7 +296,7 @@ static int __devinit fsl_msi_setup_hwirq(struct fsl_msi *msi,
} }
msi->msi_virqs[irq_index] = virt_msir; msi->msi_virqs[irq_index] = virt_msir;
cascade_data->index = offset + irq_index; cascade_data->index = offset;
cascade_data->msi_data = msi; cascade_data->msi_data = msi;
irq_set_handler_data(virt_msir, cascade_data); irq_set_handler_data(virt_msir, cascade_data);
irq_set_chained_handler(virt_msir, fsl_msi_cascade); irq_set_chained_handler(virt_msir, fsl_msi_cascade);
...@@ -376,8 +376,10 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev) ...@@ -376,8 +376,10 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev)
goto error_out; goto error_out;
} }
if (!p) if (!p) {
p = all_avail; p = all_avail;
len = sizeof(all_avail);
}
for (irq_index = 0, i = 0; i < len / (2 * sizeof(u32)); i++) { for (irq_index = 0, i = 0; i < len / (2 * sizeof(u32)); i++) {
if (p[i * 2] % IRQS_PER_MSI_REG || if (p[i * 2] % IRQS_PER_MSI_REG ||
...@@ -393,7 +395,7 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev) ...@@ -393,7 +395,7 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev)
count = p[i * 2 + 1] / IRQS_PER_MSI_REG; count = p[i * 2 + 1] / IRQS_PER_MSI_REG;
for (j = 0; j < count; j++, irq_index++) { for (j = 0; j < count; j++, irq_index++) {
err = fsl_msi_setup_hwirq(msi, dev, offset, irq_index); err = fsl_msi_setup_hwirq(msi, dev, offset + j, irq_index);
if (err) if (err)
goto error_out; goto error_out;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment