Merge branch 'master' of git://git.denx.de/u-boot-ppc4xx
[platform/kernel/u-boot.git] / board / ppmc7xx / ppmc7xx.c
1 /*
2  * ppmc7xx.c
3  * ---------
4  *
5  * Main board-specific routines for Wind River PPMC 7xx/74xx board.
6  *
7  * By Richard Danter (richard.danter@windriver.com)
8  * Copyright (C) 2005 Wind River Systems
9  */
10
11 #include <common.h>
12 #include <command.h>
13 #include <netdev.h>
14
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 */
22 extern void unlock_ram_in_cache( void );
23 extern void _start_warm(void);
24
25
26 /*
27  * initdram()
28  *
29  * This function normally initialises the (S)DRAM of the system. For this board
30  * the SDRAM was already initialised by board_asm_init (see init.S) so we just
31  * return the size of RAM.
32  */
33 phys_size_t initdram( int board_type )
34 {
35     return CFG_SDRAM_SIZE;
36 }
37
38
39 /*
40  * after_reloc()
41  *
42  * This is called after U-Boot has been copied from Flash/ROM to RAM. It gives
43  * us an opportunity to do some additional setup before the rest of the system
44  * is initialised. We don't need to do anything, so we just call board_init_r()
45  * which should never return.
46  */
47 void after_reloc( ulong dest_addr, gd_t* gd )
48 {
49         /* Jump to the main U-Boot board init code */
50         board_init_r( gd, dest_addr );
51 }
52
53
54 /*
55  * checkboard()
56  *
57  * We could do some board level checks here, such as working out what version
58  * it is, but for this board we simply display it's name (on the console).
59  */
60 int checkboard( void )
61 {
62     puts( "Board: Wind River PPMC 7xx/74xx\n" );
63     return 0;
64 }
65
66
67 /*
68  * misc_init_r
69  *
70  * Used for other setup which needs to be done late in the bring-up phase.
71  */
72 int misc_init_r( void )
73 {
74         /* Reset the EPIC and clear pending interrupts */
75         out32r(MPC107_EUMB_GCR, 0xa0000000);
76         while( in32r( MPC107_EUMB_GCR ) & 0x80000000 );
77         out32r( MPC107_EUMB_GCR, 0x20000000 );
78         while( in32r( MPC107_EUMB_IACKR ) != 0xff );
79
80         /* Enable the I-Cache */
81         icache_enable();
82
83         return 0;
84 }
85
86
87 /*
88  * do_reset()
89  *
90  * Shell command to reset the board.
91  */
92 void do_reset( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] )
93 {
94         printf( "Resetting...\n" );
95
96         /* Disabe and invalidate cache */
97         icache_disable();
98         dcache_disable();
99
100         /* Jump to warm start (in RAM) */
101         _start_warm();
102
103         /* Should never get here */
104         while(1);
105 }
106
107 int board_eth_init(bd_t *bis)
108 {
109         return pci_eth_init(bis);
110 }