啓動過程參考: 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