This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / arch / mips / vr41xx / nec-cmbvr4133 / init.c
diff --git a/arch/mips/vr41xx/nec-cmbvr4133/init.c b/arch/mips/vr41xx/nec-cmbvr4133/init.c
new file mode 100644 (file)
index 0000000..87f06b3
--- /dev/null
@@ -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
+