summaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_eb64p.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
commit03ba4131783cc9e872f8bb26a03f15bc11f27564 (patch)
tree88db8dba75ae06ba3bad08e42c5e52efc162535c /arch/alpha/kernel/sys_eb64p.c
parent257730f99381dd26e10b832fce4c94cae7ac1176 (diff)
- Merge with Linux 2.1.121.
- Bugfixes.
Diffstat (limited to 'arch/alpha/kernel/sys_eb64p.c')
-rw-r--r--arch/alpha/kernel/sys_eb64p.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/arch/alpha/kernel/sys_eb64p.c b/arch/alpha/kernel/sys_eb64p.c
index bffd119f3..683baa02e 100644
--- a/arch/alpha/kernel/sys_eb64p.c
+++ b/arch/alpha/kernel/sys_eb64p.c
@@ -52,9 +52,6 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
{
unsigned long pld;
unsigned int i;
- unsigned long flags;
-
- save_and_cli(flags);
/* Read the interrupt summary registers */
pld = inb(0x26) | (inb(0x27) << 8);
@@ -72,12 +69,28 @@ eb64p_device_interrupt(unsigned long vector, struct pt_regs *regs)
handle_irq(16 + i, 16 + i, regs);
}
}
- restore_flags(flags);
}
static void __init
eb64p_init_irq(void)
{
+#ifdef CONFIG_ALPHA_GENERIC
+ /*
+ * CABRIO SRM may not set variation correctly, so here we test
+ * the high word of the interrupt summary register for the RAZ
+ * bits, and hope that a true EB64+ would read all ones...
+ */
+ if (inw(0x806) != 0xffff) {
+ extern struct alpha_machine_vector cabriolet_mv;
+#if 1
+ printk("eb64p_init_irq: resetting for CABRIO\n");
+#endif
+ alpha_mv = cabriolet_mv;
+ alpha_mv.init_irq();
+ return;
+ }
+#endif /* GENERIC */
+
STANDARD_INIT_IRQ_PROLOG;
outb(alpha_irq_mask >> 16, 0x26);