目前有SPD和SMIP两种,现在主要配置SMIP,soft:BMP;需要修改的相关文件smip.c
BGA:贴片式,Dimm:插槽,MemoryDown:贴片必须要用到的:
ch0 RankEnable-->ch0 Option,这些选项的配置看Memory Spec和Gen,其中Ch0_RankEnable:only for memorydown 这个和CS以及channel有关
RMT mode 运行边缘检验模式,这个如果有问题说明很有可能是电路问题,这个功能打开是给硬件做Debug用的,在宏定义中,Set的值是不变的,option的值为0或者1,config可以是数字,字符,字符串
smip.c的增删改查:(待定)
DQ Mapping for CHO to CH3:
bit0~31对应的ch0、ch2为DQ 8~15,0~7,24~31,16~23
bit0~31对应的ch1、ch3为DQ 0~31
另外有关project.h这个文件,一些基础的信息被收集在了project.h文件中,其中有setup界面中main选项中的众多子选项,其中包括bios vendor,bios version, build time等相关信息,但是这个project.h这个文件是在Build后生成的。
#ifdef CONFIG_ODM_PROJECT_ID
Status = GetMemSkuId (&MemSkuId);
if (EFI_ERROR (Status)) {
MemSkuId = 0x00;
}
DEBUG ((EFI_D_INFO, "=====================================================\n"));
// Bit3 Bit2========Bit1 Bit0
// ID3 ID2========ID1 ID0
//2G 0 0 Hynix----: 0 0
//4G 1 0 Samsung-: 1 0
//8G 0 1 Micron---: 0 1
// ID4,Bit4 0 DDR3L,1 LP4
MemSkuId &=0x0F;//now only for LP4
#if (CONFIG_ODM_PROJECT_ID == 0)
MemSkuId = 0x10;//DDR3L
#endif
DEBUG ((EFI_D_INFO, "Memory ID: 0x%2X\n", MemSkuId));
DEBUG ((EFI_D_INFO, "Memory Type: %s %s\n",MemMfg[MemSkuId&0x03],MemSize[((MemSkuId>>2)&0x03)]));
switch ((MemSkuId>>4)&0x01) {
case 0://for LP4
//Bit[4,3]=00 2G(Single Channel), 10 4G(Dual Channel), 01 8G(Dual Channel),11 4G(Single Channel)
switch ((MemSkuId>>2)&0x03) {//Memory Size
case 0x00://2G(Single Channel)8Gb
case 0x02://4G(Dual Channel)8Gb
DramConfig = &(DramConfigData->PlatformDram0);//8Gb Profile
DEBUG ((EFI_D_INFO, "Profile set to 0\n"));
break;
case 0x01://8G(Dual Channel)16Gb
case 0x03://4G(Single Channel)16Gb
DramConfig = &(DramConfigData->PlatformDram1);//16Gb Profile
DEBUG ((EFI_D_INFO, "Profile set to 1\n"));
break;
}
break;
case 1://For DDR3L
DramConfig = &(DramConfigData->PlatformDram5);
DEBUG ((EFI_D_INFO, "Profile set to 5, DDR3L\n"));
break;
}
Memory中channel,DIMM,rank,bank,cs,chip之间的联系:
一个channel对应一组内存控制器
————————————————
版权声明:本文为CSDN博主「潇洒Anthony」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011397314/article/details/111122452