The patch titled powerpc: fix MPIC OF tree parsing on Apple quad g5 has been added to the -mm tree. Its filename is powerpc-fix-mpic-of-tree-parsing-on-apple-quad-g5.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: powerpc: fix MPIC OF tree parsing on Apple quad g5 From: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> The quad g5 currently doesn't boot due to two problems. This patch fixes the first one: Apple new way of doing interrupt specifiers in OF for devices using the HT APIC isn't properly parsed by the new MPIC driver code. Signed-off-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- arch/powerpc/sysdev/mpic.c | 38 +++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff -puN arch/powerpc/sysdev/mpic.c~powerpc-fix-mpic-of-tree-parsing-on-apple-quad-g5 arch/powerpc/sysdev/mpic.c --- a/arch/powerpc/sysdev/mpic.c~powerpc-fix-mpic-of-tree-parsing-on-apple-quad-g5 +++ a/arch/powerpc/sysdev/mpic.c @@ -204,7 +204,7 @@ static void mpic_startup_ht_interrupt(st if (fixup->base == NULL) return; - DBG("startup_ht_interrupt(%u, %u) index: %d\n", + DBG("startup_ht_interrupt(0x%x, 0x%x) index: %d\n", source, irqflags, fixup->index); spin_lock_irqsave(&mpic->fixup_lock, flags); /* Enable and configure */ @@ -227,7 +227,7 @@ static void mpic_shutdown_ht_interrupt(s if (fixup->base == NULL) return; - DBG("shutdown_ht_interrupt(%u, %u)\n", source, irqflags); + DBG("shutdown_ht_interrupt(0x%x, 0x%x)\n", source, irqflags); /* Disable */ spin_lock_irqsave(&mpic->fixup_lock, flags); @@ -588,8 +588,8 @@ static int mpic_set_irq_type(unsigned in struct irq_desc *desc = get_irq_desc(virq); unsigned int vecpri, vold, vnew; - pr_debug("mpic: set_irq_type(mpic:@%p,virq:%d,src:%d,type:0x%x)\n", - mpic, virq, src, flow_type); + DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n", + mpic, virq, src, flow_type); if (src >= mpic->irq_count) return -EINVAL; @@ -661,15 +661,16 @@ static int mpic_host_map(struct irq_host struct mpic *mpic = h->host_data; struct irq_chip *chip; - pr_debug("mpic: map virq %d, hwirq 0x%lx\n", virq, hw); + DBG("mpic: map virq %d, hwirq 0x%lx\n", virq, hw); if (hw == MPIC_VEC_SPURRIOUS) return -EINVAL; + #ifdef CONFIG_SMP else if (hw >= MPIC_VEC_IPI_0) { WARN_ON(!(mpic->flags & MPIC_PRIMARY)); - pr_debug("mpic: mapping as IPI\n"); + DBG("mpic: mapping as IPI\n"); set_irq_chip_data(virq, mpic); set_irq_chip_and_handler(virq, &mpic->hc_ipi, handle_percpu_irq); @@ -689,7 +690,7 @@ static int mpic_host_map(struct irq_host chip = &mpic->hc_ht_irq; #endif /* CONFIG_MPIC_BROKEN_U3 */ - pr_debug("mpic: mapping to irq chip @%p\n", chip); + DBG("mpic: mapping to irq chip @%p\n", chip); set_irq_chip_data(virq, mpic); set_irq_chip_and_handler(virq, chip, handle_fasteoi_irq); @@ -713,11 +714,28 @@ static int mpic_host_xlate(struct irq_ho }; *out_hwirq = intspec[0]; - if (intsize > 1 && intspec[1] < 4) - *out_flags = map_mpic_senses[intspec[1]]; - else + if (intsize > 1) { + u32 mask = 0x3; + + /* Apple invented a new race of encoding on machines with + * an HT APIC. They encode, among others, the index within + * the HT APIC. We don't care about it here since thankfully, + * it appears that they have the APIC already properly + * configured, and thus our current fixup code that reads the + * APIC config works fine. However, we still need to mask out + * bits in the specifier to make sure we only get bit 0 which + * is the level/edge bit (the only sense bit exposed by Apple), + * as their bit 1 means something else. + */ + if (machine_is(powermac)) + mask = 0x1; + *out_flags = map_mpic_senses[intspec[1] & mask]; + } else *out_flags = IRQ_TYPE_NONE; + DBG("mpic: xlate (%d cells: 0x%08x 0x%08x) to line 0x%lx sense 0x%x\n", + intsize, intspec[0], intspec[1], *out_hwirq, *out_flags); + return 0; } _ Patches currently in -mm which might be from benh@xxxxxxxxxxxxxxxxxxx are fix-snd-aoa-irq-conversion.patch aoa-i2sbus-move-module-parameter-declaration-up.patch aoa-i2sbus-fix-for-powermac72-and-73.patch aoa-fix-when-all-is-built-into-the-kernel.patch aoa-i2sbus-revamp-control-layer.patch aoa-pmf-gpio-report-if-function-calling-fails.patch aoa-fabric-layout-clean-up-messages.patch aoa-tas-fix-initialisation-reset.patch powerpc-fix-trigger-handling-in-the-new-irq-code.patch powerpc-fix-mpic-of-tree-parsing-on-apple-quad-g5.patch powerpc-fix-smu-driver-interrupt-mapping.patch powerpc-make-of-interrupt-tree-parsing-more-strict.patch macintosh-mangle-caps-lock-events-on-adb-keyboards.patch git-powerpc.patch git-powerpc-briq_panel-Kconfig-fix.patch powermac-combined-fixes-for-backlight-code.patch fix-broken-dubious-driver-suspend-methods.patch apple-motion-sensor-driver.patch genirq-convert-the-x86_64-architecture-to-irq-chips.patch genirq-convert-the-i386-architecture-to-irq-chips.patch genirq-irq-convert-the-move_irq-flag-from-a-32bit-word-to-a-single-bit.patch genirq-irq-add-moved_masked_irq.patch genirq-x86_64-irq-reenable-migrating-irqs-to-other-cpus.patch genirq-msi-simplify-msi-enable-and-disable.patch genirq-msi-make-the-msi-boolean-tests-return-either-0-or-1.patch genirq-msi-implement-helper-functions-read_msi_msg-and-write_msi_msg.patch genirq-msi-refactor-the-msi_ops.patch genirq-msi-simplify-the-msi-irq-limit-policy.patch genirq-irq-add-a-dynamic-irq-creation-api.patch genirq-ia64-irq-dynamic-irq-support.patch genirq-i386-irq-dynamic-irq-support.patch genirq-x86_64-irq-dynamic-irq-support.patch genirq-msi-make-the-msi-code-irq-based-and-not-vector-based.patch genirq-x86_64-irq-move-msi-message-composition-into-io_apicc.patch genirq-i386-irq-move-msi-message-composition-into-io_apicc.patch genirq-msi-only-build-msi-apicc-on-ia64.patch genirq-x86_64-irq-remove-the-msi-assumption-that-irq-==-vector.patch genirq-i386-irq-remove-the-msi-assumption-that-irq-==-vector.patch genirq-irq-remove-msi-hacks.patch genirq-irq-generalize-the-check-for-hardirq_bits.patch genirq-x86_64-irq-make-the-external-irq-handlers-report-their-vector-not-the-irq-number.patch genirq-x86_64-irq-make-vector_irq-per-cpu.patch genirq-x86_64-irq-kill-gsi_irq_sharing.patch genirq-x86_64-irq-kill-irq-compression.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html