summaryrefslogtreecommitdiffstats
path: root/arch/mips/vr41xx/nec-cmbvr4133/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/vr41xx/nec-cmbvr4133/init.c')
-rw-r--r--arch/mips/vr41xx/nec-cmbvr4133/init.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/arch/mips/vr41xx/nec-cmbvr4133/init.c b/arch/mips/vr41xx/nec-cmbvr4133/init.c
new file mode 100644
index 000000000000..87f06b3f5a9c
--- /dev/null
+++ b/arch/mips/vr41xx/nec-cmbvr4133/init.c
@@ -0,0 +1,78 @@
+/*
+ * arch/mips/vr41xx/nec-cmbvr4133/init.c
+ *
+ * PROM library initialisation code for NEC CMB-VR4133 board.
+ *
+ * Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com> and
+ * Jun Sun <jsun@mvista.com, or source@mvista.com> and
+ * Alex Sapkov <asapkov@ru.mvista.com>
+ *
+ * 2001-2004 (c) MontaVista, Software, Inc. This file is licensed under
+ * the terms of the GNU General Public License version 2. This program
+ * is licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ *
+ * Support for NEC-CMBVR4133 in 2.6
+ * Manish Lachwani (mlachwani@mvista.com)
+ */
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+#include <asm/bootinfo.h>
+
+#ifdef CONFIG_ROCKHOPPER
+#include <asm/io.h>
+#include <linux/pci.h>
+
+#define PCICONFDREG 0xaf000c14
+#define PCICONFAREG 0xaf000c18
+#endif
+
+const char *get_system_type(void)
+{
+ return "NEC CMB-VR4133";
+}
+
+#ifdef CONFIG_ROCKHOPPER
+void disable_pcnet(void)
+{
+ u32 data;
+
+ /*
+ * Workaround for the bug in PMON on VR4133. PMON leaves
+ * AMD PCNet controller (on Rockhopper) initialized and running in
+ * bus master mode. We have do disable it before doing any
+ * further initialization. Or we get problems with PCI bus 2
+ * and random lockups and crashes.
+ */
+
+ writel((2 << 16) |
+ (PCI_DEVFN(1,0) << 8) |
+ (0 & 0xfc) |
+ 1UL,
+ PCICONFAREG);
+
+ data = readl(PCICONFDREG);
+
+ writel((2 << 16) |
+ (PCI_DEVFN(1,0) << 8) |
+ (4 & 0xfc) |
+ 1UL,
+ PCICONFAREG);
+
+ data = readl(PCICONFDREG);
+
+ writel((2 << 16) |
+ (PCI_DEVFN(1,0) << 8) |
+ (4 & 0xfc) |
+ 1UL,
+ PCICONFAREG);
+
+ data &= ~4;
+
+ writel(data, PCICONFDREG);
+}
+#endif
+