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


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章