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