Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 42217
b: refs/heads/master
c: 21fb5a1
h: refs/heads/master
i:
  42215: 7d50d52
v: v3
  • Loading branch information
Benjamin Herrenschmidt authored and Paul Mackerras committed Dec 4, 2006
1 parent 2b3510e commit 0c8e5e4
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a959ff56bbf07954ea4fa1cf72f99a38795eadb3
refs/heads/master: 21fb5a1d9f554970c680b801ba32184bc7c34aa0
1 change: 1 addition & 0 deletions trunk/arch/powerpc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,7 @@ config PPC_CELL_NATIVE
bool
select PPC_CELL
select PPC_DCR_MMIO
select MPIC
default n

config PPC_IBM_CELL_BLADE
Expand Down
44 changes: 44 additions & 0 deletions trunk/arch/powerpc/platforms/cell/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
#include <asm/spu.h>
#include <asm/spu_priv1.h>
#include <asm/udbg.h>
#include <asm/mpic.h>

#include "interrupt.h"
#include "iommu.h"
Expand Down Expand Up @@ -80,10 +81,53 @@ static void cell_progress(char *s, unsigned short hex)
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)
{
iic_init_IRQ();
spider_init_IRQ();
mpic_init_IRQ();
}

static void __init cell_setup_arch(void)
Expand Down

0 comments on commit 0c8e5e4

Please sign in to comment.