]> git.baikalelectronics.ru Git - kernel.git/commit
pmac_zilog: Fix unexpected irq
authorFinn Thain <fthain@telegraphics.com.au>
Tue, 6 Dec 2011 17:49:36 +0000 (17:49 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 8 Dec 2011 03:22:53 +0000 (14:22 +1100)
commit259764e7e3cfaec317b9c18c3b361afe13fe2067
treec5554bf1e9eca5d6b4a3af215795e1a20b9c6abd
parent7c3c32cc605377f5025add192d34163a7d2e5a62
pmac_zilog: Fix unexpected irq

On most 68k Macs the SCC IRQ is an autovector interrupt and cannot be
masked. This can be a problem when pmac_zilog starts up.

For example, the serial debugging code in arch/m68k/kernel/head.S may be
used beforehand. It disables the SCC interrupts at the chip but doesn't
ack them. Then when a pmac_zilog port is used, the machine locks up with
"unexpected interrupt".

This can happen in pmz_shutdown() since the irq is freed before the
channel interrupts are disabled.

Fix this by clearing interrupt enable bits before the handler is
uninstalled. Also move the interrupt control bit flipping into a separate
pmz_interrupt_control() routine. Replace all instances of these operations
with calls to this routine. Omit the zssync() calls that seem to serve no
purpose.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
drivers/tty/serial/pmac_zilog.c