aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-03-30 13:34:04 -0400
committerPaul Mackerras <paulus@samba.org>2009-04-07 01:07:43 -0400
commitf08b7e9f551fa74219bf32df483fb95c58aad94b (patch)
treeb509d5f95e751bd5017e4689da7d24165c94b50c
parentb6966b1be568e83a48585369731f1123a6f85157 (diff)
powerpc/pmac: Fix internal modem IRQ on Wallstreet PowerBook
The (relatively) new pmac_zilog driver doesn't use the pre-munged IRQ numbers from the macio_dev unlike other macio things, it directly maps it off the OF device-tree. It does that because it can be initialized much earlier than the registration of the macio devices, in order to get a serial console early. Unfortunately, that means that it "misses" some fixups done by the macio layer to work around missing interrupt descriptions in the device-tree of the Wallstreet machines. This patch brings the necessary workaround into the pmac_zilog driver itself to bring it back to working condition. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--drivers/serial/pmac_zilog.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c
index ad3488504010..9c1243fbd512 100644
--- a/drivers/serial/pmac_zilog.c
+++ b/drivers/serial/pmac_zilog.c
@@ -1538,6 +1538,21 @@ no_dma:
1538 uap->port.type = PORT_PMAC_ZILOG; 1538 uap->port.type = PORT_PMAC_ZILOG;
1539 uap->port.flags = 0; 1539 uap->port.flags = 0;
1540 1540
1541 /*
1542 * Fixup for the port on Gatwick for which the device-tree has
1543 * missing interrupts. Normally, the macio_dev would contain
1544 * fixed up interrupt info, but we use the device-tree directly
1545 * here due to early probing so we need the fixup too.
1546 */
1547 if (uap->port.irq == NO_IRQ &&
1548 np->parent && np->parent->parent &&
1549 of_device_is_compatible(np->parent->parent, "gatwick")) {
1550 /* IRQs on gatwick are offset by 64 */
1551 uap->port.irq = irq_create_mapping(NULL, 64 + 15);
1552 uap->tx_dma_irq = irq_create_mapping(NULL, 64 + 4);
1553 uap->rx_dma_irq = irq_create_mapping(NULL, 64 + 5);
1554 }
1555
1541 /* Setup some valid baud rate information in the register 1556 /* Setup some valid baud rate information in the register
1542 * shadows so we don't write crap there before baud rate is 1557 * shadows so we don't write crap there before baud rate is
1543 * first initialized. 1558 * first initialized.