import u-boot-1.1.4-list-2.1.0.diff
[u-boot.git] / board / linkstation / linkstation.c
diff --git a/board/linkstation/linkstation.c b/board/linkstation/linkstation.c
new file mode 100644 (file)
index 0000000..cfa4057
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * linkstation.c
+ *
+ * Misc LinkStation specific functions
+ *
+ * Copyright (C) 2006 Mihai Georgin <u-boot@linuxnotincluded.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <version.h>
+#include <common.h>
+#include <mpc824x.h>
+#include <asm/io.h>
+#include <ns16550.h>
+
+#ifdef CONFIG_PCI
+#include <pci.h>
+#endif
+
+extern void init_AVR_DUART(void);
+extern void hw_watchdog_reset(void);
+
+int checkboard (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       ulong busfreq = get_bus_freq (0);
+       char buf[32];
+       char *p;
+       bd_t *bd = gd->bd;
+
+       init_AVR_DUART();
+       hw_watchdog_reset();
+
+       if ((p = getenv ("console_nr")) != NULL) {
+               unsigned long con_nr = simple_strtoul (p, NULL, 10) & 3;
+
+               bd->bi_baudrate &= ~3;
+               bd->bi_baudrate |= con_nr & 3;
+       }
+       return 0;
+}
+
+long int initdram (int board_type)
+{
+       return (get_ram_size(CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE));
+}
+
+/*
+ * Initialize PCI Devices
+ */
+#ifdef CONFIG_PCI
+
+#ifndef CONFIG_PCI_PNP
+
+static struct pci_config_table pci_linkstation_config_table[] = {
+       /* vendor, device, class */
+       /* bus, dev, func */
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+         PCI_ANY_ID, 0x0b, 0,          /* AN983B or RTL8110S  */
+                                                               /* ethernet controller */
+         pci_cfgfunc_config_device, { PCI_ETH_IOADDR,
+                                      PCI_ETH_MEMADDR,
+                                      PCI_COMMAND_IO |
+                                      PCI_COMMAND_MEMORY |
+                                      PCI_COMMAND_MASTER }},
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+         PCI_ANY_ID, 0x0c, 0,          /* SII680 or IT8211AF */
+                                                               /* ide controller     */
+         pci_cfgfunc_config_device, { PCI_IDE_IOADDR,
+                                      PCI_IDE_MEMADDR,
+                                      PCI_COMMAND_IO |
+                                      PCI_COMMAND_MEMORY |
+                                      PCI_COMMAND_MASTER }},
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+         PCI_ANY_ID, 0x0e, 0,          /* D720101 USB controller, 1st USB 1.1 */
+         pci_cfgfunc_config_device, { PCI_USB0_IOADDR,
+                                      PCI_USB0_MEMADDR,
+                                      PCI_COMMAND_MEMORY |
+                                      PCI_COMMAND_MASTER }},
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+         PCI_ANY_ID, 0x0e, 1,          /* D720101 USB controller, 2nd USB 1.1 */
+         pci_cfgfunc_config_device, { PCI_USB1_IOADDR,
+                                      PCI_USB1_MEMADDR,
+                                      PCI_COMMAND_MEMORY |
+                                      PCI_COMMAND_MASTER }},
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+         PCI_ANY_ID, 0x0e, 2,          /* D720101 USB controller, USB 2.0 */
+         pci_cfgfunc_config_device, { PCI_USB2_IOADDR,
+                                      PCI_USB2_MEMADDR,
+                                      PCI_COMMAND_MEMORY |
+                                      PCI_COMMAND_MASTER }},
+       { }
+};
+#endif
+
+struct pci_controller hose = {
+#ifndef CONFIG_PCI_PNP
+       config_table:pci_linkstation_config_table,
+#endif
+};
+
+void pci_init_board (void)
+{
+       pci_mpc824x_init (&hose);
+
+       /* Reset USB 1.1 */
+       out_le32(PCI_USB0_MEMADDR+8, 1);
+       out_le32(PCI_USB1_MEMADDR+8, 1);
+
+}
+#endif /* CONFIG_PCI */
+
+/* vim: set ts=4: */