s3c2440 移值u-boot-2016.03 第2篇 支持Nand flash启动
1, 要求:在4K 的代码以内,完成 NOR NAND 类型判断,初始化 NAND 复制自身到 SDRAM ,重定向。
2, 在 /arch/arm/cpu/arm920t/ 文件夹里 添加一个 inic.c 的文件,要在这个文件里面做上面说的事情。
修改 /arch/arm/cpu/arm920t/Makefile 加入 inic.c 的 编译。
extra-y = start.o
obj-y += init.o
obj-y += cpu.o
init.c 最后有补丁文件
3, 在 start.S 中初始化 SP 后调用 init.c 中的 初始化 NAND FLASH 和 复制 u-boot 到 SDRAM 清BSS 等
ldr sp, =4096 #在 NOR 启动时定在这里是不能写的,sp 中通常是保存 入栈 出栈 , 局部变量等,因为函数中并没有用到,设不设这里都可以。
bl init_sdram
ldr sp, =0x34000000
bl nand_init_ll
/**
* 从 0 地址开始复制 到 SDRAM 中
* 在 smdk2440.h 中定义 #define CONFIG_SYS_TEXT_BASE
* u-boot 的加载地址
*/
mov r0,#0
ldr r1,=CONFIG_SYS_TEXT_BASE
ldr r2,=__bss_start
sub r2, r2, r1
bl copy_code_to_sdram
bl clear_bss #清不清都可以,因为重定向那里还要在清一次,为了以后去掉重定向这里也清。
#从片内 4K 跳到 SDRAM 中 bl 不行,要用 ldr pc
ldr pc,=_main
4, 启用流程
/arch/arm/cpu/arm920t/start.S
/arch/arm/lib/crt0.S
u-boot 第一阶段
/common/Board_f.c 中的 board_init_f() 函数
最后调用
jump_to_copy()
if (gd->flags & GD_FLG_SKIP_RELOC)
return 0;
调用/arch/arm/librelocate.S relocate_code(gd->start_addr_sp, gd->new_gd, gd->relocaddr);
执行完毕后返回
crt0.S
bl board_init_f
下面直接执行第2阶段,也是因为执行了重定位,bl 跳不了
ldr pc, =board_init_r
5, 如何兼容 NOR FLASH NAND FLASH 启用?
不改动 原来的 重定位代码比较简单。
兼容 NOR FLASH NAND FLASH 的方法是,如果不想修改重定位的代码,就是先把 u-boot 复制到
SDRAM 的一个低地址,然后,它会从 这里在复制到 SDRAM 的高地址去。
NAND FLASH 启用要做的就是,在 4K 自动复制的代码里面,实现把u-boot 复制到 SDRAM 的低地址
6, 确定一个可用的链接地址
crt0.S
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
这里先把 sp 定在了最低端,因此不能使用 0x30000000
又因为u-boot 最终会被放到高地址也不能用 0x34000000
因为内存很大,放在10M 的位置吧。
在 smdk2440.h 中定义 #define CONFIG_SYS_TEXT_BASE 0x30a00000
补丁文件:
1 diff -urN u-boot-2016.03/arch/arm/cpu/arm920t/init.c u-boot-2016.03-ok/arch/arm/cpu/arm920t/init.c 2 --- u-boot-2016.03/arch/arm/cpu/arm920t/init.c 1970-01-01 07:00:00.000000000 +0700 3 +++ u-boot-2016.03-ok/arch/arm/cpu/arm920t/init.c 2016-05-17 06:48:31.635438931 +0800 4 @@ -0,0 +1,196 @@ 5 +/* NAND FLASH控制器 */ 6 +#define NFCONF (*((volatile unsigned long *)0x4E000000)) 7 +#define NFCONT (*((volatile unsigned long *)0x4E000004)) 8 +#define NFCMMD (*((volatile unsigned char *)0x4E000008)) 9 +#define NFADDR (*((volatile unsigned char *)0x4E00000C)) 10 +#define NFDATA (*((volatile unsigned char *)0x4E000010)) 11 +#define NFSTAT (*((volatile unsigned char *)0x4E000020)) 12 + 13 +/* CLK */ 14 +#define CLKDIVN (*(volatile unsigned long *)0x4C000014) 15 +#define MPLLCON (*(volatile unsigned long *)0x4C000004) 16 + 17 +/* SDRAM */ 18 +#define BWSCON (*(volatile unsigned long *)0x48000000) 19 +#define BANKCON6 (*(volatile unsigned long *)0x4800001c) 20 +#define REFRESH (*(volatile unsigned long *)0x48000024) 21 +#define BANKSIZE (*(volatile unsigned long *)0x48000028) 22 +#define MRSRB6 (*(volatile unsigned long *)0x4800002c) 23 + 24 +void init_clock(void) 25 +{ 26 + //Mpll = 400M 27 + MPLLCON = (0x5c<<12) | (1<<4) | 1; 28 + //FCLK 400M HCLK 100M PCLK 50M 29 + CLKDIVN = 2<<1 | 1<<0; 30 + __asm__( 31 + "mrc p15,0,r0,c1,c0,0\n" 32 + "orr r0,r0,#0xc0000000\n" 33 + "mcr p15,0,r0,c1,c0,0\n" 34 + ); 35 +} 36 + 37 +void init_sdram(void) 38 +{ 39 + BWSCON = 1<<25; 40 + BANKCON6 = 1<<16 | 1<<15 | 1; 41 + REFRESH = (1<<23) + 1268; 42 + BANKSIZE = 1<<7 | 1<<4 | 1; 43 + MRSRB6 = 0x30; 44 +} 45 + 46 +void clear_bss(void) 47 +{ 48 + extern int __bss_start, __bss_end; 49 + int *p = &__bss_start; 50 + 51 + for (; p < &__bss_end; p++) 52 + { 53 + *p = 0; 54 + } 55 +} 56 + 57 +static void nand_latency(void) 58 +{ 59 + int i=100; 60 + while(i--); 61 +} 62 + 63 +static void nand_is_ready(void) 64 +{ 65 + //bit 0 : 1 不忙了 66 + while(! (NFSTAT & 1)); 67 +} 68 + 69 +static void nand_write_addr(unsigned int addr) 70 +{ 71 + int col, page; 72 + col = addr % 2048; 73 + page = addr / 2048; 74 + 75 + NFADDR = col & 0xff; /* Column Address A0~A7 */ 76 + nand_latency(); 77 + NFADDR = (col >> 8) & 0x0f; /* Column Address A8~A11 */ 78 + nand_latency(); 79 + NFADDR = page & 0xff; /* Row Address A12~A19 */ 80 + nand_latency(); 81 + NFADDR = (page >> 8) & 0xff; /* Row Address A20~A27 */ 82 + nand_latency(); 83 + NFADDR = (page >> 16) & 0x03; /* Row Address A28~A29 */ 84 + nand_latency(); 85 +} 86 + 87 +static unsigned char nand_read_char(void) 88 +{ 89 + //只保留8个bit 90 + return NFDATA & 0xff; 91 +} 92 + 93 +static void nand_cmd(unsigned char cmd) 94 +{ 95 + NFCMMD = cmd; 96 + nand_latency(); 97 +} 98 + 99 +static void nand_select_chip(void) 100 +{ 101 + //1bit : 0 选中 102 + NFCONT &= ~(1<<1); 103 +} 104 + 105 +static void nand_deselect_chip(void) 106 +{ 107 + //1bit : 1 选中 108 + NFCONT |= (1<<1); 109 +} 110 + 111 +static void nand_reset(void) 112 +{ 113 + nand_select_chip(); 114 + nand_cmd(0xff); 115 + nand_deselect_chip(); 116 +} 117 + 118 +void nand_init_ll(void) 119 +{ 120 + //TACLS 3.3v 时 12ns 121 + #define TACLS 0 122 + //12ns 123 + #define TWRPH0 1 124 + //5ns 125 + #define TWRPH1 0 126 + NFCONF = TACLS<<12 | TWRPH0<<8 | TWRPH1<<4; 127 + /* 4 ECC 128 + * 1 CE 先不选中,用的时候在选中 129 + * 0 启动 flash controller 130 + */ 131 + NFCONT = 1<<4 | 1<<1 | 1; 132 + nand_reset(); 133 +} 134 + 135 +static void nand_read(unsigned int addr, unsigned char *buf, int len) 136 +{ 137 + //选中 138 + nand_select_chip(); 139 + //j 地址可能不是从0对齐开始读的 140 + unsigned int i = addr,j = addr % 2048; 141 + for(; i<(addr + len);) 142 + { 143 + //读命令 144 + nand_cmd(0x00); 145 + nand_is_ready(); 146 + 147 + //发送地址 148 + nand_write_addr(i); 149 + nand_is_ready(); 150 + 151 + //在次发出读命令 152 + nand_cmd(0x30); 153 + nand_is_ready(); 154 + //读2K 155 + for(; j<2048; j++) 156 + { 157 + *buf = nand_read_char(); 158 + buf++; 159 + i++; 160 + } 161 + j=0; 162 + nand_latency(); 163 + } 164 + //取消选中 165 + nand_deselect_chip(); 166 +} 167 + 168 +static int boot_is_nor() 169 +{ 170 + //利用 NOR 不能写的特点判断 171 + volatile unsigned int *p = (volatile unsigned int *)0; 172 + unsigned int val; 173 + val = *p; 174 + *p = 0x12345678; 175 + if(0x12345678 == *p) 176 + { 177 + *p = val; 178 + return 0; 179 + } 180 + return 1; 181 +} 182 + 183 +//片内4K 的程序要复制到链接SDRAM中去 184 +void copy_code_to_sdram(unsigned char *src,unsigned char *dst,int len) 185 +{ 186 + int i = 0; 187 + if(boot_is_nor()) 188 + { 189 + while(i < len) 190 + { 191 + dst[i] = src[i]; 192 + i++; 193 + } 194 + } 195 + else 196 + { 197 + nand_read((int)src, dst, len); 198 + } 199 +} 200 + 201 diff -urN u-boot-2016.03/arch/arm/cpu/arm920t/Makefile u-boot-2016.03-ok/arch/arm/cpu/arm920t/Makefile 202 --- u-boot-2016.03/arch/arm/cpu/arm920t/Makefile 2016-03-14 22:20:21.000000000 +0800 203 +++ u-boot-2016.03-ok/arch/arm/cpu/arm920t/Makefile 2016-05-17 06:48:31.767626866 +0800 204 @@ -8,6 +8,7 @@ 205 extra-y = start.o 206 207 obj-y += cpu.o 208 +obj-y += init.o 209 obj-$(CONFIG_USE_IRQ) += interrupts.o 210 211 obj-$(CONFIG_EP93XX) += ep93xx/ 212 diff -urN u-boot-2016.03/arch/arm/cpu/arm920t/start.S u-boot-2016.03-ok/arch/arm/cpu/arm920t/start.S 213 --- u-boot-2016.03/arch/arm/cpu/arm920t/start.S 2016-03-14 22:20:21.000000000 +0800 214 +++ u-boot-2016.03-ok/arch/arm/cpu/arm920t/start.S 2016-05-17 06:48:31.782641369 +0800 215 @@ -82,11 +82,50 @@ 216 217 /* FCLK:HCLK:PCLK = 1:2:4 */ 218 /* default FCLK is 120 MHz ! */ 219 - ldr r0, =CLKDIVN 220 - mov r1, #3 221 - str r1, [r0] 222 + //ldr r0, =CLKDIVN 223 + //mov r1, #3 224 + //str r1, [r0] 225 + 226 + /* 设置分频参数 */ 227 + ldr r0, =CLKDIVN 228 + mov r1, #0x05; /* FCLK:HCLK:PCLK=1:4:8 */ 229 + str r1, [r0] 230 + 231 + /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */ 232 + mrc p15, 0, r1, c1, c0, 0 /* 读出控制寄存器 */ 233 + orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */ 234 + mcr p15, 0, r1, c1, c0, 0 /* 写入控制寄存器 */ 235 + 236 + /* 配置时钟 */ 237 + #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) 238 + ldr r0, =0x4c000004 239 + ldr r1, =S3C2440_MPLL_400MHZ 240 + str r1, [r0] 241 + 242 #endif /* CONFIG_S3C24X0 */ 243 244 + /** 245 + * 调用 init.c 中的初始化 246 + * 因为已经初始化好内存 所以 sp 在 顶部 247 + * 在 NOR 时不能用片内 4K 248 + */ 249 + ldr sp, =4096 250 + bl init_sdram 251 + ldr sp, =0x34000000 252 + bl nand_init_ll 253 + /** 254 + * 从 0 地址开始复制 到 SDRAM 中 255 + * 在 smdk2440.h 中定义 #define CONFIG_SYS_TEXT_BASE 256 + * u-boot 的加载地址 257 + */ 258 + mov r0,#0 259 + ldr r1, =CONFIG_SYS_TEXT_BASE 260 + ldr r2, =__bss_start 261 + sub r2, r2, r1 262 + bl copy_code_to_sdram 263 + bl clear_bss 264 + ldr pc, =_main 265 + 266 /* 267 * we do sys-critical inits only at reboot, 268 * not when booting from ram! 269 @@ -95,8 +134,6 @@ 270 bl cpu_init_crit 271 #endif 272 273 - bl _main 274 - 275 /*------------------------------------------------------------------------------*/ 276 277 .globl c_runtime_cpu_setup 278 diff -urN u-boot-2016.03/arch/arm/cpu/u-boot.lds u-boot-2016.03-ok/arch/arm/cpu/u-boot.lds 279 --- u-boot-2016.03/arch/arm/cpu/u-boot.lds 2016-03-14 22:20:21.000000000 +0800 280 +++ u-boot-2016.03-ok/arch/arm/cpu/u-boot.lds 2016-05-12 09:28:12.338040880 +0800 281 @@ -32,7 +32,7 @@ 282 */ 283 /DISCARD/ : { *(.rel._secure*) } 284 #endif 285 - . = 0x00000000; 286 + . = 0; 287 288 . = ALIGN(4); 289 .text : 290 diff -urN u-boot-2016.03/arch/arm/Kconfig u-boot-2016.03-ok/arch/arm/Kconfig 291 --- u-boot-2016.03/arch/arm/Kconfig 2016-03-14 22:20:21.000000000 +0800 292 +++ u-boot-2016.03-ok/arch/arm/Kconfig 2016-05-09 08:48:52.118143749 +0800 293 @@ -91,6 +91,10 @@ 294 config TARGET_SMDK2410 295 bool "Support smdk2410" 296 select CPU_ARM920T 297 + 298 +config TARGET_SMDK2440 299 + bool "Support smdk2440" 300 + select CPU_ARM920T 301 302 config TARGET_ASPENITE 303 bool "Support aspenite" 304 @@ -829,6 +833,7 @@ 305 source "board/phytec/pcm052/Kconfig" 306 source "board/ppcag/bg0900/Kconfig" 307 source "board/samsung/smdk2410/Kconfig" 308 +source "board/samsung/smdk2440/Kconfig" 309 source "board/sandisk/sansa_fuze_plus/Kconfig" 310 source "board/schulercontrol/sc_sps_1/Kconfig" 311 source "board/siemens/draco/Kconfig" 312 diff -urN u-boot-2016.03/arch/arm/lib/crt0.S u-boot-2016.03-ok/arch/arm/lib/crt0.S 313 --- u-boot-2016.03/arch/arm/lib/crt0.S 2016-03-14 22:20:21.000000000 +0800 314 +++ u-boot-2016.03-ok/arch/arm/lib/crt0.S 2016-05-16 17:11:44.287690421 +0800 315 @@ -99,7 +99,6 @@ 316 * relocate_code(addr_moni). Trick here is that we'll return 317 * 'here' but relocated. 318 */ 319 - 320 ldr sp, [r9, #GD_START_ADDR_SP] /* sp = gd->start_addr_sp */ 321 #if defined(CONFIG_CPU_V7M) /* v7M forbids using SP as BIC destination */ 322 mov r3, sp 323 @@ -130,14 +129,17 @@ 324 325 bl c_runtime_cpu_setup /* we still call old routine here */ 326 #endif 327 + 328 + 329 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_FRAMEWORK) 330 -# ifdef CONFIG_SPL_BUILD 331 +#ifdef CONFIG_SPL_BUILD 332 /* Use a DRAM stack for the rest of SPL, if requested */ 333 bl spl_relocate_stack_gd 334 cmp r0, #0 335 movne sp, r0 336 movne r9, r0 337 -# endif 338 +#endif 339 + 340 ldr r0, =__bss_start /* this is auto-relocated! */ 341 342 #ifdef CONFIG_USE_ARCH_MEMSET 343 @@ -177,3 +179,4 @@ 344 #endif 345 346 ENDPROC(_main) 347 + 348 diff -urN u-boot-2016.03/arch/arm/lib/relocate.S u-boot-2016.03-ok/arch/arm/lib/relocate.S 349 --- u-boot-2016.03/arch/arm/lib/relocate.S 2016-03-14 22:20:21.000000000 +0800 350 +++ u-boot-2016.03-ok/arch/arm/lib/relocate.S 2016-05-16 17:11:48.481661370 +0800 351 @@ -26,6 +26,7 @@ 352 353 ENTRY(relocate_vectors) 354 355 + 356 #ifdef CONFIG_CPU_V7M 357 /* 358 * On ARMv7-M we only have to write the new vector address 359 diff -urN u-boot-2016.03/board/samsung/smdk2440/Kconfig u-boot-2016.03-ok/board/samsung/smdk2440/Kconfig 360 --- u-boot-2016.03/board/samsung/smdk2440/Kconfig 1970-01-01 07:00:00.000000000 +0700 361 +++ u-boot-2016.03-ok/board/samsung/smdk2440/Kconfig 2016-05-16 21:51:04.391251360 +0800 362 @@ -0,0 +1,15 @@ 363 +if TARGET_SMDK2440 364 + 365 +config SYS_BOARD 366 + default "smdk2440" 367 + 368 +config SYS_VENDOR 369 + default "samsung" 370 + 371 +config SYS_SOC 372 + default "s3c24x0" 373 + 374 +config SYS_CONFIG_NAME 375 + default "smdk2440" 376 + 377 +endif 378 diff -urN u-boot-2016.03/board/samsung/smdk2440/lowlevel_init.S u-boot-2016.03-ok/board/samsung/smdk2440/lowlevel_init.S 379 --- u-boot-2016.03/board/samsung/smdk2440/lowlevel_init.S 1970-01-01 07:00:00.000000000 +0700 380 +++ u-boot-2016.03-ok/board/samsung/smdk2440/lowlevel_init.S 2016-05-16 21:51:04.246938015 +0800 381 @@ -0,0 +1,147 @@ 382 +/* 383 + * Memory Setup stuff - taken from blob memsetup.S 384 + * 385 + * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and 386 + * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl) 387 + * 388 + * Modified for the Samsung SMDK2410 by 389 + * (C) Copyright 2002 390 + * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> 391 + * 392 + * SPDX-License-Identifier: GPL-2.0+ 393 + */ 394 + 395 + 396 +#include <config.h> 397 + 398 +/* some parameters for the board */ 399 + 400 +/* 401 + * 402 + * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S 403 + * 404 + * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com> 405 + * 406 + */ 407 + 408 +#define BWSCON 0x48000000 409 + 410 +/* BWSCON */ 411 +#define DW8 (0x0) 412 +#define DW16 (0x1) 413 +#define DW32 (0x2) 414 +#define WAIT (0x1<<2) 415 +#define UBLB (0x1<<3) 416 + 417 +#define B1_BWSCON (DW32) 418 +#define B2_BWSCON (DW16) 419 +#define B3_BWSCON (DW16 + WAIT + UBLB) 420 +#define B4_BWSCON (DW16) 421 +#define B5_BWSCON (DW16) 422 +#define B6_BWSCON (DW32) 423 +#define B7_BWSCON (DW32) 424 + 425 +/* BANK0CON */ 426 +#define B0_Tacs 0x0 /* 0clk */ 427 +#define B0_Tcos 0x0 /* 0clk */ 428 +#define B0_Tacc 0x7 /* 14clk */ 429 +#define B0_Tcoh 0x0 /* 0clk */ 430 +#define B0_Tah 0x0 /* 0clk */ 431 +#define B0_Tacp 0x0 432 +#define B0_PMC 0x0 /* normal */ 433 + 434 +/* BANK1CON */ 435 +#define B1_Tacs 0x0 /* 0clk */ 436 +#define B1_Tcos 0x0 /* 0clk */ 437 +#define B1_Tacc 0x7 /* 14clk */ 438 +#define B1_Tcoh 0x0 /* 0clk */ 439 +#define B1_Tah 0x0 /* 0clk */ 440 +#define B1_Tacp 0x0 441 +#define B1_PMC 0x0 442 + 443 +#define B2_Tacs 0x0 444 +#define B2_Tcos 0x0 445 +#define B2_Tacc 0x7 446 +#define B2_Tcoh 0x0 447 +#define B2_Tah 0x0 448 +#define B2_Tacp 0x0 449 +#define B2_PMC 0x0 450 + 451 +#define B3_Tacs 0x0 /* 0clk */ 452 +#define B3_Tcos 0x3 /* 4clk */ 453 +#define B3_Tacc 0x7 /* 14clk */ 454 +#define B3_Tcoh 0x1 /* 1clk */ 455 +#define B3_Tah 0x0 /* 0clk */ 456 +#define B3_Tacp 0x3 /* 6clk */ 457 +#define B3_PMC 0x0 /* normal */ 458 + 459 +#define B4_Tacs 0x0 /* 0clk */ 460 +#define B4_Tcos 0x0 /* 0clk */ 461 +#define B4_Tacc 0x7 /* 14clk */ 462 +#define B4_Tcoh 0x0 /* 0clk */ 463 +#define B4_Tah 0x0 /* 0clk */ 464 +#define B4_Tacp 0x0 465 +#define B4_PMC 0x0 /* normal */ 466 + 467 +#define B5_Tacs 0x0 /* 0clk */ 468 +#define B5_Tcos 0x0 /* 0clk */ 469 +#define B5_Tacc 0x7 /* 14clk */ 470 +#define B5_Tcoh 0x0 /* 0clk */ 471 +#define B5_Tah 0x0 /* 0clk */ 472 +#define B5_Tacp 0x0 473 +#define B5_PMC 0x0 /* normal */ 474 + 475 +#define B6_MT 0x3 /* SDRAM */ 476 +#define B6_Trcd 0x1 477 +#define B6_SCAN 0x1 /* 9bit */ 478 + 479 +#define B7_MT 0x3 /* SDRAM */ 480 +#define B7_Trcd 0x1 /* 3clk */ 481 +#define B7_SCAN 0x1 /* 9bit */ 482 + 483 +/* REFRESH parameter */ 484 +#define REFEN 0x1 /* Refresh enable */ 485 +#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */ 486 +#define Trp 0x0 /* 2clk */ 487 +#define Trc 0x3 /* 7clk */ 488 +#define Tchr 0x2 /* 3clk */ 489 +#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */ 490 +/**************************************/ 491 + 492 +.globl lowlevel_init 493 +lowlevel_init: 494 + /* memory control configuration */ 495 + /* make r0 relative the current location so that it */ 496 + /* reads SMRDATA out of FLASH rather than memory ! */ 497 + ldr r0, =SMRDATA 498 + ldr r1, =CONFIG_SYS_TEXT_BASE 499 + sub r0, r0, r1 500 + ldr r1, =BWSCON /* Bus Width Status Controller */ 501 + add r2, r0, #13*4 502 +0: 503 + ldr r3, [r0], #4 504 + str r3, [r1], #4 505 + cmp r2, r0 506 + bne 0b 507 + 508 + /* everything is fine now */ 509 + mov pc, lr 510 + 511 + .ltorg 512 +/* the literal pools origin */ 513 + 514 +SMRDATA: 515 + .long 0x22011110 //BWSCON 516 + .long 0x00000700 //BANKCON0 517 + .long 0x00000700 //BANKCON1 518 + .long 0x00000700 //BANKCON2 519 + .long 0x00000700 //BANKCON3 520 + .long 0x00000740 //BANKCON4 521 + .long 0x00000700 //BANKCON5 522 + .long 0x00018005 //BANKCON6 523 + .long 0x00018005 //BANKCON7 524 + .long 0x008C04F4 // REFRESH 525 + .long 0x000000B1 //BANKSIZE 526 + .long 0x00000030 //MRSRB6 527 + .long 0x00000030 //MRSRB7 528 + 529 diff -urN u-boot-2016.03/board/samsung/smdk2440/MAINTAINERS u-boot-2016.03-ok/board/samsung/smdk2440/MAINTAINERS 530 --- u-boot-2016.03/board/samsung/smdk2440/MAINTAINERS 1970-01-01 07:00:00.000000000 +0700 531 +++ u-boot-2016.03-ok/board/samsung/smdk2440/MAINTAINERS 2016-05-16 21:51:04.335323843 +0800 532 @@ -0,0 +1,6 @@ 533 +SMDK2440 BOARD 534 +M: David M眉ller <d.mueller@elsoft.ch> 535 +S: Maintained 536 +F: board/samsung/smdk2440/ 537 +F: include/configs/smdk2440.h 538 +F: configs/smdk2440_defconfig 539 diff -urN u-boot-2016.03/board/samsung/smdk2440/Makefile u-boot-2016.03-ok/board/samsung/smdk2440/Makefile 540 --- u-boot-2016.03/board/samsung/smdk2440/Makefile 1970-01-01 07:00:00.000000000 +0700 541 +++ u-boot-2016.03-ok/board/samsung/smdk2440/Makefile 2016-05-16 21:51:04.451323638 +0800 542 @@ -0,0 +1,9 @@ 543 +# 544 +# (C) Copyright 2000-2006 545 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. 546 +# 547 +# SPDX-License-Identifier: GPL-2.0+ 548 +# 549 + 550 +obj-y := smdk2440.o 551 +obj-y += lowlevel_init.o 552 diff -urN u-boot-2016.03/board/samsung/smdk2440/smdk2440.c u-boot-2016.03-ok/board/samsung/smdk2440/smdk2440.c 553 --- u-boot-2016.03/board/samsung/smdk2440/smdk2440.c 1970-01-01 07:00:00.000000000 +0700 554 +++ u-boot-2016.03-ok/board/samsung/smdk2440/smdk2440.c 2016-05-16 21:51:04.267044306 +0800 555 @@ -0,0 +1,138 @@ 556 +/* 557 + * (C) Copyright 2002 558 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 559 + * Marius Groeger <mgroeger@sysgo.de> 560 + * 561 + * (C) Copyright 2002, 2010 562 + * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch> 563 + * 564 + * SPDX-License-Identifier: GPL-2.0+ 565 + */ 566 + 567 +#include <common.h> 568 +#include <netdev.h> 569 +#include <asm/io.h> 570 +#include <asm/arch/s3c24x0_cpu.h> 571 + 572 +DECLARE_GLOBAL_DATA_PTR; 573 + 574 +#define FCLK_SPEED 1 575 + 576 +#if (FCLK_SPEED == 0) /* Fout = 203MHz, Fin = 12MHz for Audio */ 577 +#define M_MDIV 0xC3 578 +#define M_PDIV 0x4 579 +#define M_SDIV 0x1 580 +#elif (FCLK_SPEED == 1) /* Fout = 202.8MHz */ 581 +#define M_MDIV 0xA1 582 +#define M_PDIV 0x3 583 +#define M_SDIV 0x1 584 +#endif 585 + 586 +#define USB_CLOCK 1 587 + 588 +#if (USB_CLOCK == 0) 589 +#define U_M_MDIV 0xA1 590 +#define U_M_PDIV 0x3 591 +#define U_M_SDIV 0x1 592 +#elif (USB_CLOCK == 1) 593 +#define U_M_MDIV 0x48 594 +#define U_M_PDIV 0x3 595 +#define U_M_SDIV 0x2 596 +#endif 597 + 598 +static inline void pll_delay(unsigned long loops) 599 +{ 600 + __asm__ volatile ("1:\n" 601 + "subs %0, %1, #1\n" 602 + "bne 1b" : "=r" (loops) : "0" (loops)); 603 +} 604 + 605 +/* 606 + * Miscellaneous platform dependent initialisations 607 + */ 608 + 609 +int board_early_init_f(void) 610 +{ 611 + struct s3c24x0_clock_power * const clk_power = 612 + s3c24x0_get_base_clock_power(); 613 + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); 614 + 615 + /* to reduce PLL lock time, adjust the LOCKTIME register */ 616 + writel(0xFFFFFF, &clk_power->locktime); 617 + 618 + /* configure MPLL */ 619 + //writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, &clk_power->mpllcon); 620 + 621 + /* some delay between MPLL and UPLL */ 622 + //pll_delay(4000); 623 + 624 + /* configure UPLL */ 625 + writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV, 626 + &clk_power->upllcon); 627 + 628 + /* some delay between MPLL and UPLL */ 629 + pll_delay(8000); 630 + 631 + /* set up the I/O ports */ 632 + writel(0x007FFFFF, &gpio->gpacon); 633 + writel(0x00044555, &gpio->gpbcon); 634 + writel(0x000007FF, &gpio->gpbup); 635 + writel(0xAAAAAAAA, &gpio->gpccon); 636 + writel(0x0000FFFF, &gpio->gpcup); 637 + writel(0xAAAAAAAA, &gpio->gpdcon); 638 + writel(0x0000FFFF, &gpio->gpdup); 639 + writel(0xAAAAAAAA, &gpio->gpecon); 640 + writel(0x0000FFFF, &gpio->gpeup); 641 + writel(0x000055AA, &gpio->gpfcon); 642 + writel(0x000000FF, &gpio->gpfup); 643 + writel(0xFF95FFBA, &gpio->gpgcon); 644 + writel(0x0000FFFF, &gpio->gpgup); 645 + writel(0x002AFAAA, &gpio->gphcon); 646 + writel(0x000007FF, &gpio->gphup); 647 + 648 + return 0; 649 +} 650 + 651 +int board_init(void) 652 +{ 653 + /* arch number of SMDK2410-Board */ 654 + gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; 655 + 656 + /* adress of boot parameters */ 657 + gd->bd->bi_boot_params = 0x30000100; 658 + 659 + icache_enable(); 660 + dcache_enable(); 661 + 662 + return 0; 663 +} 664 + 665 +int dram_init(void) 666 +{ 667 + /* dram_init must store complete ramsize in gd->ram_size */ 668 + gd->ram_size = PHYS_SDRAM_1_SIZE; 669 + return 0; 670 +} 671 + 672 +#ifdef CONFIG_CMD_NET 673 +int board_eth_init(bd_t *bis) 674 +{ 675 + int rc = 0; 676 +#ifdef CONFIG_CS8900 677 + rc = cs8900_initialize(0, CONFIG_CS8900_BASE); 678 +#endif 679 + return rc; 680 +} 681 +#endif 682 + 683 +/* 684 + * Hardcoded flash setup: 685 + * Flash 0 is a non-CFI AMD AM29LV800BB flash. 686 + */ 687 +ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info) 688 +{ 689 + info->portwidth = FLASH_CFI_16BIT; 690 + info->chipwidth = FLASH_CFI_BY16; 691 + info->interface = FLASH_CFI_X16; 692 + return 1; 693 +} 694 diff -urN u-boot-2016.03/configs/smdk2440_defconfig u-boot-2016.03-ok/configs/smdk2440_defconfig 695 --- u-boot-2016.03/configs/smdk2440_defconfig 1970-01-01 07:00:00.000000000 +0700 696 +++ u-boot-2016.03-ok/configs/smdk2440_defconfig 2016-05-09 07:56:48.822806092 +0800 697 @@ -0,0 +1,4 @@ 698 +CONFIG_ARM=y 699 +CONFIG_TARGET_SMDK2440=y 700 +CONFIG_SYS_PROMPT="SMDK2440 # " 701 +# CONFIG_CMD_SETEXPR is not set 702 diff -urN u-boot-2016.03/include/configs/smdk2410.h u-boot-2016.03-ok/include/configs/smdk2410.h 703 --- u-boot-2016.03/include/configs/smdk2410.h 2016-03-14 22:20:21.000000000 +0800 704 +++ u-boot-2016.03-ok/include/configs/smdk2410.h 2016-05-12 08:31:46.907513241 +0800 705 @@ -18,10 +18,10 @@ 706 * (easy to change) 707 */ 708 #define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */ 709 -#define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */ 710 +#define CONFIG_S3C2440 711 #define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */ 712 713 -#define CONFIG_SYS_TEXT_BASE 0x0 714 +#define CONFIG_SYS_TEXT_BASE 0x33f00000 715 716 717 #define CONFIG_SYS_ARM_CACHE_WRITETHROUGH 718 @@ -49,16 +49,16 @@ 719 /************************************************************ 720 * USB support (currently only works with D-cache off) 721 ************************************************************/ 722 -#define CONFIG_USB_OHCI 723 -#define CONFIG_USB_OHCI_S3C24XX 724 -#define CONFIG_USB_KEYBOARD 725 -#define CONFIG_USB_STORAGE 726 -#define CONFIG_DOS_PARTITION 727 +/*#define CONFIG_USB_OHCI */ 728 +/*#define CONFIG_USB_OHCI_S3C24XX */ 729 +/*#define CONFIG_USB_KEYBOARD */ 730 +/*#define CONFIG_USB_STORAGE */ 731 +/*#define CONFIG_DOS_PARTITION */ 732 733 /************************************************************ 734 * RTC 735 ************************************************************/ 736 -#define CONFIG_RTC_S3C24X0 737 +/*#define CONFIG_RTC_S3C24X0*/ 738 739 740 #define CONFIG_BAUDRATE 115200 741 @@ -66,22 +66,22 @@ 742 /* 743 * BOOTP options 744 */ 745 -#define CONFIG_BOOTP_BOOTFILESIZE 746 -#define CONFIG_BOOTP_BOOTPATH 747 -#define CONFIG_BOOTP_GATEWAY 748 -#define CONFIG_BOOTP_HOSTNAME 749 +/*#define CONFIG_BOOTP_BOOTFILESIZE*/ 750 +/*#define CONFIG_BOOTP_BOOTPATH*/ 751 +/*#define CONFIG_BOOTP_GATEWAY*/ 752 +/*#define CONFIG_BOOTP_HOSTNAME*/ 753 754 /* 755 * Command line configuration. 756 */ 757 -#define CONFIG_CMD_BSP 758 +/*#define CONFIG_CMD_BSP*/ 759 #define CONFIG_CMD_CACHE 760 -#define CONFIG_CMD_DATE 761 -#define CONFIG_CMD_DHCP 762 +/*#define CONFIG_CMD_DATE*/ 763 +/*#define CONFIG_CMD_DHCP*/ 764 #define CONFIG_CMD_NAND 765 #define CONFIG_CMD_PING 766 -#define CONFIG_CMD_REGINFO 767 -#define CONFIG_CMD_USB 768 +/*#define CONFIG_CMD_REGINFO*/ 769 +/*#define CONFIG_CMD_USB*/ 770 771 #define CONFIG_SYS_HUSH_PARSER 772 #define CONFIG_CMDLINE_EDITING 773 @@ -93,8 +93,8 @@ 774 #define CONFIG_ZERO_BOOTDELAY_CHECK 775 776 #define CONFIG_NETMASK 255.255.255.0 777 -#define CONFIG_IPADDR 10.0.0.110 778 -#define CONFIG_SERVERIP 10.0.0.1 779 +#define CONFIG_IPADDR 192.168.1.88 780 +#define CONFIG_SERVERIP 192.168.1.1 781 782 #if defined(CONFIG_CMD_KGDB) 783 #define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ 784 @@ -167,24 +167,27 @@ 785 * NAND configuration 786 */ 787 #ifdef CONFIG_CMD_NAND 788 -#define CONFIG_NAND_S3C2410 789 -#define CONFIG_SYS_S3C2410_NAND_HWECC 790 #define CONFIG_SYS_MAX_NAND_DEVICE 1 791 #define CONFIG_SYS_NAND_BASE 0x4E000000 792 +#define CONFIG_NAND_S3C2440 793 +#define CONFIG_S3C24XX_CUSTOM_NAND_TIMING 794 +#define CONFIG_S3C24XX_TACLS 1 795 +#define CONFIG_S3C24XX_TWRPH0 2 796 +#define CONFIG_S3C24XX_TWRPH1 1 797 #endif 798 799 /* 800 * File system 801 */ 802 -#define CONFIG_CMD_FAT 803 -#define CONFIG_CMD_EXT2 804 -#define CONFIG_CMD_UBI 805 -#define CONFIG_CMD_UBIFS 806 +/*#define CONFIG_CMD_FAT*/ 807 +/*#define CONFIG_CMD_EXT2*/ 808 +/*#define CONFIG_CMD_UBI*/ 809 +/*#define CONFIG_CMD_UBIFS*/ 810 #define CONFIG_CMD_MTDPARTS 811 #define CONFIG_MTD_DEVICE 812 #define CONFIG_MTD_PARTITIONS 813 #define CONFIG_YAFFS2 814 -#define CONFIG_RBTREE 815 +/*#define CONFIG_RBTREE*/ 816 817 /* additions for new relocation code, must be added to all boards */ 818 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 819 diff -urN u-boot-2016.03/include/configs/smdk2440.h u-boot-2016.03-ok/include/configs/smdk2440.h 820 --- u-boot-2016.03/include/configs/smdk2440.h 1970-01-01 07:00:00.000000000 +0700 821 +++ u-boot-2016.03-ok/include/configs/smdk2440.h 2016-05-16 17:39:51.777785587 +0800 822 @@ -0,0 +1,157 @@ 823 +/* 824 + * (C) Copyright 2002 825 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 826 + * Marius Groeger <mgroeger@sysgo.de> 827 + * Gary Jennejohn <garyj@denx.de> 828 + * David Mueller <d.mueller@elsoft.ch> 829 + * 830 + * Configuation settings for the SAMSUNG SMDK2440 board. 831 + * 832 + * SPDX-License-Identifier: GPL-2.0+ 833 + */ 834 + 835 +#ifndef __CONFIG_H 836 +#define __CONFIG_H 837 + 838 +/* 839 + * High Level Configuration Options 840 + * (easy to change) 841 + */ 842 +#define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */ 843 +#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */ 844 +#define CONFIG_SMDK2440 /* on a SAMSUNG SMDK2440 Board */ 845 + 846 +#define CONFIG_SYS_TEXT_BASE 0x30a00000/*0x33f00000*/ 847 + 848 + 849 +#define CONFIG_SYS_ARM_CACHE_WRITETHROUGH 850 + 851 +/* input clock of PLL (the SMDK2440 has 12MHz input clock) */ 852 +#define CONFIG_SYS_CLK_FREQ 12000000 853 + 854 +#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */ 855 +#define CONFIG_SETUP_MEMORY_TAGS 856 +#define CONFIG_INITRD_TAG 857 + 858 +/* 859 + * Hardware drivers 860 + */ 861 + 862 +/* 863 + * select serial console configuration 864 + */ 865 +#define CONFIG_S3C24X0_SERIAL 866 +#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2440 */ 867 + 868 + 869 + 870 +#define CONFIG_BAUDRATE 115200 871 + 872 +/* 873 + * BOOTP options 874 + */ 875 +#define CONFIG_BOOTP_BOOTFILESIZE 876 +#define CONFIG_BOOTP_BOOTPATH 877 +#define CONFIG_BOOTP_GATEWAY 878 +#define CONFIG_BOOTP_HOSTNAME 879 + 880 + 881 +#define CONFIG_CMD_PING 882 +#define CONFIG_SYS_HUSH_PARSER 883 +#define CONFIG_CMDLINE_EDITING 884 + 885 +/* autoboot */ 886 +#define CONFIG_BOOTDELAY 5 887 +#define CONFIG_BOOT_RETRY_TIME -1 888 +#define CONFIG_RESET_TO_RETRY 889 +#define CONFIG_ZERO_BOOTDELAY_CHECK 890 + 891 +#define CONFIG_NETMASK 255.255.255.0 892 +#define CONFIG_IPADDR 192.168.1.123 893 +#define CONFIG_SERVERIP 192.168.1.100 894 + 895 +#if defined(CONFIG_CMD_KGDB) 896 +#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ 897 +#endif 898 + 899 +/* 900 + * Miscellaneous configurable options 901 + */ 902 +#define CONFIG_SYS_LONGHELP /* undef to save memory */ 903 +#define CONFIG_SYS_CBSIZE 256 904 +/* Print Buffer Size */ 905 +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ 906 + sizeof(CONFIG_SYS_PROMPT)+16) 907 +#define CONFIG_SYS_MAXARGS 16 908 +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE 909 + 910 +#define CONFIG_DISPLAY_CPUINFO /* Display cpu info */ 911 + 912 +#define CONFIG_SYS_MEMTEST_START 0x30000000 /* memtest works on */ 913 +#define CONFIG_SYS_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */ 914 + 915 +#define CONFIG_SYS_LOAD_ADDR 0x30800000 916 + 917 +/* support additional compression methods */ 918 +#define CONFIG_BZIP2 919 +#define CONFIG_LZO 920 +#define CONFIG_LZMA 921 + 922 +/*----------------------------------------------------------------------- 923 + * Physical Memory Map 924 + */ 925 +#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ 926 +#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */ 927 +#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */ 928 + 929 +#define PHYS_FLASH_1 0x00000000 /* Flash Bank #0 */ 930 + 931 +#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1 932 + 933 +/*----------------------------------------------------------------------- 934 + * FLASH and environment organization 935 + */ 936 + 937 +#define CONFIG_SYS_FLASH_CFI 938 +#define CONFIG_FLASH_CFI_DRIVER 939 +#define CONFIG_FLASH_CFI_LEGACY 940 +#define CONFIG_SYS_FLASH_LEGACY_512Kx16 941 +#define CONFIG_FLASH_SHOW_PROGRESS 45 942 + 943 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 944 +#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE } 945 +#define CONFIG_SYS_MAX_FLASH_SECT (19) 946 + 947 +#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) 948 +#define CONFIG_ENV_IS_IN_FLASH 949 +#define CONFIG_ENV_SIZE 0x10000 950 +/* allow to overwrite serial and ethaddr */ 951 +#define CONFIG_ENV_OVERWRITE 952 + 953 +/* 954 + * Size of malloc() pool 955 + * BZIP2 / LZO / LZMA need a lot of RAM 956 + */ 957 +#define CONFIG_SYS_MALLOC_LEN (4 * 1024 * 1024) 958 + 959 +#define CONFIG_SYS_MONITOR_LEN (448 * 1024) 960 +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE 961 + 962 +/* 963 + * NAND configuration 964 + */ 965 +#ifdef CONFIG_CMD_NAND 966 +#define CONFIG_NAND_S3C2440 967 +#define CONFIG_SYS_S3C2440_NAND_HWECC 968 +#define CONFIG_SYS_MAX_NAND_DEVICE 1 969 +#define CONFIG_SYS_NAND_BASE 0x4E000000 970 +#endif 971 + 972 +/* additions for new relocation code, must be added to all boards */ 973 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 974 +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \ 975 + GENERATED_GBL_DATA_SIZE) 976 + 977 +#define CONFIG_BOARD_EARLY_INIT_F 978 + 979 +#endif /* __CONFIG_H */ 980 diff -urN u-boot-2016.03/Makefile u-boot-2016.03-ok/Makefile 981 --- u-boot-2016.03/Makefile 2016-03-14 22:20:21.000000000 +0800 982 +++ u-boot-2016.03-ok/Makefile 2016-05-09 08:38:00.046292963 +0800 983 @@ -7,7 +7,8 @@ 984 SUBLEVEL = 985 EXTRAVERSION = 986 NAME = 987 - 988 +ARCH=arm 989 +CROSS_COMPILE=arm-linux- 990 # *DOCUMENTATION* 991 # To see a list of typical targets execute "make help" 992 # More info can be located in ./README 993 Binary files u-boot-2016.03/.swp and u-boot-2016.03-ok/.swp differ