2 * This file contains the configuration parameters for the AP121 (AR9331) board.
8 #include <configs/ar7240.h>
12 * FLASH and environment organization
14 #define CFG_MAX_FLASH_BANKS 1
15 #define CFG_MAX_FLASH_SECT 4096 // 4 KB sectors in 16 MB flash
18 * We boot from this flash
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
27 * The following #defines are needed to get flash environment right
29 #define CFG_MONITOR_BASE TEXT_BASE
30 #define CFG_MONITOR_LEN (192 << 10)
35 #undef CONFIG_BOOTARGS
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 defined(CONFIG_FOR_GL_INET)
47 #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)"
49 #elif defined(CONFIG_FOR_TPLINK_WR710N_V1)
51 #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)"
53 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
55 #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)"
57 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
59 #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)"
61 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
63 #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)"
65 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
66 defined(CONFIG_FOR_MESH_POTATO_V2)
68 #define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:192k(u-boot),64k(u-boot-env),16064k(firmware),64k(ART)"
73 * Other env default values
75 #undef CONFIG_BOOTFILE
76 #define CONFIG_BOOTFILE "firmware.bin"
78 #undef CONFIG_LOADADDR
79 #define CONFIG_LOADADDR 0x80800000
81 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
82 #define CFG_LOAD_ADDR 0x9F080000
83 #define UPDATE_SCRIPT_FW_ADDR "0x9F080000"
84 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
85 #define CFG_LOAD_ADDR 0x9F050000
86 #define UPDATE_SCRIPT_FW_ADDR "0x9F050000"
87 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
88 defined(CONFIG_FOR_MESH_POTATO_V2)
89 #define CFG_LOAD_ADDR 0x9F040000
90 #define UPDATE_SCRIPT_FW_ADDR "0x9F040000"
92 #define CFG_LOAD_ADDR 0x9F020000
93 #define UPDATE_SCRIPT_FW_ADDR "0x9F020000"
96 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
97 #define CONFIG_BOOTCOMMAND "bootm 0x9F080000"
98 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
99 #define CONFIG_BOOTCOMMAND "bootm 0x9F050000"
100 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
101 defined(CONFIG_FOR_MESH_POTATO_V2)
102 #define CONFIG_BOOTCOMMAND "bootm 0x9F040000"
104 #define CONFIG_BOOTCOMMAND "bootm 0x9F020000"
108 * Dragino 2 uses different IP addresses
110 #if defined(CONFIG_FOR_DRAGINO_V2)
111 #define CONFIG_IPADDR 192.168.255.1
112 #define CONFIG_SERVERIP 192.168.255.2
114 #define CONFIG_IPADDR 192.168.1.1
115 #define CONFIG_SERVERIP 192.168.1.2
119 * Dragino 2 uses different prompt
121 #if defined(CONFIG_FOR_DRAGINO_V2) || \
122 defined(CONFIG_FOR_MESH_POTATO_V2)
123 #if defined(CFG_PROMPT)
126 #define CFG_PROMPT "dr_boot> "
130 #define CFG_HZ bd->bi_cfg_hz
131 #undef CPU_PLL_CONFIG_VAL
132 #undef CPU_CLK_CONTROL_VAL
134 // CPU-RAM-AHB frequency setting
136 #define CFG_PLL_FREQ CFG_PLL_400_400_200
140 * CPU_PLL_DITHER_FRAC_VAL
142 * Value written into CPU PLL Dither FRAC Register (PLL_DITHER_FRAC)
144 * bits 0..9 NFRAC_MAX => 1000 (0x3E8)
145 * bits 10..13 NFRAC_MIN => 0 (minimum value is used)
146 * bits 20..29 NFRAC_STEP => 1
149 #define CPU_PLL_DITHER_FRAC_VAL 0x001003E8
152 * CPU_PLL_SETTLE_TIME_VAL
154 * Value written into CPU Phase Lock Loop Configuration Register 2 (CPU_PLL_CONFIG2)
156 * bits 0..11 SETTLE_TIME => 850 (0x352)
159 #if CONFIG_40MHZ_XTAL_SUPPORT
160 #define CPU_PLL_SETTLE_TIME_VAL 0x00000550
162 #define CPU_PLL_SETTLE_TIME_VAL 0x00000352
166 * CPU_CLK_CONTROL_VAL
168 * In CPU_CLK_CONTROL_VAL bit 2 is set (BYPASS = 1 -> bypass PLL)
169 * After PLL configuration we nedd to clear this bit
171 * Values written into CPU Clock Control Register CLOCK_CONTROL
173 * 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)
174 * bits 5..6 (2bit) CPU_POST_DIV => 0 (DEFAULT, Ratio = 1)
175 * bits 10..11 (2bit) DDR_POST_DIV => 0 (DEFAULT, Ratio = 1)
176 * bits 15..16 (2bit) AHB_POST_DIV => 1 (DEFAULT, Ratio = 2)
183 * In CPU_PLL_CONFIG_VAL bit 30 is set (CPU_PLLPWD = 1 -> power down control for CPU PLL)
184 * After PLL configuration we need to clear this bit
186 * Values written into CPU Phase Lock Loop Configuration (CPU_PLL_CONFIG)
188 * bits 10..15 (6bit) DIV_INT (The integer part of the DIV to CPU PLL) => 32 (0x20)
189 * bits 16..20 (5bit) REFDIV (Reference clock divider) => 1 (0x1) [doesn't start at values different than 1 (maybe need to change other dividers?)]
190 * bits 21 (1bit) RANGE (Determine the VCO frequency range of the CPU PLL) => 0 (0x0) [doesn't have impact on clock values]
191 * bits 23..25 (3bit) OUTDIV (Define the ratio between VCO output and PLL output => 1 (0x1) [value == 0 is illegal!]
192 * VCOOUT * (1/2^OUTDIV) = PLLOUT)
196 * = PLL CALCULATION =============
197 * PLL = ((25 MHz / REFDIV) * DIV_INT) / (2 ^ OUTDIV) // XTAL=25 MHz
199 * PLL = ((40 MHz / REFDIV) * DIV_INT) / (2 ^ OUTDIV) // XTAL=40 MHz
201 * CPU = PLL / CPU_POST_DIV
202 * DDR = PLL / DDR_POST_DIV
203 * AHB = PLL / AHB_POST_DIV
210 * Value written into SPI Control (SPI_CONTROL) register
212 * bits 0..5 (6bit) CLOCK_DIVIDER (Specifies the clock divider setting. Actual clock frequency would be (AHB_CLK / ((CLOCK_DIVIDER+1)*2)) )
213 * 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.)
218 * CPU_PLL_CONFIG and CPU_CLK_CONTROL registers values generator
220 #define MAKE_AR9331_CPU_PLL_CONFIG_VAL(divint, refdiv, range, outdiv) ( ((0x3F & divint) << 10) | \
221 ((0x1F & refdiv) << 16) | \
222 ((0x1 & range) << 21) | \
223 ((0x7 & outdiv) << 23) )
225 #define MAKE_AR9331_CPU_CLK_CONTROL_VAL(cpudiv, ddrdiv, ahbdiv) ( ((0x3 & (cpudiv - 1)) << 5) | \
226 ((0x3 & (ddrdiv - 1)) << 10) | \
227 ((0x3 & (ahbdiv - 1)) << 15) )
229 #define MAKE_AR9331_SPI_CONTROL_VAL(spidiv) ( ((spidiv >> 1) - 1) | 0x40 )
232 * Default values (400/400/200 MHz) for O/C recovery mode
235 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
236 #define CPU_CLK_CONTROL_VAL_DEFAULT MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
238 #if CONFIG_40MHZ_XTAL_SUPPORT
239 // DIV_INT = 20 (40 MHz * 20/2 = 400 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
240 #define CPU_PLL_CONFIG_VAL_DEFAULT MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
242 // DIV_INT = 32 (25 MHz * 32/2 = 400 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
243 #define CPU_PLL_CONFIG_VAL_DEFAULT MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 1)
246 // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
247 #define AR7240_SPI_CONTROL_DEFAULT MAKE_AR9331_SPI_CONTROL_VAL(6)
249 #if (CFG_PLL_FREQ == CFG_PLL_200_200_100)
251 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
252 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
254 #if CONFIG_40MHZ_XTAL_SUPPORT
255 // DIV_INT = 20 (40 MHz * 20/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
256 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 2)
258 // DIV_INT = 32 (25 MHz * 32/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
259 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 2)
262 // CLOCK_DIVIDER = 1 (SPI clock = 100 / 4 ~ 25 MHz)
263 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
265 #define CFG_HZ_FALLBACK (200000000LU/2)
267 #elif (CFG_PLL_FREQ == CFG_PLL_200_200_200)
269 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
270 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
272 #if CONFIG_40MHZ_XTAL_SUPPORT
273 // DIV_INT = 20 (40 MHz * 20/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
274 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 2)
276 // DIV_INT = 32 (25 MHz * 32/4 = 200 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
277 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(32, 1, 0, 2)
280 // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
281 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
283 #define CFG_HZ_FALLBACK (200000000LU/2)
285 #elif (CFG_PLL_FREQ == CFG_PLL_225_225_112)
287 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
288 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
290 #if CONFIG_40MHZ_XTAL_SUPPORT
291 #define FREQUENCY_NOT_SUPPORTED
293 // DIV_INT = 36 (25 MHz * 36/4 = 225 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
294 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 2)
297 // CLOCK_DIVIDER = 1 (SPI clock = 112 / 4 ~ 28 MHz)
298 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
300 #define CFG_HZ_FALLBACK (225000000LU/2)
302 #elif (CFG_PLL_FREQ == CFG_PLL_225_225_225)
304 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
305 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
307 #if CONFIG_40MHZ_XTAL_SUPPORT
308 #define FREQUENCY_NOT_SUPPORTED
310 // DIV_INT = 36 (25 MHz * 36/4 = 225 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
311 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 2)
314 // CLOCK_DIVIDER = 3 (SPI clock = 225 / 8 ~ 28 MHz)
315 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
317 #define CFG_HZ_FALLBACK (225000000LU/2)
319 #elif (CFG_PLL_FREQ == CFG_PLL_250_250_125)
321 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
322 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
324 #if CONFIG_40MHZ_XTAL_SUPPORT
325 // DIV_INT = 25 (40 MHz * 25/4 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
326 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 2)
328 // DIV_INT = 20 (25 MHz * 20/2 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
329 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
332 // CLOCK_DIVIDER = 1 (SPI clock = 125 / 4 ~ 31 MHz)
333 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
335 #define CFG_HZ_FALLBACK (250000000LU/2)
337 #elif (CFG_PLL_FREQ == CFG_PLL_250_250_250)
339 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 1
340 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 1)
342 #if CONFIG_40MHZ_XTAL_SUPPORT
343 // DIV_INT = 25 (40 MHz * 25/4 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 2
344 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 2)
346 // DIV_INT = 20 (25 MHz * 20/2 = 250 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
347 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(20, 1, 0, 1)
350 // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
351 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
353 #define CFG_HZ_FALLBACK (250000000LU/2)
355 #elif (CFG_PLL_FREQ == CFG_PLL_300_300_150)
357 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
358 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
360 #if CONFIG_40MHZ_XTAL_SUPPORT
361 // DIV_INT = 15 (40 MHz * 15/2 = 300 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
362 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(15, 1, 0, 1)
364 // DIV_INT = 24 (25 MHz * 24/2 = 300 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
365 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(24, 1, 0, 1)
368 // CLOCK_DIVIDER = 2 (SPI clock = 150 / 6 ~ 25 MHz)
369 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
371 #define CFG_HZ_FALLBACK (300000000LU/2)
373 #elif (CFG_PLL_FREQ == CFG_PLL_325_325_162)
375 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
376 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
378 #if CONFIG_40MHZ_XTAL_SUPPORT
379 #define FREQUENCY_NOT_SUPPORTED
381 // DIV_INT = 26 (25 MHz * 26/2 = 325 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
382 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(26, 1, 0, 1)
385 // CLOCK_DIVIDER = 2 (SPI clock = 162 / 6 ~ 27 MHz)
386 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
388 #define CFG_HZ_FALLBACK (325000000LU/2)
390 #elif (CFG_PLL_FREQ == CFG_PLL_350_350_175)
392 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
393 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
395 #if CONFIG_40MHZ_XTAL_SUPPORT
396 #define FREQUENCY_NOT_SUPPORTED
398 // DIV_INT = 28 (25 MHz * 28/2 = 350 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
399 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(28, 1, 0, 1)
402 // CLOCK_DIVIDER = 2 (SPI clock = 175 / 6 ~ 29 MHz)
403 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
405 #define CFG_HZ_FALLBACK (350000000LU/2)
407 #elif (CFG_PLL_FREQ == CFG_PLL_360_360_180)
409 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
410 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
412 #if CONFIG_40MHZ_XTAL_SUPPORT
413 // DIV_INT = 18 (40 MHz * 18/2 = 360 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
414 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(18, 1, 0, 1)
416 // DIV_INT = 29 (25 MHz * 28/2 = 362 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
417 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(29, 1, 0, 1)
420 // CLOCK_DIVIDER = 2 (SPI clock = 180 / 6 ~ 30 MHz)
421 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
423 #define CFG_HZ_FALLBACK (360000000LU/2)
425 #elif (CFG_PLL_FREQ == CFG_PLL_380_380_190)
427 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
428 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
430 #if CONFIG_40MHZ_XTAL_SUPPORT
431 // DIV_INT = 19 (40 MHz * 19/2 = 380 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
432 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(19, 1, 0, 1)
434 #define FREQUENCY_NOT_SUPPORTED
437 // CLOCK_DIVIDER = 2 (SPI clock = 190 / 6 ~ 32 MHz)
438 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
440 #define CFG_HZ_FALLBACK (380000000LU/2)
442 #elif (CFG_PLL_FREQ == CFG_PLL_400_400_200)
444 // default configuration
445 #define CPU_CLK_CONTROL_VAL CPU_CLK_CONTROL_VAL_DEFAULT
446 #define CPU_PLL_CONFIG_VAL CPU_PLL_CONFIG_VAL_DEFAULT
447 #define AR7240_SPI_CONTROL AR7240_SPI_CONTROL_DEFAULT
449 #define CFG_HZ_FALLBACK (400000000LU/2)
451 #elif (CFG_PLL_FREQ == CFG_PLL_412_412_206)
453 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
454 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
456 #if CONFIG_40MHZ_XTAL_SUPPORT
457 #define FREQUENCY_NOT_SUPPORTED
459 // DIV_INT = 33 (25 MHz * 33/2 = 412 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
460 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(33, 1, 0, 1)
463 // CLOCK_DIVIDER = 2 (SPI clock = 206 / 6 ~ 34 MHz)
464 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
466 #define CFG_HZ_FALLBACK (412000000LU/2)
468 #elif (CFG_PLL_FREQ == CFG_PLL_420_420_210)
470 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
471 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
473 #if CONFIG_40MHZ_XTAL_SUPPORT
474 // DIV_INT = 21 (40 MHz * 21/2 = 420 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
475 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(21, 1, 0, 1)
477 #define FREQUENCY_NOT_SUPPORTED
480 // CLOCK_DIVIDER = 2 (SPI clock = 210 / 6 ~ 35 MHz)
481 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
483 #define CFG_HZ_FALLBACK (420000000LU/2)
485 #elif (CFG_PLL_FREQ == CFG_PLL_425_425_212)
487 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
488 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
490 #if CONFIG_40MHZ_XTAL_SUPPORT
491 #define FREQUENCY_NOT_SUPPORTED
493 // DIV_INT = 34 (25 MHz * 34/2 = 425 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
494 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(34, 1, 0, 1)
497 // CLOCK_DIVIDER = 2 (SPI clock = 212 / 6 ~ 35 MHz)
498 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
500 #define CFG_HZ_FALLBACK (425000000LU/2)
502 #elif (CFG_PLL_FREQ == CFG_PLL_437_437_218)
504 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
505 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
507 #if CONFIG_40MHZ_XTAL_SUPPORT
508 #define FREQUENCY_NOT_SUPPORTED
510 // DIV_INT = 35 (25 MHz * 35/2 = 437 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
511 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(35, 1, 0, 1)
514 // CLOCK_DIVIDER = 3 (SPI clock = 218 / 8 ~ 27 MHz)
515 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
517 #define CFG_HZ_FALLBACK (437000000LU/2)
519 #elif (CFG_PLL_FREQ == CFG_PLL_440_440_220)
521 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
522 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
524 #if CONFIG_40MHZ_XTAL_SUPPORT
525 // DIV_INT = 22 (40 MHz * 22/2 = 440 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
526 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(22, 1, 0, 1)
528 #define FREQUENCY_NOT_SUPPORTED
531 // CLOCK_DIVIDER = 3 (SPI clock = 220 / 8 ~ 27 MHz)
532 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
534 #define CFG_HZ_FALLBACK (440000000LU/2)
536 #elif (CFG_PLL_FREQ == CFG_PLL_450_450_225)
538 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
539 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
541 #if CONFIG_40MHZ_XTAL_SUPPORT
542 #define FREQUENCY_NOT_SUPPORTED
544 // DIV_INT = 36 (25 MHz * 36/2 = 450 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
545 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(36, 1, 0, 1)
548 // CLOCK_DIVIDER = 3 (SPI clock = 225 / 8 ~ 28 MHz)
549 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
551 #define CFG_HZ_FALLBACK (450000000LU/2)
553 #elif (CFG_PLL_FREQ == CFG_PLL_460_460_230)
555 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
556 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
558 #if CONFIG_40MHZ_XTAL_SUPPORT
559 // DIV_INT = 23 (40 MHz * 23/2 = 460 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
560 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(23, 1, 0, 1)
562 // DIV_INT = 37 (25 MHz * 36/2 = 462 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
563 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(37, 1, 0, 1)
566 // CLOCK_DIVIDER = 3 (SPI clock = 230 / 8 ~ 29 MHz)
567 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
569 #define CFG_HZ_FALLBACK (460000000LU/2)
571 #elif (CFG_PLL_FREQ == CFG_PLL_475_475_237)
573 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
574 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
576 #if CONFIG_40MHZ_XTAL_SUPPORT
577 #define FREQUENCY_NOT_SUPPORTED
579 // DIV_INT = 38 (25 MHz * 38/2 = 475 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
580 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(38, 1, 0, 1)
583 // CLOCK_DIVIDER = 3 (SPI clock = 237 / 8 ~ 30 MHz)
584 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
586 #define CFG_HZ_FALLBACK (475000000LU/2)
588 #elif (CFG_PLL_FREQ == CFG_PLL_480_480_240)
590 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
591 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
593 #if CONFIG_40MHZ_XTAL_SUPPORT
594 // DIV_INT = 24 (40 MHz * 24/2 = 480 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
595 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(24, 1, 0, 1)
597 #define FREQUENCY_NOT_SUPPORTED
600 // CLOCK_DIVIDER = 3 (SPI clock = 240 / 8 ~ 30 MHz)
601 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
603 #define CFG_HZ_FALLBACK (480000000LU/2)
605 #elif (CFG_PLL_FREQ == CFG_PLL_487_487_243)
607 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
608 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
610 #if CONFIG_40MHZ_XTAL_SUPPORT
611 #define FREQUENCY_NOT_SUPPORTED
613 // DIV_INT = 39 (25 MHz * 39/2 = 487 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
614 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(39, 1, 0, 1)
617 // CLOCK_DIVIDER = 3 (SPI clock = 243 / 8 ~ 30 MHz)
618 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
620 #define CFG_HZ_FALLBACK (487000000LU/2)
622 #elif (CFG_PLL_FREQ == CFG_PLL_500_500_250)
624 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
625 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
627 #if CONFIG_40MHZ_XTAL_SUPPORT
628 // DIV_INT = 25 (40 MHz * 25/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
629 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 1)
631 // DIV_INT = 40 (25 MHz * 40/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
632 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(40, 1, 0, 1)
635 // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
636 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
638 #define CFG_HZ_FALLBACK (500000000LU/2)
640 #elif (CFG_PLL_FREQ == CFG_PLL_500_250_250)
642 // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 2
643 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 2)
645 #if CONFIG_40MHZ_XTAL_SUPPORT
646 // DIV_INT = 25 (40 MHz * 25/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
647 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(25, 1, 0, 1)
649 // DIV_INT = 40 (25 MHz * 40/2 = 500 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
650 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(40, 1, 0, 1)
653 // CLOCK_DIVIDER = 3 (SPI clock = 250 / 8 ~ 31 MHz)
654 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
656 #define CFG_HZ_FALLBACK (500000000LU/2)
658 #elif (CFG_PLL_FREQ == CFG_PLL_520_520_260)
660 // CPU_DIV = 1, RAM_DIV = 1, AHB_DIV = 2
661 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 1, 2)
663 #if CONFIG_40MHZ_XTAL_SUPPORT
664 // DIV_INT = 26 (40 MHz * 26/2 = 520 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
665 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(26, 1, 0, 1)
667 #define FREQUENCY_NOT_SUPPORTED
670 // CLOCK_DIVIDER = 3 (SPI clock = 260 / 8 ~ 32 MHz)
671 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(8)
673 #define CFG_HZ_FALLBACK (520000000LU/2)
675 #elif (CFG_PLL_FREQ == CFG_PLL_525_262_131)
677 // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
678 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
680 #if CONFIG_40MHZ_XTAL_SUPPORT
681 #define FREQUENCY_NOT_SUPPORTED
683 // DIV_INT = 42 (25 MHz * 42/2 = 525 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
684 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(42, 1, 0, 1)
687 // CLOCK_DIVIDER = 1 (SPI clock = 131 / 4 ~ 33 MHz)
688 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
690 #define CFG_HZ_FALLBACK (525000000LU/2)
692 #elif (CFG_PLL_FREQ == CFG_PLL_560_280_140)
694 // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
695 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
697 #if CONFIG_40MHZ_XTAL_SUPPORT
698 // DIV_INT = 28 (40 MHz * 28/2 = 560 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
699 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(28, 1, 0, 1)
701 // DIV_INT = 45 (25 MHz * 45/2 = 562 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
702 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(45, 1, 0, 1)
705 // CLOCK_DIVIDER = 1 (SPI clock = 140 / 4 ~ 35 MHz)
706 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
708 #define CFG_HZ_FALLBACK (560000000LU/2)
710 #elif (CFG_PLL_FREQ == CFG_PLL_580_290_145)
712 // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 4
713 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 4)
715 #if CONFIG_40MHZ_XTAL_SUPPORT
716 // DIV_INT = 29 (40 MHz * 29/2 = 580 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
717 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(29, 1, 0, 1)
719 #define FREQUENCY_NOT_SUPPORTED
722 // CLOCK_DIVIDER = 1 (SPI clock = 145 / 4 ~ 36 MHz)
723 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(4)
725 #define CFG_HZ_FALLBACK (580000000LU/2)
727 #elif (CFG_PLL_FREQ == CFG_PLL_600_300_200)
729 // CPU_DIV = 1, RAM_DIV = 2, AHB_DIV = 3
730 #define CPU_CLK_CONTROL_VAL MAKE_AR9331_CPU_CLK_CONTROL_VAL(1, 2, 3)
732 #if CONFIG_40MHZ_XTAL_SUPPORT
733 // DIV_INT = 30 (40 MHz * 30/2 = 600 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
734 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(30, 1, 0, 1)
736 // DIV_INT = 48 (25 MHz * 48/2 = 600 MHz), REFDIV = 1, RANGE = 0, OUTDIV = 1
737 #define CPU_PLL_CONFIG_VAL MAKE_AR9331_CPU_PLL_CONFIG_VAL(48, 1, 0, 1)
740 // CLOCK_DIVIDER = 2 (SPI clock = 200 / 6 ~ 33 MHz)
741 #define AR7240_SPI_CONTROL MAKE_AR9331_SPI_CONTROL_VAL(6)
743 #define CFG_HZ_FALLBACK (600000000LU/2)
745 #elif defined(CFG_PLL_FREQ)
746 #error Unknown frequency setting!
750 * Check if clocks configuration is valid
752 #ifdef FREQUENCY_NOT_SUPPORTED
753 #error Selected frequency setting is not supported with your reference clock!
757 * Cache lock for stack
759 #define CFG_INIT_SP_OFFSET 0x1000
762 * Address and size of Primary Environment Sector
764 #if defined(CONFIG_FOR_8DEVICES_CARAMBOLA2) || \
765 defined(CONFIG_FOR_DRAGINO_V2) || \
766 defined(CONFIG_FOR_MESH_POTATO_V2)
767 #define CFG_ENV_IS_IN_FLASH 1
768 #undef CFG_ENV_IS_NOWHERE
770 #undef CFG_ENV_IS_IN_FLASH
771 #define CFG_ENV_IS_NOWHERE 1
774 #if defined(CONFIG_FOR_DRAGINO_V2) || \
775 defined(CONFIG_FOR_MESH_POTATO_V2)
776 #define CFG_ENV_ADDR 0x9F030000
777 #define CFG_ENV_SIZE 0x8000
778 #define CFG_ENV_SECT_SIZE 0x10000
779 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
780 #define CFG_ENV_ADDR 0x9F040000
781 #define CFG_ENV_SIZE 0x8000
782 #define CFG_ENV_SECT_SIZE 0x10000
784 #define CFG_ENV_ADDR 0x9F040000
785 #define CFG_ENV_SIZE 0x10000
791 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
793 #define CONFIG_COMMANDS (CFG_CMD_MEMORY | \
805 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2) || \
806 defined(CONFIG_FOR_DRAGINO_V2) || \
807 defined(CONFIG_FOR_MESH_POTATO_V2)
809 #define CONFIG_COMMANDS (CFG_CMD_MEMORY | \
825 #define CONFIG_COMMANDS (CFG_CMD_MEMORY | \
838 // Enable NetConsole and custom NetConsole port
839 #define CONFIG_NETCONSOLE
840 #define CONFIG_NETCONSOLE_PORT 6666
842 /* DDR init values */
843 #if CONFIG_40MHZ_XTAL_SUPPORT
844 #define CFG_DDR_REFRESH_VAL 0x4270
846 #define CFG_DDR_REFRESH_VAL 0x4186
849 #define CFG_DDR_CONFIG_VAL 0x7fbc8cd0
850 #define CFG_DDR_MODE_VAL_INIT 0x133
852 #ifdef LOW_DRIVE_STRENGTH
853 #define CFG_DDR_EXT_MODE_VAL 0x2
855 #define CFG_DDR_EXT_MODE_VAL 0x0
858 #define CFG_DDR_MODE_VAL 0x33
859 #define CFG_DDR_TRTW_VAL 0x1f
860 #define CFG_DDR_TWTR_VAL 0x1e
862 //#define CFG_DDR_CONFIG2_VAL 0x99d0e6a8 // HORNET 1.0
863 #define CFG_DDR_CONFIG2_VAL 0x9dd0e6a8 // HORNET 1.1
864 #define CFG_DDR_RD_DATA_THIS_CYCLE_VAL 0x00ff
865 #define CFG_DDR_TAP0_VAL 0x8
866 #define CFG_DDR_TAP1_VAL 0x9
868 /* DDR2 Init values */
869 #define CFG_DDR2_EXT_MODE_VAL 0x402
871 #define CONFIG_NET_MULTI
873 /* choose eth1 first for tftpboot interface added by ZJin, 110328 */
874 #define CONFIG_AG7240_SPEPHY
877 * Web Failsafe configuration
879 #define WEBFAILSAFE_UPLOAD_RAM_ADDRESS CONFIG_LOADADDR
881 // U-Boot partition size and offset
882 #define WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS CFG_FLASH_BASE
884 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
885 #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES (64 * 1024)
886 #define UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "0x10000"
887 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
888 #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES (256 * 1024)
889 #define UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "0x40000"
890 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
891 defined(CONFIG_FOR_MESH_POTATO_V2)
892 #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES (192 * 1024)
893 #define UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "0x30000"
895 #define WEBFAILSAFE_UPLOAD_UBOOT_SIZE_IN_BYTES (64 * 1024)
896 #define UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "0x10000"
899 // Firmware partition offset
900 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
901 #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x80000
902 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
903 #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x50000
904 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
905 defined(CONFIG_FOR_MESH_POTATO_V2)
906 #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x40000
908 #define WEBFAILSAFE_UPLOAD_KERNEL_ADDRESS WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x20000
911 // ART partition size and offset
912 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
913 #define WEBFAILSAFE_UPLOAD_ART_ADDRESS WEBFAILSAFE_UPLOAD_UBOOT_ADDRESS + 0x10000
916 #define WEBFAILSAFE_UPLOAD_ART_SIZE_IN_BYTES (64 * 1024)
918 // max. firmware size <= (FLASH_SIZE - WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES)
919 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
920 // D-Link DIR-505: 64k(U-Boot),64k(ART),64k(MAC),64k(NVRAM),256k(Language)
921 #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES (512 * 1024)
922 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
923 // Carambola 2: 256k(U-Boot),64k(U-Boot env),64k(ART)
924 #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES (384 * 1024)
925 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
926 defined(CONFIG_FOR_MESH_POTATO_V2)
927 // Dragino 2: 192k(U-Boot),64k(U-Boot env),64k(ART)
928 #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES (320 * 1024)
929 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
930 // GS-Oolite v1: 128k(U-Boot + MAC),64k(ART)
931 #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES (192 * 1024)
933 // TP-Link: 64k(U-Boot),64k(MAC/model/WPS pin block),64k(ART)
934 #define WEBFAILSAFE_UPLOAD_LIMITED_AREA_IN_BYTES (192 * 1024)
937 // progress state info
938 #define WEBFAILSAFE_PROGRESS_START 0
939 #define WEBFAILSAFE_PROGRESS_TIMEOUT 1
940 #define WEBFAILSAFE_PROGRESS_UPLOAD_READY 2
941 #define WEBFAILSAFE_PROGRESS_UPGRADE_READY 3
942 #define WEBFAILSAFE_PROGRESS_UPGRADE_FAILED 4
945 #define WEBFAILSAFE_UPGRADE_TYPE_FIRMWARE 0
946 #define WEBFAILSAFE_UPGRADE_TYPE_UBOOT 1
947 #define WEBFAILSAFE_UPGRADE_TYPE_ART 2
949 /*-----------------------------------------------------------------------*/
952 * Additional environment variables for simple upgrades
954 #define CONFIG_EXTRA_ENV_SETTINGS "uboot_addr=0x9F000000\0" \
955 "uboot_name=uboot.bin\0" \
956 "uboot_size=" UPDATE_SCRIPT_UBOOT_SIZE_IN_BYTES "\0" \
958 "if ping $serverip; then " \
959 "tftp $loadaddr $uboot_name && " \
960 "if itest.l $filesize == $uboot_size; then " \
961 "erase $uboot_addr +$filesize && " \
962 "cp.b $loadaddr $uboot_addr $filesize && " \
965 "echo ERROR! Wrong file size!; " \
968 "ERROR! Server not reachable!; " \
970 "firmware_addr=" UPDATE_SCRIPT_FW_ADDR "\0" \
971 "firmware_name=firmware.bin\0" \
973 "if ping $serverip; then " \
974 "tftp $loadaddr $firmware_name && " \
975 "erase $firmware_addr +$filesize && " \
976 "cp.b $loadaddr $firmware_addr $filesize && " \
979 "ERROR! Server not reachable!; " \
983 #define CFG_ATHRS26_PHY 1
984 #define CFG_AG7240_NMACS 2
985 #define CFG_MII0_RMII 1
986 #define CFG_BOOTM_LEN (16 << 20) /* 16 MB */
989 #define milisecdelay(_x) udelay((_x) * 1000)
991 /* MAC address, model and PIN number offsets in FLASH */
992 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
993 // DIR-505 has two MAC addresses inside dedicated MAC partition
994 // They are stored in plain text... TODO: read/write MAC stored as plain text
995 //#define OFFSET_MAC_DATA_BLOCK 0x020000
996 //#define OFFSET_MAC_DATA_BLOCK_LENGTH 0x010000
997 //#define OFFSET_MAC_ADDRESS 0x000004
998 //#define OFFSET_MAC_ADDRESS2 0x000016
999 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2) || \
1000 defined(CONFIG_FOR_DRAGINO_V2) || \
1001 defined(CONFIG_FOR_MESH_POTATO_V2)
1002 // Carambola 2 and Dragino 2 have two MAC addresses at the beginning of ART partition
1003 #define OFFSET_MAC_DATA_BLOCK 0xFF0000
1004 #define OFFSET_MAC_DATA_BLOCK_LENGTH 0x010000
1005 #define OFFSET_MAC_ADDRESS 0x000000
1006 #define OFFSET_MAC_ADDRESS2 0x000006
1007 #elif defined(CONFIG_FOR_GS_OOLITE_V1_DEV)
1008 // GS-OOlite has only one MAC, inside second block
1009 // It's some kind of TP-Link clone
1010 #define OFFSET_MAC_DATA_BLOCK 0x010000
1011 #define OFFSET_MAC_DATA_BLOCK_LENGTH 0x010000
1012 #define OFFSET_MAC_ADDRESS 0x00FC00
1014 #define OFFSET_MAC_DATA_BLOCK 0x010000
1015 #define OFFSET_MAC_DATA_BLOCK_LENGTH 0x010000
1016 #define OFFSET_MAC_ADDRESS 0x00FC00
1019 #if !defined(CONFIG_FOR_8DEVICES_CARAMBOLA2) && \
1020 !defined(CONFIG_FOR_DLINK_DIR505_A1) && \
1021 !defined(CONFIG_FOR_GS_OOLITE_V1_DEV) && \
1022 !defined(CONFIG_FOR_DRAGINO_V2) && \
1023 !defined(CONFIG_FOR_MESH_POTATO_V2) && \
1024 !defined(CONFIG_FOR_GL_INET)
1025 #define OFFSET_ROUTER_MODEL 0x00FD00
1028 #if defined(CONFIG_FOR_TPLINK_MR3020_V1) || \
1029 defined(CONFIG_FOR_TPLINK_WR740N_V4) || \
1030 defined(CONFIG_FOR_TPLINK_MR3220_V2) || \
1031 defined(CONFIG_FOR_TPLINK_WR710N_V1)
1032 #define OFFSET_PIN_NUMBER 0x00FE00
1036 * PLL and clocks configurations from FLASH
1038 * We need space for 4x 32-bit variables:
1039 * - PLL_MAGIC_VARIABLE
1040 * - values of registers:
1041 * - CPU_PLL_CONFIG (page 70 in datasheet)
1042 * - CLOCK_CONTROL (page 71)
1043 * - SPI_CONTROL (page 261)
1045 #if defined(CONFIG_FOR_DLINK_DIR505_A1)
1047 * We will store PLL and CLOCK registers
1048 * configuration at the end of MAC data
1049 * partition (3rd 64 KiB block)
1051 #define PLL_IN_FLASH_MAGIC 0x504C4C73
1052 #define PLL_IN_FLASH_DATA_BLOCK_OFFSET 0x00020000
1053 #define PLL_IN_FLASH_DATA_BLOCK_LENGTH 0x00010000
1054 #define PLL_IN_FLASH_MAGIC_OFFSET 0x0000FFF0 // last 16 bytes
1055 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
1057 * We will store PLL and CLOCK registers
1058 * configuration at the end of environment
1059 * sector (64 KB, environment uses only half!)
1061 #define PLL_IN_FLASH_MAGIC 0x504C4C73
1062 #define PLL_IN_FLASH_DATA_BLOCK_OFFSET 0x00040000
1063 #define PLL_IN_FLASH_DATA_BLOCK_LENGTH 0x00010000
1064 #define PLL_IN_FLASH_MAGIC_OFFSET 0x0000FFF0 // last 16 bytes
1065 #elif defined(CONFIG_FOR_DRAGINO_V2) || \
1066 defined(CONFIG_FOR_MESH_POTATO_V2)
1068 * We will store PLL and CLOCK registers
1069 * configuration at the end of environment
1070 * sector (64 KB, environment uses only half!)
1072 #define PLL_IN_FLASH_MAGIC 0x504C4C73
1073 #define PLL_IN_FLASH_DATA_BLOCK_OFFSET 0x00030000
1074 #define PLL_IN_FLASH_DATA_BLOCK_LENGTH 0x00010000
1075 #define PLL_IN_FLASH_MAGIC_OFFSET 0x0000FFF0 // last 16 bytes
1078 * All TP-Link routers have a lot of unused space
1079 * in FLASH, in second 64 KiB block.
1080 * We will store there PLL and CLOCK
1081 * registers configuration.
1083 #define PLL_IN_FLASH_MAGIC 0x504C4C73
1084 #define PLL_IN_FLASH_DATA_BLOCK_OFFSET 0x00010000
1085 #define PLL_IN_FLASH_DATA_BLOCK_LENGTH 0x00010000
1086 #define PLL_IN_FLASH_MAGIC_OFFSET 0x0000FFF0 // last 16 bytes
1089 #include <cmd_confdefs.h>
1091 #endif /* __CONFIG_H */