patch-2.4.10 linux/arch/mips/philips/nino/setup.c
Next file: linux/arch/mips/philips/nino/time.c
Previous file: linux/arch/mips/philips/nino/rtc.c
Back to the patch index
Back to the overall index
- Lines: 121
- Date:
Sun Sep 9 10:43:02 2001
- Orig file:
v2.4.9/linux/arch/mips/philips/nino/setup.c
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.4.9/linux/arch/mips/philips/nino/setup.c linux/arch/mips/philips/nino/setup.c
@@ -0,0 +1,120 @@
+/*
+ * linux/arch/mips/philips/nino/setup.c
+ *
+ * Copyright (C) 2001 Steven J. Hill (sjhill@realitydiluted.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Interrupt and exception initialization for Philips Nino.
+ */
+#include <linux/console.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/mc146818rtc.h>
+#include <linux/sched.h>
+#include <asm/addrspace.h>
+#include <asm/gdb-stub.h>
+#include <asm/irq.h>
+#include <asm/wbflush.h>
+#include <asm/tx3912.h>
+
+extern struct rtc_ops nino_rtc_ops;
+
+extern void nino_wait(void);
+extern void setup_nino_reset_vectors(void);
+extern asmlinkage void nino_handle_int(void);
+extern int setup_nino_irq(int, struct irqaction *);
+void (*board_time_init) (struct irqaction * irq);
+
+#ifdef CONFIG_REMOTE_DEBUG
+extern void set_debug_traps(void);
+extern void breakpoint(void);
+static int remote_debug = 0;
+#endif
+
+static void __init nino_irq_setup(void)
+{
+ unsigned int tmp;
+
+ /* Turn all interrupts off */
+ IntEnable1 = 0;
+ IntEnable2 = 0;
+ IntEnable3 = 0;
+ IntEnable4 = 0;
+ IntEnable5 = 0;
+ IntEnable6 = 0;
+
+ /* Clear all interrupts */
+ IntClear1 = 0xffffffff;
+ IntClear2 = 0xffffffff;
+ IntClear3 = 0xffffffff;
+ IntClear4 = 0xffffffff;
+ IntClear5 = 0xffffffff;
+ IntClear6 = 0xffffffff;
+
+ /*
+ * Enable only the interrupts for the UART and negative
+ * edge (1-to-0) triggered multi-function I/O pins.
+ */
+ change_cp0_status(ST0_BEV, 0);
+ tmp = read_32bit_cp0_register(CP0_STATUS);
+ change_cp0_status(ST0_IM, tmp | IE_IRQ2 | IE_IRQ4);
+
+ /* Register the global interrupt handler */
+ set_except_vector(0, nino_handle_int);
+
+#ifdef CONFIG_REMOTE_DEBUG
+ if (remote_debug) {
+ set_debug_traps();
+ breakpoint();
+ }
+#endif
+}
+
+static __init void nino_time_init(struct irqaction *irq)
+{
+ unsigned int scratch = 0;
+
+ /*
+ * Enable periodic interrupts
+ */
+ setup_nino_irq(0, irq);
+
+ RTCperiodTimer = PER_TIMER_COUNT;
+ RTCtimerControl = TIM_ENPERTIMER;
+ IntEnable5 |= INT5_PERIODICINT;
+
+ scratch = inl(TX3912_CLK_CTRL_BASE);
+ scratch |= TX3912_CLK_CTRL_ENTIMERCLK;
+ outl(scratch, TX3912_CLK_CTRL_BASE);
+
+ /* Enable all interrupts */
+ IntEnable6 |= INT6_GLOBALEN | INT6_PERIODICINT;
+}
+
+void __init nino_setup(void)
+{
+ irq_setup = nino_irq_setup;
+
+ board_time_init = nino_time_init;
+
+ /* Base address to use for PC type I/O accesses */
+ mips_io_port_base = KSEG1ADDR(0xB0C00000);
+
+ setup_nino_reset_vectors();
+
+ /* Function called during process idle (cpu_idle) */
+ cpu_wait = nino_wait;
+
+#ifdef CONFIG_FB
+ conswitchp = &dummy_con;
+#endif
+
+#ifdef CONFIG_REMOTE_DEBUG
+ remote_debug = 1;
+#endif
+
+ rtc_ops = &nino_rtc_ops;
+}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)