Merge branch 'master' of git://git.denx.de/u-boot-arm
[platform/kernel/u-boot.git] / board / pcippc2 / pcippc2.c
index e1b065b..6ee44d6 100644 (file)
 #include <linux/mtd/doc2000.h>
 #include <watchdog.h>
 #include <pci.h>
+#include <netdev.h>
 
 #include "hardware.h"
 #include "pcippc2.h"
 #include "sconsole.h"
 #include "fpga_serial.h"
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if defined(CONFIG_WATCHDOG)
 
 static int pcippc2_wdt_init_done = 0;
@@ -61,19 +64,21 @@ u32 pcippc2_sdram_size (void)
        return in32 (REG (CPC0, RGBAN1));
 }
 
-long initdram (int board_type)
+phys_size_t initdram (int board_type)
 {
        return cpc710_ram_init ();
 }
 
-void do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        out32 (REG (CPC0, SPOR), 0);
        iobarrier_rw ();
        while (1);
+       /* notreached */
+       return (-1);
 }
 
-int board_pre_init (void)
+int board_early_init_f (void)
 {
        out32 (REG (CPC0, RSTR), 0xC0000000);
        iobarrier_rw ();
@@ -106,17 +111,17 @@ int board_pre_init (void)
 
 void after_reloc (ulong dest_addr)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        /* Jump to the main U-Boot board init code
         */
-       board_init_r (gd, dest_addr);
+       board_init_r ((gd_t *)gd, dest_addr);
 }
 
 int misc_init_r (void)
 {
        pcippc2_fpga_init ();
 
+       pcippc2_cpci3264_init ();
+
 #if defined(CONFIG_WATCHDOG)
        pcippc2_wdt_init ();
 #endif
@@ -133,7 +138,7 @@ int misc_init_r (void)
        return (0);
 }
 
-void pci_init (void)
+void pci_init_board (void)
 {
        cpc710_pci_init ();
 
@@ -142,10 +147,31 @@ void pci_init (void)
        cpc710_pci_enable_timeout ();
 }
 
+#ifdef CONFIG_CMD_DOC
 void doc_init (void)
 {
        doc_probe (pcippc2_fpga1_phys + HW_FPGA1_DOC);
 }
+#endif
+
+void pcippc2_cpci3264_init (void)
+{
+  pci_dev_t            bdf = pci_find_device(FPGA_VENDOR_ID, FPGA_DEVICE_ID, 0);
+
+  if (bdf == -1)
+  {
+    puts("Unable to find FPGA !\n");
+    hang();
+  }
+
+       if((in32(pcippc2_fpga0_phys + HW_FPGA0_BOARD) & 0x01000000) == 0x01000000)
+       /* 32-bits Compact PCI bus - LSB bit */
+       {
+               iobarrier_rw();
+               out32(BRIDGE(CPCI, PCIDG), 0x40000000); /* 32-bits bridge, Pipeline */
+               iobarrier_rw();
+       }
+}
 
 #if defined(CONFIG_WATCHDOG)
 
@@ -179,8 +205,8 @@ void watchdog_reset (void)
                enable_interrupts ();
 }
 
-#if (CONFIG_COMMANDS & CFG_CMD_BSP)
-int do_wd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+#if defined(CONFIG_CMD_BSP)
+int do_wd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        switch (argc) {
        case 1:
@@ -206,9 +232,22 @@ int do_wd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        default:
                break;
        }
-       printf ("Usage:\n%s\n", cmdtp->usage);
+       cmd_usage(cmdtp);
        return 1;
 }
 
-#endif /* CFG_CMD_BSP */
+U_BOOT_CMD(
+       wd,     2,      1,      do_wd,
+       "check and set watchdog",
+       "on   - switch watchDog on\n"
+       "wd off  - switch watchdog off\n"
+       "wd      - print current status"
+);
+
+#endif
 #endif /* CONFIG_WATCHDOG */
+
+int board_eth_init(bd_t *bis)
+{
+       return pci_eth_init(bis);
+}