Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72b13819 authored by Segher Boessenkool's avatar Segher Boessenkool Committed by Paul Mackerras
Browse files

[PATCH] powerpc: Fix some MPIC + HT APIC buglets



Do disable, not enable, the HT APIC IRQ in the function that is
supposed to.
Enable the MPIC IRQ before enabling the downstream APIC IRQ, avoids
potentially losing an interrupt.

Signed-off-by: default avatarSegher Boessenkool <segher@kernel.crashing.org>
Acked-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 7c375b9a
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ static void mpic_shutdown_ht_interrupt(struct mpic *mpic, unsigned int source,
	spin_lock_irqsave(&mpic->fixup_lock, flags);
	writeb(0x10 + 2 * fixup->index, fixup->base + 2);
	tmp = readl(fixup->base + 4);
	tmp &= ~1U;
	tmp |= 1;
	writel(tmp, fixup->base + 4);
	spin_unlock_irqrestore(&mpic->fixup_lock, flags);
}
@@ -446,14 +446,15 @@ static unsigned int mpic_startup_irq(unsigned int irq)
#ifdef CONFIG_MPIC_BROKEN_U3
	struct mpic *mpic = mpic_from_irq(irq);
	unsigned int src = irq - mpic->irq_offset;
#endif /* CONFIG_MPIC_BROKEN_U3 */

	mpic_enable_irq(irq);

#ifdef CONFIG_MPIC_BROKEN_U3
	if (mpic_is_ht_interrupt(mpic, src))
		mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);

#endif /* CONFIG_MPIC_BROKEN_U3 */

	mpic_enable_irq(irq);

	return 0;
}