aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/mac/oss.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2007-05-01 16:32:56 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-04 20:59:07 -0400
commit67dfb153a352e57e71404d550be7eb60d15d7f2d (patch)
tree675db4da976dedeba9c9ffbceb816f56701e9f94 /arch/m68k/mac/oss.c
parent647b804c8237aa35e19caf8e11ea8d5565107b0e (diff)
m68k: Mac IRQ prep
Make sure that there are no slot IRQs asserted before leaving the nubus handler. If there are and we don't then the nubus gets wedged because this prevents a CA1 transition, which means no more nubus IRQs. Make the interrupt dispatch loops terminate sooner. Explicitly initialise the VIA latches to make the code more easily understood. Also some cleanups. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/m68k/mac/oss.c')
-rw-r--r--arch/m68k/mac/oss.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c
index 603d5cb72891..6399883ae742 100644
--- a/arch/m68k/mac/oss.c
+++ b/arch/m68k/mac/oss.c
@@ -143,14 +143,18 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id)
143#endif 143#endif
144 /* There are only six slots on the OSS, not seven */ 144 /* There are only six slots on the OSS, not seven */
145 145
146 for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) { 146 i = 6;
147 irq_bit = 0x40;
148 do {
149 --i;
150 irq_bit >>= 1;
147 if (events & irq_bit) { 151 if (events & irq_bit) {
148 oss->irq_level[i] = OSS_IRQLEV_DISABLED; 152 oss->irq_level[i] = OSS_IRQLEV_DISABLED;
149 oss->irq_pending &= ~irq_bit; 153 oss->irq_pending &= ~irq_bit;
150 m68k_handle_int(NUBUS_SOURCE_BASE + i); 154 m68k_handle_int(NUBUS_SOURCE_BASE + i);
151 oss->irq_level[i] = OSS_IRQLEV_NUBUS; 155 oss->irq_level[i] = OSS_IRQLEV_NUBUS;
152 } 156 }
153 } 157 } while(events & (irq_bit - 1));
154 return IRQ_HANDLED; 158 return IRQ_HANDLED;
155} 159}
156 160