b39e6d363c6868169c1b3c77a41361e2bb191fe6
[oweals/u-boot_mod.git] / u-boot / include / configs / ap121.h
1 /*
2  * This file contains the configuration parameters for the AP121 (AR9331) board.
3  */
4
5 #ifndef __CONFIG_H
6 #define __CONFIG_H
7
8 #include <configs/ar7240.h>
9 #include <config.h>
10
11 /*
12  * FLASH and environment organization
13  */
14 #define CFG_MAX_FLASH_BANKS                     1
15 #define CFG_MAX_FLASH_SECT                      4096    // 4 KB sectors in 16 MB flash
16
17 /*
18  * We boot from this flash
19  */
20 #define CFG_FLASH_BASE                                  0x9F000000
21 #ifdef COMPRESSED_UBOOT
22         #define BOOTSTRAP_TEXT_BASE                     CFG_FLASH_BASE
23         #define BOOTSTRAP_CFG_MONITOR_BASE      BOOTSTRAP_TEXT_BASE
24 #endif
25
26 /*
27  * The following #defines are needed to get flash environment right
28  */
29 #define CFG_MONITOR_BASE        TEXT_BASE
30 #define CFG_MONITOR_LEN         (192 << 10)
31
32 /*
33  * Default bootargs
34  */
35 #undef CONFIG_BOOTARGS
36
37 #if defined(CONFIG_FOR_TPLINK_WR703N_V1) || \
38         defined(CONFIG_FOR_TPLINK_WR720N_V3) || \
39         defined(CONFIG_FOR_TPLINK_MR3020_V1) || \
40         defined(CONFIG_FOR_TPLINK_MR3040_V1V2) || \
41         defined(CONFIG_FOR_TPLINK_MR10U_V1) || \
42         defined(CONFIG_FOR_TPLINK_WR740N_V4) || \
43         defined(CONFIG_FOR_TPLINK_MR3220_V2) || \
44         defined(CONFIG_FOR_TPLINK_MR13U_V1)
45
46         #define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:128k(u-boot),1024k(kernel),2816k(rootfs),64k(config),64k(ART)"
47
48 #elif defined(CONFIG_FOR_TPLINK_WR710N_V1)
49
50         #define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:128k(u-boot),1024k(kernel),6912k(rootfs),64k(config),64k(ART)"
51
52 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
53
54         #define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:06 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:64k(u-boot),64k(ART),64k(mac),64k(nvram),256k(language),1024k(uImage),6656k(rootfs)"
55
56 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
57
58         #define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:256k(u-boot),64k(u-boot-env),16000k(firmware),64k(ART)"
59
60 #endif
61
62 /*
63  * Other env default values
64  */
65 #undef CONFIG_BOOTFILE
66 #define CONFIG_BOOTFILE                 "firmware.bin"
67
68 #undef CONFIG_LOADADDR
69 #define CONFIG_LOADADDR                 0x80800000
70
71 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
72         #define CFG_LOAD_ADDR           0x9F080000
73 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
74         #define CFG_LOAD_ADDR           0x9F050000
75 #else
76         #define CFG_LOAD_ADDR           0x9F020000
77 #endif
78
79 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
80         #define CONFIG_BOOTCOMMAND "bootm 0x9F080000"
81 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
82         #define CONFIG_BOOTCOMMAND "bootm 0x9F050000"
83 #else
84         #define CONFIG_BOOTCOMMAND "bootm 0x9F020000"
85 #endif
86
87 #define CONFIG_IPADDR           192.168.1.1
88 #define CONFIG_SERVERIP         192.168.1.2
89
90 #undef  CFG_HZ
91 #define CFG_HZ                          bd->bi_cfg_hz
92 #undef  CPU_PLL_CONFIG_VAL
93 #undef  CPU_CLK_CONTROL_VAL
94
95 // CPU-RAM-AHB frequency setting
96 #ifndef CFG_PLL_FREQ
97         #define CFG_PLL_FREQ    CFG_PLL_400_400_200
98 #endif
99
100 /*
101  * CPU_PLL_DITHER_FRAC_VAL
102  *
103  * Value written into CPU PLL Dither FRAC Register (PLL_DITHER_FRAC)
104  *
105  * bits 0..9    NFRAC_MAX       =>      1000 (0x3E8)
106  * bits 10..13  NFRAC_MIN       =>      0 (minimum value is used)
107  * bits 20..29  NFRAC_STEP      =>      1
108  *
109  */
110 #define CPU_PLL_DITHER_FRAC_VAL         0x001003E8
111
112 /*
113  * CPU_PLL_SETTLE_TIME_VAL
114  *
115  * Value written into CPU Phase Lock Loop Configuration Register 2 (CPU_PLL_CONFIG2)
116  *
117  * bits 0..11   SETTLE_TIME     =>      850 (0x352)
118  *
119  */
120 #if CONFIG_40MHZ_XTAL_SUPPORT
121         #define CPU_PLL_SETTLE_TIME_VAL         0x00000550
122 #else
123         #define CPU_PLL_SETTLE_TIME_VAL         0x00000352
124 #endif
125
126 /*
127  * CPU_CLK_CONTROL_VAL
128  *
129  * In CPU_CLK_CONTROL_VAL bit 2 is set (BYPASS = 1 -> bypass PLL)
130  * After PLL configuration we nedd to clear this bit
131  *
132  * Values written into CPU Clock Control Register CLOCK_CONTROL
133  *
134  * bits 2               (1bit)  BYPASS (Bypass PLL. This defaults to 1 for test purposes. Software must enable the CPU PLL for normal operation and then set this bit to 0)
135  * bits 5..6    (2bit)  CPU_POST_DIV    =>      0       (DEFAULT, Ratio = 1)
136  * bits 10..11  (2bit)  DDR_POST_DIV    =>      0       (DEFAULT, Ratio = 1)
137  * bits 15..16  (2bit)  AHB_POST_DIV    =>      1       (DEFAULT, Ratio = 2)
138  *
139  */
140
141 /*
142  * CPU_PLL_CONFIG_VAL
143  *
144  * In CPU_PLL_CONFIG_VAL bit 30 is set (CPU_PLLPWD = 1 -> power down control for CPU PLL)
145  * After PLL configuration we need to clear this bit
146  *
147  * Values written into CPU Phase Lock Loop Configuration (CPU_PLL_CONFIG)
148  *
149  * bits 10..15  (6bit)  DIV_INT (The integer part of the DIV to CPU PLL)                        =>      32      (0x20)
150  * bits 16..20  (5bit)  REFDIV  (Reference clock divider)                                                       =>      1       (0x1)   [doesn't start at values different than 1 (maybe need to change other dividers?)]
151  * bits 21              (1bit)  RANGE   (Determine the VCO frequency range of the CPU PLL)      =>      0       (0x0)   [doesn't have impact on clock values]
152  * bits 23..25  (3bit)  OUTDIV  (Define the ratio between VCO output and PLL output     =>      1       (0x1)   [value == 0 is illegal!]
153  *                                                              VCOOUT * (1/2^OUTDIV) = PLLOUT)
154  */
155
156 /*
157  * = PLL CALCULATION =============
158  * PLL = ((25 MHz / REFDIV) * DIV_INT) / (2 ^ OUTDIV)   // XTAL=25 MHz
159  * OR
160  * PLL = ((40 MHz / REFDIV) * DIV_INT) / (2 ^ OUTDIV)   // XTAL=40 MHz
161  *
162  * CPU = PLL / CPU_POST_DIV
163  * DDR = PLL / DDR_POST_DIV
164  * AHB = PLL / AHB_POST_DIV
165  *
166  */
167
168 /*
169  * AR7240_SPI_CONTROL
170  *
171  * Value written into SPI Control (SPI_CONTROL) register
172  *
173  * bits 0..5    (6bit)  CLOCK_DIVIDER   (Specifies the clock divider setting. Actual clock frequency would be (AHB_CLK / ((CLOCK_DIVIDER+1)*2)) )
174  * bits 6               (1bit)  REMAP_DISABLE   (Remaps 4 MB space over unless explicitly disabled by setting this bit to 1. If set to 1, 16 MB is accessible.)
175  *
176  */
177
178 /*
179  * CPU_PLL_CONFIG and CPU_CLK_CONTROL registers values generator
180  */
181 #define MAKE_AR9331_CPU_PLL_CONFIG_VAL(divint, refdiv, range, outdiv)  ( ((0x3F & divint) << 10) | \
182                                                                          ((0x1F & refdiv) << 16) | \
183                                                                          ((0x1 & range)   << 21) | \
184                                                                          ((0x7 & outdiv)  << 23) )
185
186 #define MAKE_AR9331_CPU_CLK_CONTROL_VAL(cpudiv, ddrdiv, ahbdiv)        ( ((0x3 & (cpudiv - 1)) << 5)  | \
187                                                                          ((0x3 & (ddrdiv - 1)) << 10) | \
188                                                                          ((0x3 & (ahbdiv - 1)) << 15) )
189
190 #define MAKE_AR9331_SPI_CONTROL_VAL(spidiv)                            ( ((spidiv >> 1) - 1) | 0x40 )
191
192 /*
193  * Default values (400/400/200 MHz) for O/C recovery mode
194  */
195
196 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
197 #define CPU_CLK_CONTROL_VAL_DEFAULT             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
198
199 #if CONFIG_40MHZ_XTAL_SUPPORT
200         // DIV_INT = 20 (40 MHz * 20/2 = 400 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
201         #define CPU_PLL_CONFIG_VAL_DEFAULT      MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
202 #else
203         // DIV_INT = 32 (25 MHz * 32/2 = 400 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
204         #define CPU_PLL_CONFIG_VAL_DEFAULT      MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 1)
205 #endif
206
207 // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
208 #define AR7240_SPI_CONTROL_DEFAULT      MAKE_AR9331_SPI_CONTROL_VAL(6)
209
210 #if (CFG_PLL_FREQ == CFG_PLL_200_200_100)
211
212         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
213         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
214
215         #if CONFIG_40MHZ_XTAL_SUPPORT
216                 // DIV_INT = 20 (40 MHz * 20/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
217                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 2)
218         #else
219                 // DIV_INT = 32 (25 MHz * 32/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
220                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 2)
221         #endif
222
223         // CLOCK_DIVIDER = 1 (SPI clock = 100 / 4 ~ 25 MHz)
224         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
225
226         #define CFG_HZ_FALLBACK (200000000LU/2)
227
228 #elif (CFG_PLL_FREQ == CFG_PLL_200_200_200)
229
230         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
231         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
232
233         #if CONFIG_40MHZ_XTAL_SUPPORT
234                 // DIV_INT = 20 (40 MHz * 20/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
235                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 2)
236         #else
237                 // DIV_INT = 32 (25 MHz * 32/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
238                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 2)
239         #endif
240
241         // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
242         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
243
244         #define CFG_HZ_FALLBACK (200000000LU/2)
245
246 #elif (CFG_PLL_FREQ == CFG_PLL_225_225_112)
247
248         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
249         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
250
251         #if CONFIG_40MHZ_XTAL_SUPPORT
252                 #define FREQUENCY_NOT_SUPPORTED
253         #else
254                 // DIV_INT = 36 (25 MHz * 36/4 = 225 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
255                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 2)
256         #endif
257
258         // CLOCK_DIVIDER = 1 (SPI clock = 112 / 4 ~ 28 MHz)
259         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
260
261         #define CFG_HZ_FALLBACK (225000000LU/2)
262
263 #elif (CFG_PLL_FREQ == CFG_PLL_225_225_225)
264
265         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
266         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
267
268         #if CONFIG_40MHZ_XTAL_SUPPORT
269                 #define FREQUENCY_NOT_SUPPORTED
270         #else
271                 // DIV_INT = 36 (25 MHz * 36/4 = 225 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
272                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 2)
273         #endif
274
275         // CLOCK_DIVIDER = 3 (SPI clock = 225 / 8 ~ 28 MHz)
276         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
277
278         #define CFG_HZ_FALLBACK (225000000LU/2)
279
280 #elif (CFG_PLL_FREQ == CFG_PLL_250_250_125)
281
282         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
283         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
284
285         #if CONFIG_40MHZ_XTAL_SUPPORT
286                 // DIV_INT = 25 (40 MHz * 25/4 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
287                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 2)
288         #else
289                 // DIV_INT = 20 (25 MHz * 20/2 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
290                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
291         #endif
292
293         // CLOCK_DIVIDER = 1 (SPI clock = 125 / 4 ~ 31 MHz)
294         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
295
296         #define CFG_HZ_FALLBACK (250000000LU/2)
297
298 #elif (CFG_PLL_FREQ == CFG_PLL_250_250_250)
299
300         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
301         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
302
303         #if CONFIG_40MHZ_XTAL_SUPPORT
304                 // DIV_INT = 25 (40 MHz * 25/4 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
305                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 2)
306         #else
307                 // DIV_INT = 20 (25 MHz * 20/2 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
308                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
309         #endif
310
311         // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
312         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
313
314         #define CFG_HZ_FALLBACK (250000000LU/2)
315
316 #elif (CFG_PLL_FREQ == CFG_PLL_300_300_150)
317
318         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
319         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
320
321         #if CONFIG_40MHZ_XTAL_SUPPORT
322                 // DIV_INT = 15 (40 MHz * 15/2 = 300 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
323                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(15, 1, 0, 1)
324         #else
325                 // DIV_INT = 24 (25 MHz * 24/2 = 300 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
326                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(24, 1, 0, 1)
327         #endif
328
329         // CLOCK_DIVIDER = 2 (SPI clock = 150 / 6 ~ 25 MHz)
330         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
331
332         #define CFG_HZ_FALLBACK (300000000LU/2)
333
334 #elif (CFG_PLL_FREQ == CFG_PLL_325_325_162)
335
336         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
337         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
338
339         #if CONFIG_40MHZ_XTAL_SUPPORT
340                 #define FREQUENCY_NOT_SUPPORTED
341         #else
342                 // DIV_INT = 26 (25 MHz * 26/2 = 325 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
343                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(26, 1, 0, 1)
344         #endif
345
346         // CLOCK_DIVIDER = 2 (SPI clock = 162 / 6 ~ 27 MHz)
347         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
348
349         #define CFG_HZ_FALLBACK (325000000LU/2)
350
351 #elif (CFG_PLL_FREQ == CFG_PLL_350_350_175)
352
353         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
354         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
355
356         #if CONFIG_40MHZ_XTAL_SUPPORT
357                 #define FREQUENCY_NOT_SUPPORTED
358         #else
359                 // DIV_INT = 28 (25 MHz * 28/2 = 350 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
360                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(28, 1, 0, 1)
361         #endif
362
363         // CLOCK_DIVIDER = 2 (SPI clock = 175 / 6 ~ 29 MHz)
364         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
365
366         #define CFG_HZ_FALLBACK (350000000LU/2)
367
368 #elif (CFG_PLL_FREQ == CFG_PLL_360_360_180)
369
370         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
371         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
372
373         #if CONFIG_40MHZ_XTAL_SUPPORT
374                 // DIV_INT = 18 (40 MHz * 18/2 = 360 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
375                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(18, 1, 0, 1)
376         #else
377                 // DIV_INT = 29 (25 MHz * 28/2 = 362 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
378                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(29, 1, 0, 1)
379         #endif
380
381         // CLOCK_DIVIDER = 2 (SPI clock = 180 / 6 ~ 30 MHz)
382         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
383
384         #define CFG_HZ_FALLBACK (360000000LU/2)
385
386 #elif (CFG_PLL_FREQ == CFG_PLL_380_380_190)
387
388         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
389         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
390
391         #if CONFIG_40MHZ_XTAL_SUPPORT
392                 // DIV_INT = 19 (40 MHz * 19/2 = 380 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
393                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(19, 1, 0, 1)
394         #else
395                 #define FREQUENCY_NOT_SUPPORTED
396         #endif
397
398         // CLOCK_DIVIDER = 2 (SPI clock = 190 / 6 ~ 32 MHz)
399         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
400
401         #define CFG_HZ_FALLBACK (380000000LU/2)
402
403 #elif (CFG_PLL_FREQ == CFG_PLL_400_400_200)
404
405         // default configuration
406         #define CPU_CLK_CONTROL_VAL     CPU_CLK_CONTROL_VAL_DEFAULT
407         #define CPU_PLL_CONFIG_VAL      CPU_PLL_CONFIG_VAL_DEFAULT
408         #define AR7240_SPI_CONTROL      AR7240_SPI_CONTROL_DEFAULT
409
410         #define CFG_HZ_FALLBACK (400000000LU/2)
411
412 #elif (CFG_PLL_FREQ == CFG_PLL_412_412_206)
413
414         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
415         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
416
417         #if CONFIG_40MHZ_XTAL_SUPPORT
418                 #define FREQUENCY_NOT_SUPPORTED
419         #else
420                 // DIV_INT = 33 (25 MHz * 33/2 = 412 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
421                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(33, 1, 0, 1)
422         #endif
423
424         // CLOCK_DIVIDER = 2 (SPI clock = 206 / 6 ~ 34 MHz)
425         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
426
427         #define CFG_HZ_FALLBACK (412000000LU/2)
428
429 #elif (CFG_PLL_FREQ == CFG_PLL_420_420_210)
430
431         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
432         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
433
434         #if CONFIG_40MHZ_XTAL_SUPPORT
435                 // DIV_INT = 21 (40 MHz * 21/2 = 420 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
436                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(21, 1, 0, 1)
437         #else
438                 #define FREQUENCY_NOT_SUPPORTED
439         #endif
440
441         // CLOCK_DIVIDER = 2 (SPI clock = 210 / 6 ~ 35 MHz)
442         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
443
444         #define CFG_HZ_FALLBACK (420000000LU/2)
445
446 #elif (CFG_PLL_FREQ == CFG_PLL_425_425_212)
447
448         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
449         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
450
451         #if CONFIG_40MHZ_XTAL_SUPPORT
452                 #define FREQUENCY_NOT_SUPPORTED
453         #else
454                 // DIV_INT = 34 (25 MHz * 34/2 = 425 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
455                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(34, 1, 0, 1)
456         #endif
457
458         // CLOCK_DIVIDER = 2 (SPI clock = 212 / 6 ~ 35 MHz)
459         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
460
461         #define CFG_HZ_FALLBACK (425000000LU/2)
462
463 #elif (CFG_PLL_FREQ == CFG_PLL_437_437_218)
464
465         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
466         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
467
468         #if CONFIG_40MHZ_XTAL_SUPPORT
469                 #define FREQUENCY_NOT_SUPPORTED
470         #else
471                 // DIV_INT = 35 (25 MHz * 35/2 = 437 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
472                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(35, 1, 0, 1)
473         #endif
474
475         // CLOCK_DIVIDER = 3 (SPI clock = 218 / 8 ~ 27 MHz)
476         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
477
478         #define CFG_HZ_FALLBACK (437000000LU/2)
479
480 #elif (CFG_PLL_FREQ == CFG_PLL_440_440_220)
481
482         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
483         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
484
485         #if CONFIG_40MHZ_XTAL_SUPPORT
486                 // DIV_INT = 22 (40 MHz * 22/2 = 440 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
487                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(22, 1, 0, 1)
488         #else
489                 #define FREQUENCY_NOT_SUPPORTED
490         #endif
491
492         // CLOCK_DIVIDER = 3 (SPI clock = 220 / 8 ~ 27 MHz)
493         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
494
495         #define CFG_HZ_FALLBACK (440000000LU/2)
496
497 #elif (CFG_PLL_FREQ == CFG_PLL_450_450_225)
498
499         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
500         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
501
502         #if CONFIG_40MHZ_XTAL_SUPPORT
503                 #define FREQUENCY_NOT_SUPPORTED
504         #else
505                 // DIV_INT = 36 (25 MHz * 36/2 = 450 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
506                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 1)
507         #endif
508
509         // CLOCK_DIVIDER = 3 (SPI clock = 225 / 8 ~ 28 MHz)
510         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
511
512         #define CFG_HZ_FALLBACK (450000000LU/2)
513
514 #elif (CFG_PLL_FREQ == CFG_PLL_460_460_230)
515
516         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
517         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
518
519         #if CONFIG_40MHZ_XTAL_SUPPORT
520                 // DIV_INT = 23 (40 MHz * 23/2 = 460 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
521                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(23, 1, 0, 1)
522         #else
523                 // DIV_INT = 37 (25 MHz * 36/2 = 462 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
524                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(37, 1, 0, 1)
525         #endif
526
527         // CLOCK_DIVIDER = 3 (SPI clock = 230 / 8 ~ 29 MHz)
528         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
529
530         #define CFG_HZ_FALLBACK (460000000LU/2)
531
532 #elif (CFG_PLL_FREQ == CFG_PLL_475_475_237)
533
534         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
535         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
536
537         #if CONFIG_40MHZ_XTAL_SUPPORT
538                 #define FREQUENCY_NOT_SUPPORTED
539         #else
540                 // DIV_INT = 38 (25 MHz * 38/2 = 475 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
541                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(38, 1, 0, 1)
542         #endif
543
544         // CLOCK_DIVIDER = 3 (SPI clock = 237 / 8 ~ 30 MHz)
545         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
546
547         #define CFG_HZ_FALLBACK (475000000LU/2)
548
549 #elif (CFG_PLL_FREQ == CFG_PLL_480_480_240)
550
551         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
552         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
553
554         #if CONFIG_40MHZ_XTAL_SUPPORT
555                 // DIV_INT = 24 (40 MHz * 24/2 = 480 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
556                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(24, 1, 0, 1)
557         #else
558                 #define FREQUENCY_NOT_SUPPORTED
559         #endif
560
561         // CLOCK_DIVIDER = 3 (SPI clock = 240 / 8 ~ 30 MHz)
562         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
563
564         #define CFG_HZ_FALLBACK (480000000LU/2)
565
566 #elif (CFG_PLL_FREQ == CFG_PLL_487_487_243)
567
568         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
569         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
570
571         #if CONFIG_40MHZ_XTAL_SUPPORT
572                 #define FREQUENCY_NOT_SUPPORTED
573         #else
574                 // DIV_INT = 39 (25 MHz * 39/2 = 487 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
575                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(39, 1, 0, 1)
576         #endif
577
578         // CLOCK_DIVIDER = 3 (SPI clock = 243 / 8 ~ 30 MHz)
579         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
580
581         #define CFG_HZ_FALLBACK (487000000LU/2)
582
583 #elif (CFG_PLL_FREQ == CFG_PLL_500_500_250)
584
585         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
586         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
587
588         #if CONFIG_40MHZ_XTAL_SUPPORT
589                 // DIV_INT = 25 (40 MHz * 25/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
590                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 1)
591         #else
592                 // DIV_INT = 40 (25 MHz * 40/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
593                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(40, 1, 0, 1)
594         #endif
595
596         // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
597         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
598
599         #define CFG_HZ_FALLBACK (500000000LU/2)
600
601 #elif (CFG_PLL_FREQ == CFG_PLL_500_250_250)
602
603         // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 2
604         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 2)
605
606         #if CONFIG_40MHZ_XTAL_SUPPORT
607                 // DIV_INT = 25 (40 MHz * 25/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
608                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 1)
609         #else
610                 // DIV_INT = 40 (25 MHz * 40/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
611                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(40, 1, 0, 1)
612         #endif
613
614         // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
615         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
616
617         #define CFG_HZ_FALLBACK (500000000LU/2)
618
619 #elif (CFG_PLL_FREQ == CFG_PLL_520_520_260)
620
621         // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
622         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
623
624         #if CONFIG_40MHZ_XTAL_SUPPORT
625                 // DIV_INT = 26 (40 MHz * 26/2 = 520 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
626                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(26, 1, 0, 1)
627         #else
628                 #define FREQUENCY_NOT_SUPPORTED
629         #endif
630
631         // CLOCK_DIVIDER = 3 (SPI clock = 260 / 8 ~ 32 MHz)
632         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(8)
633
634         #define CFG_HZ_FALLBACK (520000000LU/2)
635
636 #elif (CFG_PLL_FREQ == CFG_PLL_525_262_131)
637
638         // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
639         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
640
641         #if CONFIG_40MHZ_XTAL_SUPPORT
642                 #define FREQUENCY_NOT_SUPPORTED
643         #else
644                 // DIV_INT = 42 (25 MHz * 42/2 = 525 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
645                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(42, 1, 0, 1)
646         #endif
647
648         // CLOCK_DIVIDER = 1 (SPI clock = 131 / 4 ~ 33 MHz)
649         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
650
651         #define CFG_HZ_FALLBACK (525000000LU/2)
652
653 #elif (CFG_PLL_FREQ == CFG_PLL_560_280_140)
654
655         // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
656         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
657
658         #if CONFIG_40MHZ_XTAL_SUPPORT
659                 // DIV_INT = 28 (40 MHz * 28/2 = 560 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
660                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(28, 1, 0, 1)
661         #else
662                 // DIV_INT = 45 (25 MHz * 45/2 = 562 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
663                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(45, 1, 0, 1)
664         #endif
665
666         // CLOCK_DIVIDER = 1 (SPI clock = 140 / 4 ~ 35 MHz)
667         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
668
669         #define CFG_HZ_FALLBACK (560000000LU/2)
670
671 #elif (CFG_PLL_FREQ == CFG_PLL_580_290_145)
672
673         // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
674         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
675
676         #if CONFIG_40MHZ_XTAL_SUPPORT
677                 // DIV_INT = 29 (40 MHz * 29/2 = 580 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
678                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(29, 1, 0, 1)
679         #else
680                 #define FREQUENCY_NOT_SUPPORTED
681         #endif
682
683         // CLOCK_DIVIDER = 1 (SPI clock = 145 / 4 ~ 36 MHz)
684         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(4)
685
686         #define CFG_HZ_FALLBACK (580000000LU/2)
687
688 #elif (CFG_PLL_FREQ == CFG_PLL_600_300_200)
689
690         // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 3
691         #define CPU_CLK_CONTROL_VAL             MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 3)
692
693         #if CONFIG_40MHZ_XTAL_SUPPORT
694                 // DIV_INT = 30 (40 MHz * 30/2 = 600 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
695                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(30, 1, 0, 1)
696         #else
697                 // DIV_INT = 48 (25 MHz * 48/2 = 600 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
698                 #define CPU_PLL_CONFIG_VAL      MAKE_AR9331_CPU_PLL_CONFIG_VAL(48, 1, 0, 1)
699         #endif
700
701         // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
702         #define AR7240_SPI_CONTROL      MAKE_AR9331_SPI_CONTROL_VAL(6)
703
704         #define CFG_HZ_FALLBACK (600000000LU/2)
705
706 #elif defined(CFG_PLL_FREQ)
707         #error Unknown frequency setting!
708 #endif
709
710 /*
711  * Check if clocks configuration is valid
712  */
713 #ifdef FREQUENCY_NOT_SUPPORTED
714         #error Selected frequency setting is not supported with your reference clock!
715 #endif
716
717 /*
718  * Cache lock for stack
719  */
720 #define CFG_INIT_SP_OFFSET              0x1000
721
722 /*
723  * Address and size of Primary Environment Sector
724  */
725 #if defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
726         #define CFG_ENV_IS_IN_FLASH     1
727         #undef CFG_ENV_IS_NOWHERE
728 #else
729         #undef  CFG_ENV_IS_IN_FLASH
730         #define CFG_ENV_IS_NOWHERE      1
731 #endif
732
733 #define CFG_ENV_ADDR                    0x9F040000
734 #define CFG_ENV_SIZE                    0x10000
735
736 /*
737  * Available commands
738  */
739 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
740         #define CONFIG_COMMANDS (CFG_CMD_MEMORY | CFG_CMD_DHCP | CFG_CMD_PING | CFG_CMD_FLASH | CFG_CMD_NET | CFG_CMD_RUN | CFG_CMD_DATE | CFG_CMD_IMI | CFG_CMD_SNTP )
741 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
742         #define CONFIG_COMMANDS (CFG_CMD_MEMORY | CFG_CMD_DHCP | CFG_CMD_PING | CFG_CMD_ENV | CFG_CMD_FLASH | CFG_CMD_NET | CFG_CMD_RUN | CFG_CMD_DATE | CFG_CMD_IMI | CFG_CMD_SNTP)
743 #else
744         #define CONFIG_COMMANDS (CFG_CMD_MEMORY | CFG_CMD_DHCP | CFG_CMD_PING | CFG_CMD_FLASH | CFG_CMD_NET | CFG_CMD_RUN | CFG_CMD_DATE | CFG_CMD_SNTP )
745 #endif
746
747 // Enable NetConsole and custom NetConsole port
748 #define CONFIG_NETCONSOLE
749 #define CONFIG_NETCONSOLE_PORT  6666
750
751 /* DDR init values */
752 #if CONFIG_40MHZ_XTAL_SUPPORT
753         #define CFG_DDR_REFRESH_VAL     0x4270
754 #else
755         #define CFG_DDR_REFRESH_VAL     0x4186
756 #endif
757
758 #define CFG_DDR_CONFIG_VAL              0x7fbc8cd0
759 #define CFG_DDR_MODE_VAL_INIT   0x133
760
761 #ifdef LOW_DRIVE_STRENGTH
762         #define CFG_DDR_EXT_MODE_VAL    0x2
763 #else
764         #define CFG_DDR_EXT_MODE_VAL    0x0
765 #endif
766
767 #define CFG_DDR_MODE_VAL        0x33
768 #define CFG_DDR_TRTW_VAL        0x1f
769 #define CFG_DDR_TWTR_VAL        0x1e
770
771 //#define CFG_DDR_CONFIG2_VAL                   0x99d0e6a8      // HORNET 1.0
772 #define CFG_DDR_CONFIG2_VAL                             0x9dd0e6a8      // HORNET 1.1
773 #define CFG_DDR_RD_DATA_THIS_CYCLE_VAL  0x00ff
774 #define CFG_DDR_TAP0_VAL                                0x8
775 #define CFG_DDR_TAP1_VAL                                0x9
776
777 /* DDR2 Init values */
778 #define CFG_DDR2_EXT_MODE_VAL                   0x402
779
780 #define CONFIG_NET_MULTI
781
782 /* choose eth1 first for tftpboot interface added by ZJin, 110328 */
783 #define CONFIG_AG7240_SPEPHY
784
785 /*
786  * Web Failsafe configuration
787  */
788 #define WEBFAILSAFE_UPLOAD_RAM_ADDRESS                                  CONFIG_LOADADDR
789
790 // U-Boot partition size and offset
791 #define WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS                                CFG_FLASH_BASE
792
793 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
794         #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES          (64 * 1024)
795 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
796         #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES          (256 * 1024)
797 #else
798         #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES          (64 * 1024)
799 #endif
800
801 // Firmware partition offset
802 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
803         #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS                       WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x80000
804 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
805         #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS                       WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x50000
806 #else
807         #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS                       WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x20000
808 #endif
809
810 // ART partition size and offset
811 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
812         #define WEBFAILSAFE_UPLOAD_ART_ADDRESS                          WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x10000
813 #endif
814
815 #define WEBFAILSAFE_UPLOAD_ART_SIZE_IN_BYTES                    (64 * 1024)
816
817 // max. firmware size <= (FLASH_SIZE -  WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES)
818 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
819         // D-Link DIR-505: 64k(U-Boot),64k(ART),64k(MAC),64k(NVRAM),256k(Language)
820         #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES        (512 * 1024)
821 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
822         // Carambola 2: 256k(U-Boot),64k(U-Boot env),64k(ART)
823         #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES        (384 * 1024)
824 #else
825         // TP-Link: 64k(U-Boot),64k(MAC/model/WPS pin block),64k(ART)
826         #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES        (192 * 1024)
827 #endif
828
829 // progress state info
830 #define WEBFAILSAFE_PROGRESS_START                              0
831 #define WEBFAILSAFE_PROGRESS_TIMEOUT                    1
832 #define WEBFAILSAFE_PROGRESS_UPLOAD_READY               2
833 #define WEBFAILSAFE_PROGRESS_UPGRADE_READY              3
834 #define WEBFAILSAFE_PROGRESS_UPGRADE_FAILED             4
835
836 // update type
837 #define WEBFAILSAFE_UPGRADE_TYPE_FIRMWARE               0
838 #define WEBFAILSAFE_UPGRADE_TYPE_UBOOT                  1
839 #define WEBFAILSAFE_UPGRADE_TYPE_ART                    2
840
841 /*-----------------------------------------------------------------------*/
842
843 #define CFG_ATHRS26_PHY                         1
844 #define CFG_AG7240_NMACS                        2
845 #define CFG_MII0_RMII                           1
846 #define CFG_BOOTM_LEN                           (16 << 20) /* 16 MB */
847
848 #undef DEBUG
849 #define milisecdelay(_x)                        udelay((_x) * 1000)
850
851 /* MAC address, model and PIN number offsets in FLASH */
852 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
853         // DIR-505 has two MAC addresses inside dedicated MAC partition
854         // They are stored in plain text... TODO: read/write MAC stored as plain text
855         //#define OFFSET_MAC_DATA_BLOCK                 0x020000
856         //#define OFFSET_MAC_DATA_BLOCK_LENGTH  0x010000
857         //#define OFFSET_MAC_ADDRESS                            0x000004
858         //#define OFFSET_MAC_ADDRESS2                           0x000016
859 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
860         #define OFFSET_MAC_DATA_BLOCK                   0xFF0000
861         #define OFFSET_MAC_DATA_BLOCK_LENGTH    0x010000
862         #define OFFSET_MAC_ADDRESS                              0x000000        // Carambola 2 has two MAC addresses at the beginning of ART partition
863         #define OFFSET_MAC_ADDRESS2                             0x000006
864 #else
865         #define OFFSET_MAC_DATA_BLOCK                   0x010000
866         #define OFFSET_MAC_DATA_BLOCK_LENGTH    0x010000
867         #define OFFSET_MAC_ADDRESS                              0x00FC00
868 #endif
869
870 #if !defined(CONFIG_FOR_8DEVICES_CARAMBOLA2) && \
871         !defined(CONFIG_FOR_DLINK_DIR505_A1)
872 #define OFFSET_ROUTER_MODEL                                     0x00FD00
873 #endif
874
875 #if defined(CONFIG_FOR_TPLINK_MR3020_V1) || \
876         defined(CONFIG_FOR_TPLINK_WR740N_V4) || \
877         defined(CONFIG_FOR_TPLINK_MR3220_V2) || \
878         defined(CONFIG_FOR_TPLINK_WR710N_V1)
879         #define OFFSET_PIN_NUMBER                               0x00FE00
880 #endif
881
882 /*
883  * PLL and clocks configurations from FLASH
884  *
885  * We need space for 4x 32-bit variables:
886  * - PLL_MAGIC_VARIABLE
887  * - values of registers:
888  *   - CPU_PLL_CONFIG (page 70 in datasheet)
889  *   - CLOCK_CONTROL  (page 71)
890  *   - SPI_CONTROL    (page 261)
891  */
892 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
893         /*
894          * We will store PLL and CLOCK registers
895          * configuration at the end of MAC data
896          * partition (3rd 64 KiB block)
897          */
898         #define PLL_IN_FLASH_MAGIC                              0x504C4C73
899         #define PLL_IN_FLASH_DATA_BLOCK_OFFSET  0x00020000
900         #define PLL_IN_FLASH_DATA_BLOCK_LENGTH  0x00010000
901         #define PLL_IN_FLASH_MAGIC_OFFSET               0x0000FFF0      // last 16 bytes
902 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
903         /*
904          * We will store PLL and CLOCK registers
905          * configuration at the end of U-Boot
906          * image (4th 64 KiB block)
907          * It implies that binary image can't
908          * be bigger than 192 KiB!
909          *
910          * TODO: fix me
911          */
912         #define PLL_IN_FLASH_MAGIC                              0x504C4C73
913         #define PLL_IN_FLASH_DATA_BLOCK_OFFSET  0x00030000
914         #define PLL_IN_FLASH_DATA_BLOCK_LENGTH  0x00010000
915         #define PLL_IN_FLASH_MAGIC_OFFSET               0x0000FFF0      // last 16 bytes
916 #else
917         /*
918          * All TP-Link routers have a lot of unused space
919          * in FLASH, in second 64 KiB block.
920          * We will store there PLL and CLOCK
921          * registers configuration.
922          */
923         #define PLL_IN_FLASH_MAGIC                              0x504C4C73
924         #define PLL_IN_FLASH_DATA_BLOCK_OFFSET  0x00010000
925         #define PLL_IN_FLASH_DATA_BLOCK_LENGTH  0x00010000
926         #define PLL_IN_FLASH_MAGIC_OFFSET               0x0000FFF0      // last 16 bytes
927 #endif
928
929 #include <cmd_confdefs.h>
930
931 #endif  /* __CONFIG_H */