blob: 5e7427f370f02f45bbf280a12927f6c719612e8b [file] [log] [blame]
Heiko Schocherf5e0d032006-06-19 11:02:41 +02001/*
2 * ppmc7xx.c
3 * ---------
Wolfgang Denkb87dfd22006-07-19 13:50:38 +02004 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +02005 * Main board-specific routines for Wind River PPMC 7xx/74xx board.
Wolfgang Denkb87dfd22006-07-19 13:50:38 +02006 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +02007 * By Richard Danter (richard.danter@windriver.com)
8 * Copyright (C) 2005 Wind River Systems
9 */
10
11#include <common.h>
12#include <command.h>
Ben Warren10efa022008-08-31 20:37:00 -070013#include <netdev.h>
Heiko Schocherf5e0d032006-06-19 11:02:41 +020014
15
16/* Define some MPC107 (memory controller) registers */
17#define MPC107_EUMB_GCR 0xfce41020
18#define MPC107_EUMB_IACKR 0xfce600a0
19
20
21/* Function prototypes */
Peter Tyser3792d742010-09-14 19:13:52 -050022extern void _start(void);
Heiko Schocherf5e0d032006-06-19 11:02:41 +020023
24
25/*
26 * initdram()
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020027 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +020028 * This function normally initialises the (S)DRAM of the system. For this board
29 * the SDRAM was already initialised by board_asm_init (see init.S) so we just
30 * return the size of RAM.
31 */
Becky Bruce9973e3c2008-06-09 16:03:40 -050032phys_size_t initdram( int board_type )
Heiko Schocherf5e0d032006-06-19 11:02:41 +020033{
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +020034 return CONFIG_SYS_SDRAM_SIZE;
Heiko Schocherf5e0d032006-06-19 11:02:41 +020035}
36
37
38/*
39 * after_reloc()
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020040 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +020041 * This is called after U-Boot has been copied from Flash/ROM to RAM. It gives
42 * us an opportunity to do some additional setup before the rest of the system
43 * is initialised. We don't need to do anything, so we just call board_init_r()
44 * which should never return.
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020045 */
Heiko Schocherf5e0d032006-06-19 11:02:41 +020046void after_reloc( ulong dest_addr, gd_t* gd )
47{
48 /* Jump to the main U-Boot board init code */
49 board_init_r( gd, dest_addr );
50}
51
52
53/*
54 * checkboard()
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020055 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +020056 * We could do some board level checks here, such as working out what version
57 * it is, but for this board we simply display it's name (on the console).
58 */
59int checkboard( void )
60{
61 puts( "Board: Wind River PPMC 7xx/74xx\n" );
62 return 0;
63}
64
65
66/*
67 * misc_init_r
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020068 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +020069 * Used for other setup which needs to be done late in the bring-up phase.
70 */
71int misc_init_r( void )
72{
73 /* Reset the EPIC and clear pending interrupts */
74 out32r(MPC107_EUMB_GCR, 0xa0000000);
75 while( in32r( MPC107_EUMB_GCR ) & 0x80000000 );
76 out32r( MPC107_EUMB_GCR, 0x20000000 );
77 while( in32r( MPC107_EUMB_IACKR ) != 0xff );
78
79 /* Enable the I-Cache */
80 icache_enable();
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020081
Heiko Schocherf5e0d032006-06-19 11:02:41 +020082 return 0;
83}
84
85
86/*
87 * do_reset()
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020088 *
Heiko Schocherf5e0d032006-06-19 11:02:41 +020089 * Shell command to reset the board.
90 */
Wolfgang Denk54841ab2010-06-28 22:00:46 +020091void do_reset( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] )
Heiko Schocherf5e0d032006-06-19 11:02:41 +020092{
93 printf( "Resetting...\n" );
Wolfgang Denkb87dfd22006-07-19 13:50:38 +020094
Heiko Schocherf5e0d032006-06-19 11:02:41 +020095 /* Disabe and invalidate cache */
96 icache_disable();
97 dcache_disable();
98
Peter Tyser3792d742010-09-14 19:13:52 -050099 /* Jump to cold reset point (in RAM) */
100 _start();
Wolfgang Denkb87dfd22006-07-19 13:50:38 +0200101
Heiko Schocherf5e0d032006-06-19 11:02:41 +0200102 /* Should never get here */
103 while(1);
104}
Ben Warren10efa022008-08-31 20:37:00 -0700105
106int board_eth_init(bd_t *bis)
107{
108 return pci_eth_init(bis);
109}