Commit 21fb5a1d authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Paul Mackerras

[POWERPC] Native cell support for MPIC in southbridge

Add support for southbridges using the MPIC interrupt controller to
the native cell platforms.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent a959ff56
...@@ -469,6 +469,7 @@ config PPC_CELL_NATIVE ...@@ -469,6 +469,7 @@ config PPC_CELL_NATIVE
bool bool
select PPC_CELL select PPC_CELL
select PPC_DCR_MMIO select PPC_DCR_MMIO
select MPIC
default n default n
config PPC_IBM_CELL_BLADE config PPC_IBM_CELL_BLADE
......
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#include <asm/spu.h> #include <asm/spu.h>
#include <asm/spu_priv1.h> #include <asm/spu_priv1.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/mpic.h>
#include "interrupt.h" #include "interrupt.h"
#include "iommu.h" #include "iommu.h"
...@@ -80,10 +81,53 @@ static void cell_progress(char *s, unsigned short hex) ...@@ -80,10 +81,53 @@ static void cell_progress(char *s, unsigned short hex)
printk("*** %04x : %s\n", hex, s ? s : ""); printk("*** %04x : %s\n", hex, s ? s : "");
} }
static void cell_mpic_cascade(unsigned int irq, struct irq_desc *desc)
{
struct mpic *mpic = desc->handler_data;
unsigned int virq;
virq = mpic_get_one_irq(mpic);
if (virq != NO_IRQ)
generic_handle_irq(virq);
desc->chip->eoi(irq);
}
static void __init mpic_init_IRQ(void)
{
struct device_node *dn;
struct mpic *mpic;
unsigned int virq;
for (dn = NULL;
(dn = of_find_node_by_name(dn, "interrupt-controller"));) {
if (!device_is_compatible(dn, "CBEA,platform-open-pic"))
continue;
/* The MPIC driver will get everything it needs from the
* device-tree, just pass 0 to all arguments
*/
mpic = mpic_alloc(dn, 0, 0, 0, 0, " MPIC ");
if (mpic == NULL)
continue;
mpic_init(mpic);
virq = irq_of_parse_and_map(dn, 0);
if (virq == NO_IRQ)
continue;
printk(KERN_INFO "%s : hooking up to IRQ %d\n",
dn->full_name, virq);
set_irq_data(virq, mpic);
set_irq_chained_handler(virq, cell_mpic_cascade);
}
}
static void __init cell_init_irq(void) static void __init cell_init_irq(void)
{ {
iic_init_IRQ(); iic_init_IRQ();
spider_init_IRQ(); spider_init_IRQ();
mpic_init_IRQ();
} }
static void __init cell_setup_arch(void) static void __init cell_setup_arch(void)
......
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