diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-03-30 13:34:04 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2009-04-07 01:07:43 -0400 |
commit | f08b7e9f551fa74219bf32df483fb95c58aad94b (patch) | |
tree | b509d5f95e751bd5017e4689da7d24165c94b50c /drivers/serial | |
parent | b6966b1be568e83a48585369731f1123a6f85157 (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>
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/pmac_zilog.c | 15 |
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. |