diff options
| author | Russell King <rmk@flint.arm.linux.org.uk> | 2003-07-14 01:57:32 +0100 |
|---|---|---|
| committer | Russell King <rmk@flint.arm.linux.org.uk> | 2003-07-14 01:57:32 +0100 |
| commit | 4e9470d653d7d4b3d482fadaecfd2909a1df2043 (patch) | |
| tree | df14614bee30bd7ab3a7b9e25158a1ca1c1ebeda | |
| parent | ddf2599337b30e25c1acf03a92b168d4bbf9de40 (diff) | |
[PCMCIA] Fix hangs when PCMCIA modules loaded.
Switching the PCMCIA interrupts from serial PCI interrupts to parallel
PCI interrupts causes machines to hang solid. If we leave such setups
well alone, and only change the interrupt mode of parallel PCI systems
between PCI+ISA and PCI only.
| -rw-r--r-- | drivers/pcmcia/ti113x.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index 3f6234bdd718..d43c9a2b1b65 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h @@ -179,21 +179,26 @@ static int ti_override(struct yenta_socket *socket) /* * If ISA interrupts don't work, then fall back to routing card * interrupts to the PCI interrupt of the socket. + * + * Tweaking this when we are using serial PCI IRQs causes hangs + * --rmk */ if (!socket->socket.irq_mask) { - int irqmux, devctl; - - printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n"); + u8 irqmux, devctl; devctl = config_readb(socket, TI113X_DEVICE_CONTROL); - devctl &= ~TI113X_DCR_IMODE_MASK; + if (devctl & TI113X_DCR_IMODE_MASK != TI12XX_DCR_IMODE_ALL_SERIAL) { + printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n"); + + devctl &= ~TI113X_DCR_IMODE_MASK; - irqmux = config_readl(socket, TI122X_IRQMUX); - irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */ - irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */ + irqmux = config_readl(socket, TI122X_IRQMUX); + irqmux = (irqmux & ~0x0f) | 0x02; /* route INTA */ + irqmux = (irqmux & ~0xf0) | 0x20; /* route INTB */ - config_writel(socket, TI122X_IRQMUX, irqmux); - config_writeb(socket, TI113X_DEVICE_CONTROL, devctl); + config_writel(socket, TI122X_IRQMUX, irqmux); + config_writeb(socket, TI113X_DEVICE_CONTROL, devctl); + } } socket->socket.ops->init = ti_init; |
