summaryrefslogtreecommitdiffstats
path: root/arch/mips64
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-01-21 22:34:01 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-01-21 22:34:01 +0000
commit9e30c3705aed9fbec4c3304570e4d6e707856bcb (patch)
treeb19e6acb5a67af31a4e7742e05c2166dc3f1444c /arch/mips64
parent72919904796333a20c6a5d5c380091b42e407aa9 (diff)
Merge with Linux 2.3.22.
Diffstat (limited to 'arch/mips64')
-rw-r--r--arch/mips64/Makefile4
-rw-r--r--arch/mips64/defconfig-ip229
-rw-r--r--arch/mips64/sgi-ip22/Makefile2
-rw-r--r--arch/mips64/sgi-ip22/ip22-berr.c95
-rw-r--r--arch/mips64/sgi-ip22/ip22-timer.c2
-rw-r--r--arch/mips64/sgi-ip27/ip27-setup.c6
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.
*/