1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <common.h>
28#include <stdio_dev.h>
29#include <watchdog.h>
30#include <net.h>
31#ifdef CONFIG_STATUS_LED
32#include <status_led.h>
33#endif
34#if defined(CONFIG_SYS_NIOS_EPCSBASE)
35#include <nios2-epcs.h>
36#endif
37
38DECLARE_GLOBAL_DATA_PTR;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54extern void malloc_bin_reloc (void);
55typedef int (init_fnc_t) (void);
56
57
58
59
60static ulong mem_malloc_start = 0;
61static ulong mem_malloc_end = 0;
62static ulong mem_malloc_brk = 0;
63
64
65
66
67static void mem_malloc_init (void)
68{
69 mem_malloc_start = CONFIG_SYS_MALLOC_BASE;
70 mem_malloc_end = mem_malloc_start + CONFIG_SYS_MALLOC_LEN;
71 mem_malloc_brk = mem_malloc_start;
72 memset ((void *) mem_malloc_start,
73 0,
74 mem_malloc_end - mem_malloc_start);
75}
76
77void *sbrk (ptrdiff_t increment)
78{
79 ulong old = mem_malloc_brk;
80 ulong new = old + increment;
81
82 if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
83 return (NULL);
84 }
85 mem_malloc_brk = new;
86 return ((void *) old);
87}
88
89
90
91
92
93
94init_fnc_t *init_sequence[] = {
95
96#if defined(CONFIG_BOARD_EARLY_INIT_F)
97 board_early_init_f,
98#endif
99#if defined(CONFIG_SYS_NIOS_EPCSBASE)
100 epcs_reset,
101#endif
102
103 env_init,
104 serial_init,
105 console_init_f,
106 display_options,
107 checkcpu,
108 checkboard,
109 NULL,
110};
111
112
113
114void board_init (void)
115{
116 bd_t *bd;
117 init_fnc_t **init_fnc_ptr;
118 char *s, *e;
119 int i;
120
121
122
123
124 gd = (gd_t *)CONFIG_SYS_GBL_DATA_OFFSET;
125
126 __asm__ __volatile__("": : :"memory");
127
128 memset( gd, 0, CONFIG_SYS_GBL_DATA_SIZE );
129
130 gd->bd = (bd_t *)(gd+1);
131 gd->baudrate = CONFIG_BAUDRATE;
132 gd->cpu_clk = CONFIG_SYS_CLK_FREQ;
133
134 bd = gd->bd;
135 bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
136 bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
137 bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
138#if defined(CONFIG_SYS_SRAM_BASE) && defined(CONFIG_SYS_SRAM_SIZE)
139 bd->bi_sramstart= CONFIG_SYS_SRAM_BASE;
140 bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;
141#endif
142 bd->bi_baudrate = CONFIG_BAUDRATE;
143
144 for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
145 WATCHDOG_RESET ();
146 if ((*init_fnc_ptr) () != 0) {
147 hang ();
148 }
149 }
150
151 WATCHDOG_RESET ();
152 mem_malloc_init();
153 malloc_bin_reloc();
154
155 WATCHDOG_RESET ();
156 bd->bi_flashsize = flash_init();
157
158 WATCHDOG_RESET ();
159 env_relocate();
160
161 bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
162
163 WATCHDOG_RESET ();
164 stdio_init();
165 jumptable_init();
166 console_init_r();
167
168 WATCHDOG_RESET ();
169 interrupt_init ();
170
171#if defined(CONFIG_BOARD_LATE_INIT)
172 board_late_init ();
173#endif
174
175
176 for (;;) {
177 WATCHDOG_RESET ();
178 main_loop ();
179 }
180}
181
182
183
184
185void hang (void)
186{
187 disable_interrupts ();
188 puts("### ERROR ### Please reset board ###\n");
189 for (;;);
190}
191