BIOS實戰之Memory配置
目前有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對應一組記憶體控制器
相關文章
- ECS實戰之IPv6隧道配置
- 【面試實戰】# 併發程式設計之執行緒池配置實戰面試程式設計執行緒
- 外掛化之VirtualApk實戰一:專案配置APK
- Docker 實戰之 CentOS7 系統環境配置DockerCentOS
- Java Out Of Memory解決之JAVA_OPTS引數說明與配置Java
- Flink實戰(102):配置(一)管理配置
- 淺談RASP技術攻防之實戰[環境配置篇]
- R750配置raid_透過biosAIiOS
- 聯想筆記本win7系統通過BIOS中禁用Optane Memory的方法筆記Win7iOS
- 聯想筆記本win7系統透過BIOS中禁用Optane Memory的方法筆記Win7iOS
- Nuxt.js實戰和配置UXJS
- redis4.0之MEMORY命令詳解Redis
- shiro實戰系列(二)之入門實戰續
- 圖資料庫 NebulaGraph 的記憶體管理實踐之 Memory Tracker資料庫記憶體
- Spring Boot 外部化配置實戰解析Spring Boot
- # Spring Boot 外部化配置實戰解析Spring Boot
- Spring Boot自動配置原理、實戰Spring Boot
- Spring Boot外部化配置實戰解析Spring Boot
- 【SpringBoot實戰】核心配置和註解Spring Boot
- Kubernetes 實戰——配置應用(ConfigMap、Secret)
- springboot使用redis(從配置到實戰)Spring BootRedis
- Django之MTV實戰(2)Django
- kubebuilder實戰之七:webhookUIWebHook
- golang實戰之flag包Golang
- memory
- SpringBoot 實戰 (七) | 預設日誌配置Spring Boot
- Dubbo使用Apollo作為配置中心實戰
- SpringCloud Alibaba實戰(10:分散式配置中心)SpringGCCloud分散式
- Flutter實戰之動畫實現篇Flutter動畫
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- 死磕 java同步系列之JMM(Java Memory Model)Java
- 密碼學系列之:memory-bound函式密碼學函式
- 密碼學系列之:memory-hard函式密碼學函式
- [從原始碼學設計] Flume 之 memory channel原始碼
- Java 8 Stream之實戰篇Java
- kubernetes實戰篇之dashboard搭建
- webpack優化之HappyPack 實戰Web優化APP
- helm實戰之開發Chart