龙芯板贴内存参数配置
龙芯板贴内存参数配置
龙芯3号处理器是面向个人计算机、服务器等信息化领域的通用处理器。有些方案通过综合考虑(控制成本、特定性能需求、空间限制、特殊环境适应性)会选择将内存颗粒直接设计到板卡上。龙芯固件默认是内存条方案,如果是板贴颗粒方案需要手动修改。
固件下通过
mm_ctrl->table.auto_ddr_config = 0;
变量进行内存使用模式选择:
- 0 代表,板贴内存颗粒方案
- 1 代表,内存槽插条方案 (默认配置)
本文主要讲解板贴内存颗粒,固件下如何配置内存参数。
一、内存相关代码位置
1.1 PMON 固件
相关代码位置:
- Targets/ls3a5000_7a/include/mem_ctrl.h
- Targets/ls3a5000_7a/cache_stage/cache_stage.c
1.2 UEFI 固件
相关代码位置:
- LsRefCodePkg/Include/MrcTypes.h
- LsRefCodePkg/SampleCode/Desktop/Ls3aPlatformTable/Pei/mem_feature_init.c
二、内存配置讲解
2.1 通道选择
以龙芯LS3A6000为例,默认有两个内存通道分别是:MC0、MC1,程序里定义为:
#define MC0_ENABLE 1
#define MC1_ENABLE 1
- 0 代表,关闭
- 1 代表,使能(默认配置)
2.2 代码里内存信息
#define DDR2 0x8
#define DDR3 0xb
#define DDR4 0xc
/*------------------------------------------------------------
| CID_NUM | 2'h0 | no cid |
| | 2'h1 | 2dies |
| | 2'h2 | 4dies |
| | 2'h3 | 8dies |
| SDRAM_BG_SIZE | 2'h0 | no bank group |
| | 2'h1 | 2 bank group |
| | 2'h2 | 4 bank group |
| SDRAM_BA_SIZE | 1'h0 | 4 bank |
| | 1'h1 | 8 bank |
| SDRAM_ROW_SIZE | 3'hx | 18-x |
| SDRAM_COL_SIZE | 2'hx | 12-x |
| ADDR_MIRROR | 1'b1 | ADDR MIRROR |
| | 1'b0 | STANDARD |
| DIMM_MEMSIZE |12'bx | x*1MB |
| DIMM_WIDTH | 2'h0 | 8bit//not support |
| | 2'h1 | 16bit |
| | 2'h2 | 32bit |
| | 2'h3 | 64bit |
| DIMM_ECC | 1'b1 | With ECC |
| | 1'b0 | No ECC |
| DIMM_TYPE | 2'h0 | Unbuffered DIMM |
| | 2'h1 | Registered DIMM |
| | 2'h2 | SO-DIMM |
| | 2'h3 | Load Reduced DIMM |
| SDRAM_WIDTH | 2'h0 | x4 |
| | 2'h1 | x8 |
| | 2'h2 | x16 |
| SDRAM_TYPE | 3'h0 | NO_DIMM |
| | 3'hb | DDR3 |
| | 3'hc | DDR4 |
| MC_CSMAP | 8'b0 | CS7-CS0 |
------------------------------------------------------------*/
- 通道MC0默认参数
#define MC0_MEMSIZE 8192
#define MC0_DRAM_TYPE DDR4
#define MC0_DIMM_TYPE 0
#define MC0_MODULE_TYPE 2
#define MC0_CID_NUM 0
#define MC0_BA_NUM 0
#define MC0_BG_NUM 2
#define MC0_CSMAP 1
#define MC0_DRAM_WIDTH 1
#define MC0_MODULE_WIDTH 3
#define MC0_ECC 0
#define MC0_SDRAM_CAPACITY 0
#define MC0_COL_NUM 2
#define MC0_ROW_NUM 2
#define MC0_ADDR_MIRROR 0
#define MC0_BG_MIRROR 0
2.3 参数信息详解
例子,仅使用了通道MC0,内存颗粒DDR4 SDRAM MT40A512M16进行讲解。
2.3.1 内存颗粒
2.3.2 MC0通道参数配置
MC0_MEMSIZE
通道MC0 总容量大小,单位是MB,
数值为:8192MC0_DRAM_TYPE
内存颗粒类型,龙芯3号处理使用的是ddr4控制器,
数值为:c
0 代表: NO_DIMM
b 代表:DDR3
c 代表:DDR4 (默认值)MC0_DIMM_TYPE
不用关心,
使用默认值MC0_MODULE_TYPE
不用关心,
使用默认值MC0_CID_NUM
不用关心,
使用默认值MC0_BA_NUM
Bank group address 2个,
数值为:1
0代表,no bank group
1代表,2 bank group
2代表,4 bank groupMC0_BG_NUM
Bank address in bank group 4个,
数值为:0
0代表,4 bank
1代表,8 bankMC0_CSMAP
片选使用个数,和硬件工程师确认,使用的是cs0和cs1 ,
数值为:3
物理CS7-CS0指芯片引脚,1代表有cs连接,0代表没有链接
列举3个例子 CSMAP cs7 cs6 cs5 cs4 cs3 cs2 cs1 cs0
例子1:使用cs0 0x1 0 0 0 0 0 0 0 1
例子2:使用cs4 0x10 0 0 0 1 0 0 0 0
例子3:使用cs0、cs1 0x3 0 0 0 0 0 0 1 1MC0_DRAM_WIDTH
X几模式,使用的是X16,
数值为:2
0代表,X4
1代表,X8
2代表,X16MC0_MODULE_WIDTH
数据位数,使用的是64位,
数值为:3
0代表,8bit 不支持
1代表,16bit
2代表,32bit
3代表,64bit (默认值)MC0_ECC
和硬件工程师确认,没有使用ecc,
数值为:0
0代表,没有ecc
1代表,有eccMC0_SDRAM_CAPACITY
不用关心,
使用默认值MC0_COL_NUM
列位数, 12-10(A[9:0]),
数值为:2
公式为:12-xMC0_ROW_NUM
行位数, 18-16(A[15:0]),
数值为:2
公式为:18-xMC0_ADDR_MIRROR
是否有地址镜像,和硬件工程师确认,有使用了,
数值为:1
0代表,未使用
1代表,有使用MC0_BG_MIRROR
是否有BG地址镜像,和硬件工程师确认,未使用,
数值为:0
0代表,未使用
1代表,有使用
最终修改结果
通道 容量 BA数 BG数 片选 位宽 ECC 行数 列数 地址镜像
通道选择 MB 4 bank 2 bank group cs0、cs1 X16 无ecc 16 10 有
MC0 8192 0 1 3 2 0 2 2 1
#define MC0_ENABLE 1
#define MC1_ENABLE 0
#define MC0_MEMSIZE 8192
#define MC0_DRAM_TYPE DDR4
#define MC0_DIMM_TYPE 0
#define MC0_MODULE_TYPE 2
#define MC0_CID_NUM 0
#define MC0_BA_NUM 0
#define MC0_BG_NUM 1
#define MC0_CSMAP 3
#define MC0_DRAM_WIDTH 2
#define MC0_MODULE_WIDTH 3
#define MC0_ECC 0
#define MC0_SDRAM_CAPACITY 0
#define MC0_COL_NUM 2
#define MC0_ROW_NUM 2
#define MC0_ADDR_MIRROR 1
#define MC0_BG_MIRROR 0