powerpc/fsl_msi: enable msi sharing through AMP OSes
authorLi Yang <leoli@freescale.com>
Thu, 22 Apr 2010 08:31:37 +0000 (16:31 +0800)
committerKumar Gala <galak@kernel.crashing.org>
Tue, 25 May 2010 02:26:34 +0000 (21:26 -0500)
Make a single PCIe MSI bank shareable through CAMP OSes. The number of
MSI used by each core can be configured by dts file.

Signed-off-by: Zhao Chenhui <b26998@freescale.com>
Signed-off-by: Li Yang <leoli@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
arch/powerpc/sysdev/fsl_msi.c

index efffcbd..1ab7039 100644 (file)
@@ -261,6 +261,8 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev,
        const u32 *p;
        struct fsl_msi_feature *features = match->data;
        struct fsl_msi_cascade_data *cascade_data = NULL;
+       int len;
+       u32 offset;
 
        printk(KERN_DEBUG "Setting up Freescale MSI support\n");
 
@@ -320,6 +322,10 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev,
                err = -EINVAL;
                goto error_out;
        }
+       offset = 0;
+       p = of_get_property(dev->node, "msi-available-ranges", &len);
+       if (p)
+               offset = *p / IRQS_PER_MSI_REG;
 
        count /= sizeof(u32);
        for (i = 0; i < count / 2; i++) {
@@ -336,7 +342,7 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev,
                                err = -ENOMEM;
                                goto error_out;
                        }
-                       cascade_data->index = i;
+                       cascade_data->index = i + offset;
                        cascade_data->msi_data = msi;
                        set_irq_data(virt_msir, (void *)cascade_data);
                        set_irq_chained_handler(virt_msir, fsl_msi_cascade);