这次PMON 在263Mhz的频率下能较稳定跑过去,过400 就会直接hang在copy PMON to
memory。。 所以这次调试的主要目的就是将内存的频率调试到500Mhz 以上就可以
dli s1, 0xc1a18400c1a18400
1,首先需要手动设置 S1的值;
//!!!!important--s1 must be correctly set
#ifdef AUTO_DDR_CONFIG
dli s1, 0x36170000 //set use MC1 or MC0 or MC1/0 and give All device id
#else
#endif
S1的格式详细请看 龙芯3a2000的用户手册!
//set MC1 dimm infor
dli a0, ( MC_SDRAM_TYPE_DDR3 /* sdram type: DDR3/DDR2 */ \
| MC_DIMM_ECC_NO /* dimm ECC: YES/NO */ \
| MC_DIMM_BUF_REG_NO /* dimm buffer register: YES/NO, for RDIMM
use YES, all else use NO*/ \
| MC_DIMM_WIDTH_64 /* memory data width: 64/32 */ \
| MC_SDRAM_ROW_14 /* sdram row address number: 15~11 */ \
| MC_SDRAM_COL_10 /* sdram column address number: 12~9 */ \
| MC_SDRAM_BANK_8 /* sdram bank number: 8/4 */ \
| MC_ADDR_MIRROR_YES /* for standard DDR3 UDIMM, use YES else
use NO */ \
| MC_SDRAM_WIDTH_X8 /* SDRAM device data width: 8/16 */ \
| MC_USE_CS_0_1 /* the CS pins the sdram connected on(split by '_',
from small to big) */ \
| MC_MEMSIZE_(4) /* MC memory size, unit: 512MB */ \
)
dsll s1, a0, 32
//set MC0 dimm infor
dli a0, ( MC_SDRAM_TYPE_DDR3 /* sdram type: DDR3/DDR2 */ \
| MC_DIMM_ECC_NO /* dimm ECC: YES/NO */ \
| MC_DIMM_BUF_REG_NO /* dimm buffer register: YES/NO, for RDIMM
use YES, all else use NO*/ \
| MC_DIMM_WIDTH_64 /* memory data width: 64/32 */ \
| MC_SDRAM_ROW_14 /* sdram row address number: 15~11 */ \
| MC_SDRAM_COL_10 /* sdram column address number: 12~9 */ \
| MC_SDRAM_BANK_8 /* sdram bank number: 8/4 */ \
| MC_ADDR_MIRROR_YES /* for standard DDR3 UDIMM, use YES, else
use NO */ \
| MC_SDRAM_WIDTH_X8 /* SDRAM device data width: 8/16 */ \
| MC_USE_CS_0_1 /* the CS pins the sdram connected on(split by '_',
from small to big) */ \
| MC_MEMSIZE_(4) /* MC memory size, unit: 512MB */ \
)
or s1, s1, a0
//set used MC and NODE ID
or s1, s1, USE_MC_0 /* used memory controller: _0/_1/_0_1 */
or s1, s1, MC_NODE_ID_0 /* node ID: 0/1/2/3 */
2,修改内存宏定义 以及打开调试内存的测试程序宏 和 参数调试宏
#define DDR_LOOPC 64 //264Mhz
#define DEBUG_DDR //复杂内存压力测试
#define DEBUG_DDR_PARAM // 调试内存参数宏
3, 开始调试参数 在start.S 的末尾可以看到是使用了哪一个 PARAM 参数表
比例 :
.rdata
.global ddr2_reg_data
.global ddr3_reg_data
.align 5
#include "loongson_mc2_param.S" // 正在使用的参数表
.text
.global nvram_offs
.align 12
nvram_offs:
.dword 0x0
.align 12
参数调试的一般步骤:
1 、首先调试 将简单内存测试调通 主要的参数有:
需要将参数 tPHY_RDDATA(0x1c0)
将 tPHY_WRLAT(0x1d4)
标准的uncached /cached data is:
MC0_DDR3_CTRL_0x1d0: .dword 0x0802090302000014
-----
MC0_DDR3_CTRL_0x1d0: MC0_DDR3_CTRL_0x1c0:
tPHY_WRLAT(0x1d4)+1 5A往下移动:tPHY_RDDATA(0x1c0)+1 5A往上移动
通过适当的调整基本可以调成:5a3c 781e 的形式;
2 、接着往下跑 可能会出现 系统卡死的情况 主要是hang在 cached data 那块和
copyPMON
要想跳过这些hang住的地方可以通过 打开内存调试模式:MC0_DDR3_CTRL_0x160:
.dword 0x0000000000010101 将0x162 的01 改成 00 那就基本能顺利跑下去
如果hang在了 copy PMON 的地方,可以试着调试这几个参数
不应该是497Mhz嘛?
其他的 参数可能需要更多的实验证明。P12PCIH 也可以通过上面的几个参数微调 ,正常情
况不应该有太久的延时在这里。
这次主要的几个参数change list 如下:
4、hang在P12PCIH 处
_pci_businit (int init)
----》
----》
-----》》
-----》