- /*
- * 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;
- }