diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-09-19 19:15:08 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-09-19 19:15:08 +0000 |
commit | 03ba4131783cc9e872f8bb26a03f15bc11f27564 (patch) | |
tree | 88db8dba75ae06ba3bad08e42c5e52efc162535c /arch/alpha/kernel/sys_eb64p.c | |
parent | 257730f99381dd26e10b832fce4c94cae7ac1176 (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.c | 21 |
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); |