运行环境
CPU:龙芯2K1000
运行操作系统:Linux3.10
调试环境:Ubuntu18.04.6
调试模块:DDR
为测试使用,DDR从64bit改为32bit,从PMON修改
1、注释掉(#为注释) Targets/LS2K/conf/ls2k 中的内存条选项。
#option AUTO_DDR_CONFIG # for DIMM recognize
注:修改 Targets/LS2K/conf/ls2k 文件需要重新执行 make cfg 命令。
2、根据内存颗粒的配置修改 Targets/LS2K/ls2k/start.S 中的 s1 值。
dli s1, 0xc0a18404
s1 的参数定义在 Targets/LS2K/ls2k/ddr_dir/ddr_config_define.h 中,例如:
以华芯 HXB15H4G160CF 为例,查看手册。
根据手册显示,参数为 256Mb x 16 那一列参数。
实际板卡上的内存颗粒芯片挂载在 MC0 上,共 4 颗总大小 2GB,根据内存颗粒
的芯片手册和实际硬件情况最后 s1 的配置结果为 0xc0a18404。
在本例中,将64bit改为32bit主要修改如下
放开宏CONFIG_DDR_32BIT
如果Targets/LS2K/conf/ls2k定义了option DDR_S1=0xc1a18404,则直接在ls2k配置中修改,如果没有定义,则在 Targets/LS2K/ls2k/start.S 修改S1中的值。
在本例中,ls2k中定义如下
option DDR_S1=0xc1a18404
依据上文介绍,将第27bit置1,同时将[14:8]定义的值修改为实际的一半
再将内核设备树中memory的值改成实际值
memory {
name = "memory";
device_type = "memory";
#ifdef NOGPU
reg = <0 0x00200000 0 0x0ce00000 // 200MiB at 2MiB
#else
reg = <0 0x00200000 0 0x0ee00000 // 200MiB at 2MiB
#endif
1 0x10000000 0 0x20000000>; // 1462 -- 512 MiB at 2G
};