diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-01-21 22:34:01 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-01-21 22:34:01 +0000 |
commit | 9e30c3705aed9fbec4c3304570e4d6e707856bcb (patch) | |
tree | b19e6acb5a67af31a4e7742e05c2166dc3f1444c /arch/mips64 | |
parent | 72919904796333a20c6a5d5c380091b42e407aa9 (diff) |
Merge with Linux 2.3.22.
Diffstat (limited to 'arch/mips64')
-rw-r--r-- | arch/mips64/Makefile | 4 | ||||
-rw-r--r-- | arch/mips64/defconfig-ip22 | 9 | ||||
-rw-r--r-- | arch/mips64/sgi-ip22/Makefile | 2 | ||||
-rw-r--r-- | arch/mips64/sgi-ip22/ip22-berr.c | 95 | ||||
-rw-r--r-- | arch/mips64/sgi-ip22/ip22-timer.c | 2 | ||||
-rw-r--r-- | arch/mips64/sgi-ip27/ip27-setup.c | 6 |
6 files changed, 112 insertions, 6 deletions
diff --git a/arch/mips64/Makefile b/arch/mips64/Makefile index 6879aca98..d7ffcedb9 100644 --- a/arch/mips64/Makefile +++ b/arch/mips64/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.3 1999/12/04 03:59:00 ralf Exp $ +# $Id: Makefile,v 1.4 2000/01/17 23:32:46 ralf Exp $ # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -67,7 +67,7 @@ endif # Board-dependent options and extra files # ifdef CONFIG_SGI_IP22 -LIBS += arch/mips64/sgi-ip22/sgikern.a arch/mips64/arc/arclib.a +LIBS += arch/mips64/sgi-ip22/ip22.a arch/mips64/arc/arclib.a SUBDIRS += arch/mips64/sgi-ip22 arch/mips64/arc # # Set LOADADDR to >= 0x88069000 if you want to leave space for symmon, diff --git a/arch/mips64/defconfig-ip22 b/arch/mips64/defconfig-ip22 index 71fac0fc9..273653d5d 100644 --- a/arch/mips64/defconfig-ip22 +++ b/arch/mips64/defconfig-ip22 @@ -11,8 +11,11 @@ # Machine selection # CONFIG_SGI_IP22=y +# CONFIG_SGI_IP27 is not set CONFIG_BOOT_ELF32=y CONFIG_ARC32=y +CONFIG_BOARD_SCACHE=y +CONFIG_ARC_MEMORY=y # # CPU selection @@ -28,13 +31,13 @@ CONFIG_CPU_R5000=y # General setup # # CONFIG_CPU_LITTLE_ENDIAN is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_SYSCTL is not set +CONFIG_BINFMT_ELF=y +# CONFIG_MIPS32_COMPAT is not set +# CONFIG_BINFMT_MISC is not set # # Loadable module support diff --git a/arch/mips64/sgi-ip22/Makefile b/arch/mips64/sgi-ip22/Makefile index 3265aab41..f303d90da 100644 --- a/arch/mips64/sgi-ip22/Makefile +++ b/arch/mips64/sgi-ip22/Makefile @@ -10,7 +10,7 @@ $(CC) $(CFLAGS) -c $< -o $*.o L_TARGET = ip22.a -L_OBJS = ip22-mc.o ip22-sc.o ip22-hpc.o ip22-int.o ip22-rtc.o \ +L_OBJS = ip22-berr.o ip22-mc.o ip22-sc.o ip22-hpc.o ip22-int.o ip22-rtc.o \ ip22-setup.o system.o ip22-timer.o ip22-irq.o ip22-reset.o time.o include $(TOPDIR)/Rules.make diff --git a/arch/mips64/sgi-ip22/ip22-berr.c b/arch/mips64/sgi-ip22/ip22-berr.c new file mode 100644 index 000000000..32797fcf4 --- /dev/null +++ b/arch/mips64/sgi-ip22/ip22-berr.c @@ -0,0 +1,95 @@ +/* $Id: ip22-berr.c,v 1.1 2000/01/21 21:35:46 ralf Exp $ + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle + * Copyright (C) 1999, 2000 by Silicon Graphics + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/uaccess.h> +#include <asm/paccess.h> +#include <asm/addrspace.h> + +extern asmlinkage void handle_ibe(void); +extern asmlinkage void handle_dbe(void); + +extern const struct exception_table_entry __start___dbe_table[]; +extern const struct exception_table_entry __stop___dbe_table[]; + +static inline unsigned long +search_one_table(const struct exception_table_entry *first, + const struct exception_table_entry *last, + unsigned long value) +{ + while (first <= last) { + const struct exception_table_entry *mid; + long diff; + + mid = (last - first) / 2 + first; + diff = mid->insn - value; + if (diff == 0) + return mid->nextinsn; + else if (diff < 0) + first = mid+1; + else + last = mid-1; + } + return 0; +} + +static inline unsigned long +search_dbe_table(unsigned long addr) +{ + unsigned long ret; + + /* There is only the kernel to search. */ + ret = search_one_table(__start___dbe_table, __stop___dbe_table-1, addr); + if (ret) return ret; + + return 0; +} + +void do_ibe(struct pt_regs *regs) +{ + printk("Got ibe at 0x%lx\n", regs->cp0_epc); + show_regs(regs); + dump_tlb_addr(regs->cp0_epc); + force_sig(SIGBUS, current); + while(1); +} + +void do_dbe(struct pt_regs *regs) +{ + unsigned long fixup; + + fixup = search_dbe_table(regs->cp0_epc); + if (fixup) { + long new_epc; + + new_epc = fixup_exception(dpf_reg, fixup, regs->cp0_epc); + regs->cp0_epc = new_epc; + return; + } + + printk("Got dbe at 0x%lx\n", regs->cp0_epc); + show_regs(regs); + dump_tlb_all(); + while(1); + force_sig(SIGBUS, current); +} + +void __init +bus_error_init(void) +{ + int dummy; + + set_except_vector(6, handle_ibe); + set_except_vector(7, handle_dbe); + + /* At this time nothing uses the DBE protection mechanism on the + Indy, so this here is needed to make the kernel link. */ + get_dbe(dummy, (int *)KSEG0); +} diff --git a/arch/mips64/sgi-ip22/ip22-timer.c b/arch/mips64/sgi-ip22/ip22-timer.c index ff8ece37a..c5e038b72 100644 --- a/arch/mips64/sgi-ip22/ip22-timer.c +++ b/arch/mips64/sgi-ip22/ip22-timer.c @@ -33,6 +33,8 @@ static unsigned long r4k_offset; /* Amount to increment compare reg each time */ static unsigned long r4k_cur; /* What counter should be at next timer irq */ +extern rwlock_t xtime_lock; + static inline void ack_r4ktimer(unsigned long newval) { write_32bit_cp0_register(CP0_COMPARE, newval); diff --git a/arch/mips64/sgi-ip27/ip27-setup.c b/arch/mips64/sgi-ip27/ip27-setup.c index 39858a23f..ace1d7b8f 100644 --- a/arch/mips64/sgi-ip27/ip27-setup.c +++ b/arch/mips64/sgi-ip27/ip27-setup.c @@ -9,6 +9,7 @@ * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) * Copyright (C) 1999 Silcon Graphics, Inc. */ +#include <linux/config.h> #include <linux/init.h> #include <linux/kernel.h> #include <asm/sn/types.h> @@ -20,6 +21,11 @@ #include <asm/mipsregs.h> #include <asm/sn/klconfig.h> +/* Check against user dumbness. */ +#ifdef CONFIG_VT +#error "CONFIG_VT not allowed for IP27." +#endif + /* * get_nasid() returns the physical node id number of the caller. */ |