kernel-DDR配置

启动过程参考: http://bbs.chinaunix.net/thread-2039668-1-1.html

参考: http://processors.wiki.ti.com/index.php/Setting_up_AM37x_SDRC_registers

omap3_evm_init_irq 函数配置 sdrc_cs0和sdrc_cs1各种速率所对应的参数.

最后通过 omap3_configure_core_dpll 设置下去!

omap3_core_dpll_m2_set_rate  比较内存速率并设置新的参数, 实际生效的只有SDRC_RFR_CTRL_1.

所以只需修改RFR参数, 其他的参数在x-loader中修改为200MHz的参数即可.

之前问题: CS0和CS1参数不一致, 内核只配置cs0, 导致RFR参数不一致.

内核未定义: CONFIG_OMAP3_SDRC_AC_TIMING  所以内存时序配置参数无效, 只生效了RFR参数!

内存配置参数的代码拷贝到sram里面运行, 配置内存时序参数前先让内存处于自刷新模式!

omap_detect_sram 初始化sram起始地址和大小

=================================================

2. kenerl sdrc.c 中 omap2_sdrc_init 函数会更改SDRC_POWER_REG为0x01, 原先是0x81的.


SDRC_REVISION     : 00000050
SDRC_SYSCONFIG    : 00000010
SDRC_CS_CFG       : 00000002
SDRC_MCFG_0       : 03588099
SDRC_MCFG_1       : 03588099
SDRC_MR_0         : 00000032
SDRC_MR_1         : 00000032
SDRC_EMR2_0       : 00000000
SDRC_EMR2_1       : 00000000
SDRC_ACTIM_CTRLA_0: 7ae1b4c6
SDRC_ACTIM_CTRLA_1: 7ae1b4c6
SDRC_ACTIM_CTRLB_0: 00021217
SDRC_ACTIM_CTRLB_1: 00021217
SDRC_RFR_CTRL_0   : 0004dc01
SDRC_RFR_CTRL_1   : 0005e601
SDRC_MANUAL_0     : 00000002
SDRC_MANUAL_1     : 00000002

clock: SDRC CS0 timing params used: RFR 0004dc01 CTRLA 92e1c4c6 CTRLB 0002111c MR 00000032
clock: SDRC CS1 timing params used:  RFR 0004dc01 CTRLA 92e1c4c6 CTRLB 0002111c MR 00000032


x-loader 中 config_3430sdram_ddr 配置内存参数, u-boot 不配置内存参数, 内核只配置了RFR参数!




===================================================================================

内核只使用CS1的内存启动
cpu外接两片32bit 256M的内存.默认从CS0开始的起始地址启动, 现在更改为CS1的起始地址启动.
主要的修改就是PHYS_OFFSET的地址, uboot传递给内核参数的地址以及bootargs中的mem参数.

 CS0起始地址为 0x80000000, 大小为 256MB.
 CS1起始地址为 0x90000000, 大小为 256MB.

1. 修改 arch/arm/mach-omap2/Makefile.boot文件, 修改后如下
  zreladdr-y        := 0x90008000
params_phys-y       := 0x90000100
initrd_phys-y       := 0x90800000

2. 修改 arch/arm/plat-omap/include/plat/memory.h文件, 对比结果如下:
--- arch/arm/plat-omap/include/plat/memory.h
+++ arch/arm/plat-omap/include/plat/memory.h
@@ -40,7 +40,7 @@
 #define PHYS_OFFSET        UL(0x10000000)
 #elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) || \
             defined(CONFIG_ARCH_OMAP4)
-#define PHYS_OFFSET        UL(0x80000000)
+#define PHYS_OFFSET        UL(0x90000000)
 #endif
 
 /*

3. 修改MACHINE_START中定义的内核参数起始地址:
--- arch/arm/mach-omap2/board-omap3evm.c    
+++ arch/arm/mach-omap2/board-omap3evm.c    
@@ -1581,7 +1581,7 @@
     /* Maintainer: Syed Mohammed Khasim - Texas Instruments */
     .phys_io    = 0x48000000,
     .io_pg_offst    = ((0xfa000000) >> 18) & 0xfffc,
-    .boot_params    = 0x80000100,
+    .boot_params    = 0x90000100,
     .map_io        = omap3_evm_map_io,
     .init_irq    = omap3_evm_init_irq,
     .init_machine    = omap3_evm_init,


4. 修改uboot中的 board/ti/evm/evm.c文件, 对比的结果如下:
--- board/ti/evm/evm.c    
+++ board/ti/evm/evm.c    
@@ -133,7 +133,7 @@
     /* board id for Linux */
     gd->bd->bi_arch_number = MACH_TYPE_OMAP3EVM;
     /* boot param addr */
-    gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
+    gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100  + 0x10000000);
 
 #ifdef    CONFIG_CMD_FASTBOOT
 #ifdef    FASTBOOT_PORT_OMAPZOOM_NAND_FLASHING



5. 重新编译uboot和kernel, 并修改bootargs参数中的: mem=256M@0x90000000.
   uboot中使用bd_info命令内核参数地址查看是否修改成功:
OMAP3_EVM # bdinfo
arch_number = 0x000005FF
env_t       = 0x00000000
boot_params = 0x90000100
DRAM bank   = 0x00000000
-> start    = 0x80000000
-> size     = 0x10000000
DRAM bank   = 0x00000001
-> start    = 0x90000000
-> size     = 0x10000000
ethaddr     = 00:E0:1C:00:95:01
ip_addr     = 192.168.99.120
baudrate    = 115200 bps


 


你可能感兴趣的:(c,linux,IO,cmd,UP)