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 <b26...@freescale.com>
Signed-off-by: Li Yang <le...@freescale.com>
---
 arch/powerpc/sysdev/fsl_msi.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
index 712f934..61e97cb 100644
--- a/arch/powerpc/sysdev/fsl_msi.c
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -262,6 +262,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");
 
@@ -321,6 +323,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++) {
@@ -337,7 +343,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);
-- 
1.6.6-rc1.GIT

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to