Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / u-boot / board / ppmc7xx / ppmc7xx.c
diff --git a/qemu/roms/u-boot/board/ppmc7xx/ppmc7xx.c b/qemu/roms/u-boot/board/ppmc7xx/ppmc7xx.c
new file mode 100644 (file)
index 0000000..432d366
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * ppmc7xx.c
+ * ---------
+ *
+ * Main board-specific routines for Wind River PPMC 7xx/74xx board.
+ *
+ * By Richard Danter (richard.danter@windriver.com)
+ * Copyright (C) 2005 Wind River Systems
+ */
+
+#include <common.h>
+#include <command.h>
+#include <netdev.h>
+
+
+/* Define some MPC107 (memory controller) registers */
+#define MPC107_EUMB_GCR         0xfce41020
+#define MPC107_EUMB_IACKR       0xfce600a0
+
+
+/* Function prototypes */
+extern void _start(void);
+
+
+/*
+ * initdram()
+ *
+ * This function normally initialises the (S)DRAM of the system. For this board
+ * the SDRAM was already initialised by board_asm_init (see init.S) so we just
+ * return the size of RAM.
+ */
+phys_size_t initdram( int board_type )
+{
+    return CONFIG_SYS_SDRAM_SIZE;
+}
+
+
+/*
+ * after_reloc()
+ *
+ * This is called after U-Boot has been copied from Flash/ROM to RAM. It gives
+ * us an opportunity to do some additional setup before the rest of the system
+ * is initialised. We don't need to do anything, so we just call board_init_r()
+ * which should never return.
+ */
+void after_reloc( ulong dest_addr, gd_t* gd )
+{
+       /* Jump to the main U-Boot board init code */
+       board_init_r( gd, dest_addr );
+}
+
+
+/*
+ * checkboard()
+ *
+ * We could do some board level checks here, such as working out what version
+ * it is, but for this board we simply display it's name (on the console).
+ */
+int checkboard( void )
+{
+    puts( "Board: Wind River PPMC 7xx/74xx\n" );
+    return 0;
+}
+
+
+/*
+ * misc_init_r
+ *
+ * Used for other setup which needs to be done late in the bring-up phase.
+ */
+int misc_init_r( void )
+{
+       /* Reset the EPIC and clear pending interrupts */
+       out32r(MPC107_EUMB_GCR, 0xa0000000);
+       while( in32r( MPC107_EUMB_GCR ) & 0x80000000 );
+       out32r( MPC107_EUMB_GCR, 0x20000000 );
+       while( in32r( MPC107_EUMB_IACKR ) != 0xff );
+
+       /* Enable the I-Cache */
+       icache_enable();
+
+       return 0;
+}
+
+
+/*
+ * do_reset()
+ *
+ * Shell command to reset the board.
+ */
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       printf( "Resetting...\n" );
+
+       /* Disabe and invalidate cache */
+       icache_disable();
+       dcache_disable();
+
+       /* Jump to cold reset point (in RAM) */
+       _start();
+
+       /* Should never get here */
+       while(1)
+               ;
+
+       return 1;
+}
+
+int board_eth_init(bd_t *bis)
+{
+       return pci_eth_init(bis);
+}