diff options
author | Paul Mackerras <paulus@samba.org> | 2007-12-30 21:54:13 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-12-30 21:54:13 -0500 |
commit | 4f43143f9fbbb679c38d2ff99e44d3aaa00d0fe1 (patch) | |
tree | 4472ccce19c5ee2b8c78262d41df8cbcee1aafc3 /arch/powerpc/sysdev | |
parent | 533b1928b5c37dbdaabec3e7ff073aee8d7af3eb (diff) | |
parent | 90c26375b48e764a099bb5b606a74bb54bb5a3a7 (diff) |
Merge branch 'for-2.6.25' of git://git.kernel.org/pub/scm/linux/kernel/git/olof/pasemi
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r-- | arch/powerpc/sysdev/mpic.c | 31 | ||||
-rw-r--r-- | arch/powerpc/sysdev/mpic.h | 3 |
2 files changed, 28 insertions, 6 deletions
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index f74fe26b787e..f88ff09c4711 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -83,6 +83,7 @@ static u32 mpic_infos[][MPIC_IDX_END] = { | |||
83 | MPIC_CPU_WHOAMI, | 83 | MPIC_CPU_WHOAMI, |
84 | MPIC_CPU_INTACK, | 84 | MPIC_CPU_INTACK, |
85 | MPIC_CPU_EOI, | 85 | MPIC_CPU_EOI, |
86 | MPIC_CPU_MCACK, | ||
86 | 87 | ||
87 | MPIC_IRQ_BASE, | 88 | MPIC_IRQ_BASE, |
88 | MPIC_IRQ_STRIDE, | 89 | MPIC_IRQ_STRIDE, |
@@ -121,6 +122,7 @@ static u32 mpic_infos[][MPIC_IDX_END] = { | |||
121 | TSI108_CPU_WHOAMI, | 122 | TSI108_CPU_WHOAMI, |
122 | TSI108_CPU_INTACK, | 123 | TSI108_CPU_INTACK, |
123 | TSI108_CPU_EOI, | 124 | TSI108_CPU_EOI, |
125 | TSI108_CPU_MCACK, | ||
124 | 126 | ||
125 | TSI108_IRQ_BASE, | 127 | TSI108_IRQ_BASE, |
126 | TSI108_IRQ_STRIDE, | 128 | TSI108_IRQ_STRIDE, |
@@ -1126,6 +1128,11 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1126 | mb(); | 1128 | mb(); |
1127 | } | 1129 | } |
1128 | 1130 | ||
1131 | if (flags & MPIC_ENABLE_MCK) | ||
1132 | mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0), | ||
1133 | mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) | ||
1134 | | MPIC_GREG_GCONF_MCK); | ||
1135 | |||
1129 | /* Read feature register, calculate num CPUs and, for non-ISU | 1136 | /* Read feature register, calculate num CPUs and, for non-ISU |
1130 | * MPICs, num sources as well. On ISU MPICs, sources are counted | 1137 | * MPICs, num sources as well. On ISU MPICs, sources are counted |
1131 | * as ISUs are added | 1138 | * as ISUs are added |
@@ -1272,6 +1279,11 @@ void __init mpic_init(struct mpic *mpic) | |||
1272 | mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) | 1279 | mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) |
1273 | | MPIC_GREG_GCONF_8259_PTHROU_DIS); | 1280 | | MPIC_GREG_GCONF_8259_PTHROU_DIS); |
1274 | 1281 | ||
1282 | if (mpic->flags & MPIC_NO_BIAS) | ||
1283 | mpic_write(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0), | ||
1284 | mpic_read(mpic->gregs, MPIC_INFO(GREG_GLOBAL_CONF_0)) | ||
1285 | | MPIC_GREG_GCONF_NO_BIAS); | ||
1286 | |||
1275 | /* Set current processor priority to 0 */ | 1287 | /* Set current processor priority to 0 */ |
1276 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0); | 1288 | mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0); |
1277 | 1289 | ||
@@ -1438,13 +1450,13 @@ void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask) | |||
1438 | mpic_physmask(cpu_mask & cpus_addr(cpu_online_map)[0])); | 1450 | mpic_physmask(cpu_mask & cpus_addr(cpu_online_map)[0])); |
1439 | } | 1451 | } |
1440 | 1452 | ||
1441 | unsigned int mpic_get_one_irq(struct mpic *mpic) | 1453 | static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg) |
1442 | { | 1454 | { |
1443 | u32 src; | 1455 | u32 src; |
1444 | 1456 | ||
1445 | src = mpic_cpu_read(MPIC_INFO(CPU_INTACK)) & MPIC_INFO(VECPRI_VECTOR_MASK); | 1457 | src = mpic_cpu_read(reg) & MPIC_INFO(VECPRI_VECTOR_MASK); |
1446 | #ifdef DEBUG_LOW | 1458 | #ifdef DEBUG_LOW |
1447 | DBG("%s: get_one_irq(): %d\n", mpic->name, src); | 1459 | DBG("%s: get_one_irq(reg 0x%x): %d\n", mpic->name, reg, src); |
1448 | #endif | 1460 | #endif |
1449 | if (unlikely(src == mpic->spurious_vec)) { | 1461 | if (unlikely(src == mpic->spurious_vec)) { |
1450 | if (mpic->flags & MPIC_SPV_EOI) | 1462 | if (mpic->flags & MPIC_SPV_EOI) |
@@ -1462,6 +1474,11 @@ unsigned int mpic_get_one_irq(struct mpic *mpic) | |||
1462 | return irq_linear_revmap(mpic->irqhost, src); | 1474 | return irq_linear_revmap(mpic->irqhost, src); |
1463 | } | 1475 | } |
1464 | 1476 | ||
1477 | unsigned int mpic_get_one_irq(struct mpic *mpic) | ||
1478 | { | ||
1479 | return _mpic_get_one_irq(mpic, MPIC_INFO(CPU_INTACK)); | ||
1480 | } | ||
1481 | |||
1465 | unsigned int mpic_get_irq(void) | 1482 | unsigned int mpic_get_irq(void) |
1466 | { | 1483 | { |
1467 | struct mpic *mpic = mpic_primary; | 1484 | struct mpic *mpic = mpic_primary; |
@@ -1471,6 +1488,14 @@ unsigned int mpic_get_irq(void) | |||
1471 | return mpic_get_one_irq(mpic); | 1488 | return mpic_get_one_irq(mpic); |
1472 | } | 1489 | } |
1473 | 1490 | ||
1491 | unsigned int mpic_get_mcirq(void) | ||
1492 | { | ||
1493 | struct mpic *mpic = mpic_primary; | ||
1494 | |||
1495 | BUG_ON(mpic == NULL); | ||
1496 | |||
1497 | return _mpic_get_one_irq(mpic, MPIC_INFO(CPU_MCACK)); | ||
1498 | } | ||
1474 | 1499 | ||
1475 | #ifdef CONFIG_SMP | 1500 | #ifdef CONFIG_SMP |
1476 | void mpic_request_ipis(void) | 1501 | void mpic_request_ipis(void) |
diff --git a/arch/powerpc/sysdev/mpic.h b/arch/powerpc/sysdev/mpic.h index 4783c6e9f30d..fbf8a266941c 100644 --- a/arch/powerpc/sysdev/mpic.h +++ b/arch/powerpc/sysdev/mpic.h | |||
@@ -38,9 +38,6 @@ static inline int mpic_pasemi_msi_init(struct mpic *mpic) | |||
38 | 38 | ||
39 | extern int mpic_set_irq_type(unsigned int virq, unsigned int flow_type); | 39 | extern int mpic_set_irq_type(unsigned int virq, unsigned int flow_type); |
40 | extern void mpic_set_vector(unsigned int virq, unsigned int vector); | 40 | extern void mpic_set_vector(unsigned int virq, unsigned int vector); |
41 | extern void mpic_end_irq(unsigned int irq); | ||
42 | extern void mpic_mask_irq(unsigned int irq); | ||
43 | extern void mpic_unmask_irq(unsigned int irq); | ||
44 | extern void mpic_set_affinity(unsigned int irq, cpumask_t cpumask); | 41 | extern void mpic_set_affinity(unsigned int irq, cpumask_t cpumask); |
45 | 42 | ||
46 | #endif /* _POWERPC_SYSDEV_MPIC_H */ | 43 | #endif /* _POWERPC_SYSDEV_MPIC_H */ |