add Black Swift board support
[oweals/u-boot_mod.git] / u-boot / board / ar7240 / ap121 / ap121.c
1 #include <common.h>
2 #include <command.h>
3 #include <asm/mipsregs.h>
4 #include <asm/addrspace.h>
5 #include <config.h>
6 #include <version.h>
7 #include "ar7240_soc.h"
8
9 #if !defined(COMPRESSED_UBOOT)
10 extern void     hornet_ddr_init(void);
11 #endif
12
13 extern int ar7240_ddr_find_size(void);
14 extern void hornet_ddr_tap_init(void);
15
16 #define SETBITVAL(val, pos, bit) do {ulong bitval = (bit) ? 0x1 : 0x0; (val) = ((val) & ~(0x1 << (pos))) | ( (bitval) << (pos));} while(0)
17
18 void led_toggle(void){
19         unsigned int gpio;
20
21         gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
22
23 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
24         gpio ^= 1 << GPIO_WPS_LED_BIT;
25 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined(CONFIG_FOR_TPLINK_WR710N_V1)
26         gpio ^= 1 << GPIO_SYS_LED_BIT;
27 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
28         gpio ^= 1 << GPIO_INTERNET_LED_BIT;
29 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
30         gpio ^= 1 << GPIO_SYS_LED_BIT;
31 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
32         gpio ^= 1 << GPIO_SYS_LED_BIT;
33 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
34         gpio ^= 1 << GPIO_SYS_LED_BIT;
35 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
36         gpio ^= 1 << GPIO_SYS_LED_BIT;
37 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
38         gpio ^= 1 << GPIO_WLAN_LED_BIT;
39 #elif defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2)
40         gpio ^= 1 << GPIO_WLAN_LED_BIT;
41 #elif defined(CONFIG_FOR_BSB)
42         gpio ^= 1 << GPIO_SYS_LED_BIT;
43 #elif defined(CONFIG_FOR_GL_INET)
44         gpio ^= 1 << GPIO_WLAN_LED_BIT;
45 #else
46         #error "Custom GPIO in leg_toggle() not defined!"
47 #endif
48
49         ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
50 }
51
52 void all_led_on(void){
53         unsigned int gpio;
54
55         gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
56
57 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
58         SETBITVAL(gpio, GPIO_WPS_LED_BIT, GPIO_WPS_LED_ON);
59         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
60         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
61         SETBITVAL(gpio, GPIO_ETH_LED_BIT, GPIO_ETH_LED_ON);
62 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined (CONFIG_FOR_TPLINK_WR710N_V1)
63         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
64 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
65         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
66         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
67         SETBITVAL(gpio, GPIO_ETH_LED_BIT, GPIO_ETH_LED_ON);
68 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
69         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
70 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
71         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
72         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
73         SETBITVAL(gpio, GPIO_LAN1_LED_BIT, GPIO_LAN1_LED_ON);
74         SETBITVAL(gpio, GPIO_LAN2_LED_BIT, GPIO_LAN2_LED_ON);
75         SETBITVAL(gpio, GPIO_LAN3_LED_BIT, GPIO_LAN3_LED_ON);
76         SETBITVAL(gpio, GPIO_LAN4_LED_BIT, GPIO_LAN4_LED_ON);
77         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
78         SETBITVAL(gpio, GPIO_QSS_LED_BIT, GPIO_QSS_LED_ON);
79
80         #ifdef CONFIG_FOR_TPLINK_MR3220_V2
81         SETBITVAL(gpio, GPIO_USB_LED_BIT, GPIO_USB_LED_ON);
82         #endif
83 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
84         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
85 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
86         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
87         SETBITVAL(gpio, GPIO_WAN_LED_BIT, GPIO_WAN_LED_ON);
88         SETBITVAL(gpio, GPIO_LAN1_LED_BIT, GPIO_LAN1_LED_ON);
89         SETBITVAL(gpio, GPIO_LAN2_LED_BIT, GPIO_LAN2_LED_ON);
90 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
91         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
92 #elif defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2)
93         SETBITVAL(gpio, GPIO_WLAN_LED_BIT,     GPIO_WLAN_LED_ON);
94         SETBITVAL(gpio, GPIO_WAN_LED_BIT,      GPIO_WAN_LED_ON);
95         SETBITVAL(gpio, GPIO_LAN_LED_BIT,      GPIO_LAN_LED_ON);
96         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
97 #elif defined(CONFIG_FOR_BSB)
98         SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
99 #elif defined(CONFIG_FOR_GL_INET)
100         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
101         SETBITVAL(gpio, GPIO_LAN_LED_BIT,  GPIO_LAN_LED_ON);
102 #else
103         #error "Custom GPIO in all_led_on() not defined!"
104 #endif
105
106         ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
107 }
108
109 void all_led_off(void){
110         unsigned int gpio;
111
112         gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
113
114 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
115         SETBITVAL(gpio, GPIO_WPS_LED_BIT, !GPIO_WPS_LED_ON);
116         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
117         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
118         SETBITVAL(gpio, GPIO_ETH_LED_BIT, !GPIO_ETH_LED_ON);
119 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined (CONFIG_FOR_TPLINK_WR710N_V1)
120         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
121 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
122         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
123         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
124         SETBITVAL(gpio, GPIO_ETH_LED_BIT, !GPIO_ETH_LED_ON);
125 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
126         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
127 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
128         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
129         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
130         SETBITVAL(gpio, GPIO_LAN1_LED_BIT, !GPIO_LAN1_LED_ON);
131         SETBITVAL(gpio, GPIO_LAN2_LED_BIT, !GPIO_LAN2_LED_ON);
132         SETBITVAL(gpio, GPIO_LAN3_LED_BIT, !GPIO_LAN3_LED_ON);
133         SETBITVAL(gpio, GPIO_LAN4_LED_BIT, !GPIO_LAN4_LED_ON);
134         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
135         SETBITVAL(gpio, GPIO_QSS_LED_BIT, !GPIO_QSS_LED_ON);
136
137         #ifdef CONFIG_FOR_TPLINK_MR3220_V2
138         SETBITVAL(gpio, GPIO_USB_LED_BIT, !GPIO_USB_LED_ON);
139         #endif
140 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
141         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
142 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
143         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
144         SETBITVAL(gpio, GPIO_WAN_LED_BIT, !GPIO_WAN_LED_ON);
145         SETBITVAL(gpio, GPIO_LAN1_LED_BIT, !GPIO_LAN1_LED_ON);
146         SETBITVAL(gpio, GPIO_LAN2_LED_BIT, !GPIO_LAN2_LED_ON);
147 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
148         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
149 #elif defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2)
150         SETBITVAL(gpio, GPIO_WLAN_LED_BIT,     !GPIO_WLAN_LED_ON);
151         SETBITVAL(gpio, GPIO_WAN_LED_BIT,      !GPIO_WAN_LED_ON);
152         SETBITVAL(gpio, GPIO_LAN_LED_BIT,      !GPIO_LAN_LED_ON);
153         SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
154 #elif defined(CONFIG_FOR_BSB)
155         SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
156 #elif defined(CONFIG_FOR_GL_INET)
157         SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
158         SETBITVAL(gpio, GPIO_LAN_LED_BIT,  !GPIO_LAN_LED_ON);
159 #else
160         #error "Custom GPIO in all_led_off() not defined!"
161 #endif
162
163         ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
164 }
165
166 // get button status
167 #ifndef GPIO_RST_BUTTON_BIT
168         #error "GPIO_RST_BUTTON_BIT not defined!"
169 #endif
170 int reset_button_status(void){
171         unsigned int gpio;
172
173         gpio = ar7240_reg_rd(AR7240_GPIO_IN);
174
175         if(gpio & (1 << GPIO_RST_BUTTON_BIT)){
176 #if defined(GPIO_RST_BUTTON_IS_ACTIVE_LOW)
177                 return(0);
178 #else
179                 return(1);
180 #endif
181         } else {
182 #if defined(GPIO_RST_BUTTON_IS_ACTIVE_LOW)
183                 return(1);
184 #else
185                 return(0);
186 #endif
187         }
188 }
189
190 void gpio_config(void){
191 #if defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
192     /* Disable clock obs
193      * clk_obs1(gpio13/bit8),  clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
194      * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
195      * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
196      */
197     ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~((0x1f<<8)|(0x3<<19))));
198
199
200     /* Enable eth Switch LEDs */
201     ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | (0x1f<<3)));
202
203
204     //Turn on status leds:
205     //set output enable
206     ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) |(1<<0)));
207
208     //set WLAN LED output to low (reverse polarity LED)
209     //ar7240_reg_wr(AR7240_GPIO_CLEAR, (1<<0));
210
211     /* Clear AR7240_GPIO_FUNC BIT2 to ensure that software can control LED5(GPIO16) and LED6(GPIO17)  */
212     ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~(0x1<<2)));
213 #else
214         /* Disable clock obs 
215          * clk_obs1(gpio13/bit8),  clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
216          * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
217          * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
218          */
219
220         ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xEF84E0FB));
221
222 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
223         /* Disable EJTAG functionality to enable GPIO functionality */
224         ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | 0x8001));
225 #endif
226
227         /* Set HORNET_BOOTSTRAP_STATUS BIT18 to ensure that software can control GPIO26 and GPIO27 */
228         ar7240_reg_wr(HORNET_BOOTSTRAP_STATUS, (ar7240_reg_rd(HORNET_BOOTSTRAP_STATUS) | (0x1<<18)));
229 #endif
230
231 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
232
233         /* LED's GPIOs on MR3020:
234          *
235          * 0    => WLAN
236          * 17   => ETH
237          * 26   => WPS
238          * 27   => INTERNET
239          *
240          */
241
242         /* set OE, added by zcf, 20110509 */
243         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC020001));
244
245         /* Disable clock obs, added by zcf, 20110509 */
246         //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
247 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined(CONFIG_FOR_TPLINK_WR710N_V1)
248
249         /* LED's GPIOs on WR703N/WR720Nv3/WR710N:
250          *
251          * 27   => SYS
252          *
253          */
254
255         /* set OE, added by zcf, 20110714 */
256         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x8000000));
257 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
258
259         /* LED's GPIOs on MR3040:
260          *
261          * 26   => WLAN
262          * 17   => ETH
263          * 27   => INTERNET
264          *
265          */
266
267         /* set OE, added by zcf, 20110509 */
268         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC020000));
269
270         /* Disable clock obs, added by zcf, 20110509 */
271         //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
272 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
273
274         /* LED's GPIOs on MR10U/MR13U:
275          *
276          * 27   => SYS
277          *
278          */
279
280         /* set OE, added by zcf, 20110714 */
281         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x8000000));
282 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4)
283
284         /* LED's GPIOs on WR740Nv4:
285          *
286          * 0    => WLAN
287          * 1    => QSS
288          * 13   => INTERNET
289          * 14   => LAN1
290          * 15   => LAN2
291          * 16   => LAN3
292          * 17   => LAN4
293          * 27   => SYS
294          *
295          */
296
297         /* set OE, added by zcf, 20110509 */
298         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x803E003));
299
300         /* Disable clock obs, added by zcf, 20110509 */
301         //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
302 #elif defined(CONFIG_FOR_TPLINK_MR3220_V2)
303
304         /* LED's GPIOs on MR3220v2:
305          *
306          * 0    => WLAN
307          * 1    => QSS
308          * 13   => INTERNET
309          * 14   => LAN1
310          * 15   => LAN2
311          * 16   => LAN3
312          * 17   => LAN4
313          * 26   => USB
314          * 27   => SYS
315          *
316          */
317
318         /* set OE, added by zcf, 20110509 */
319         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC03E003));
320
321         /* Disable clock obs, added by zcf, 20110509 */
322         //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
323 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
324         // TODO: check GPIO config for C2
325 #elif defined(CONFIG_FOR_DRAGINO_V2) || defined(CONFIG_FOR_MESH_POTATO_V2)
326
327         /* LED's GPIOs on MR3220v2:
328          *
329          * 0    => WLAN
330          * 13   => LAN
331          * 17   => WAN
332          * 28   => INTERNET
333          *
334          */
335
336         /* set GPIO_OE */
337         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x10022001));
338
339 #elif defined(CONFIG_FOR_BSB)
340
341         /* LED's GPIOs on Black Swift board:
342          *
343          * 27   => SYS LED (red) - output
344          * 13-17=> output only (see AR9331 datasheet)
345          * 11   => Reset switch (active low) - in (like all other by default)
346          *
347          */
348
349         // set GPIO_OE
350         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x0803E000));
351
352         // turn off all
353         ar7240_reg_wr(AR7240_GPIO_SET, 0x0);
354
355 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
356
357         /* LED's GPIOs on DIR-505:
358          *
359          * 26   => RED LED
360          * 27   => GREEN LED
361          *
362          */
363
364         // set GPIO_OE
365         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC000000));
366
367         // turn off RED LED, we don't need it
368         ar7240_reg_wr(AR7240_GPIO_OUT, (ar7240_reg_rd(AR7240_GPIO_OUT) | (0x1 << 26)));
369 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
370
371         /* LED's GPIOs on GS-Oolite v1 with development board:
372          *
373          * 13   => LAN2
374          * 15   => LAN1
375          * 17   => WAN
376          * 27   => SYS LED (green on dev board, red on module)
377          *
378          * I/O on development board:
379          * 0    => RED LED (active low)
380          * 1    => RED LED (active low)
381          * 6    => Switch 8
382          * 7    => Switch 7
383          * 8    => USB power
384          * 11   => Reset switch
385          * 14   => RED LED (active low)
386          * 16   => RED LED (active low)
387          * 18   => RED LED (active low)
388          * 19   => RED LED (active low)
389          * 20   => RED LED (active low)
390          * 21   => RED LED (active low)
391          * 22   => RED LED (active low)
392          * 23   => Relay 1
393          * 24   => Relay 2
394          * 26   => RED LED (active low)
395          *
396          */
397
398         // set GPIO_OE
399         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xDFFE103));
400
401         // turn on power on USB and turn off RED LEDs
402         ar7240_reg_wr(AR7240_GPIO_SET, 0x47D4103);
403 #elif defined(CONFIG_FOR_GL_INET)
404
405         /* LED's GPIOs on GL.iNet:
406          *
407          * 0    => WLAN
408          * 13   => LAN
409          *
410          */
411
412         /* set GPIO_OE */
413         ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x2001));
414
415 #else
416         #error "Custom GPIO config in gpio_config() not defined!"
417 #endif
418 }
419
420 int ar7240_mem_config(void){
421 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
422         #ifndef COMPRESSED_UBOOT
423         hornet_ddr_init();
424         #endif
425
426         /* Default tap values for starting the tap_init*/
427         ar7240_reg_wr(AR7240_DDR_TAP_CONTROL0, CFG_DDR_TAP0_VAL);
428         ar7240_reg_wr(AR7240_DDR_TAP_CONTROL1, CFG_DDR_TAP1_VAL);
429 #endif
430
431         gpio_config();
432         all_led_off();
433
434 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
435         hornet_ddr_tap_init();
436 #endif
437
438         // return memory size
439         return(ar7240_ddr_find_size());
440 }
441
442 long int initdram(){
443         return((long int)ar7240_mem_config());
444 }
445
446 #ifndef COMPRESSED_UBOOT
447 int checkboard(void){
448         printf(BOARD_CUSTOM_STRING"\n\n");
449         return(0);
450 }
451 #endif
452
453 /*
454  * Returns a string with memory type preceded by a space sign
455  */
456 const char* print_mem_type(void){
457 /*
458  * WR720N v3 (CH version) has wrong bootstrap configuration,
459  * so the memory type cannot be recognized automatically
460  */
461 #if defined(CONFIG_FOR_TPLINK_WR720N_V3)
462         return " DDR 16-bit";
463 #else
464         unsigned int reg_val;
465
466         reg_val = (ar7240_reg_rd(HORNET_BOOTSTRAP_STATUS) & HORNET_BOOTSTRAP_MEM_TYPE_MASK) >> HORNET_BOOTSTRAP_MEM_TYPE_SHIFT;
467
468         switch(reg_val){
469                 case 0:
470                         return " SDRAM";
471                         break;
472
473                 case 1:
474                         return " DDR 16-bit";
475                         break;
476
477                 case 2:
478                         return " DDR2 16-bit";
479                         break;
480
481                 default:
482                         return "";
483                         break;
484         }
485 #endif /* defined(CONFIG_FOR_TPLINK_WR720N_V3) */
486 }