soc/intel/xeon_sp/cpx: Allow creating meminfo for empty DIMM slots
Introduce the mainboard-defined `mainboard_dimm_slot_exists()` function to allow creating SMBIOS type 17 entries for unpopulated DIMM slots. Change-Id: I1d9c41dd7d981842ca6f0294d9e6b0fedc0c98e4 Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/64036 Reviewed-by: Jonathan Zhang <jonzhang@fb.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
d41f69ccce
commit
3cc20202de
|
@ -82,3 +82,8 @@ uint16_t get_max_memory_speed(uint32_t commonTck)
|
||||||
else
|
else
|
||||||
return 800;
|
return 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__weak bool mainboard_dimm_slot_exists(uint8_t socket, uint8_t channel, uint8_t slot)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef _CPX_DDR_H_
|
#ifndef _CPX_DDR_H_
|
||||||
#define _CPX_DDR_H_
|
#define _CPX_DDR_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <types.h>
|
||||||
|
|
||||||
/* DDR_*_TCK_MIN are in picoseconds */
|
/* DDR_*_TCK_MIN are in picoseconds */
|
||||||
#define DDR_800_TCK_MIN 2500
|
#define DDR_800_TCK_MIN 2500
|
||||||
|
@ -48,4 +48,6 @@
|
||||||
uint16_t get_max_memory_speed(uint32_t commonTck);
|
uint16_t get_max_memory_speed(uint32_t commonTck);
|
||||||
uint32_t get_ddr_voltage(uint8_t DdrVoltage);
|
uint32_t get_ddr_voltage(uint8_t DdrVoltage);
|
||||||
|
|
||||||
|
bool mainboard_dimm_slot_exists(uint8_t socket, uint8_t channel, uint8_t slot);
|
||||||
|
|
||||||
#endif /* _CPX_DDR_H_ */
|
#endif /* _CPX_DDR_H_ */
|
||||||
|
|
|
@ -81,7 +81,7 @@ void save_dimm_info(void)
|
||||||
struct memory_info *mem_info;
|
struct memory_info *mem_info;
|
||||||
const struct SystemMemoryMapHob *hob;
|
const struct SystemMemoryMapHob *hob;
|
||||||
MEMMAP_DIMM_DEVICE_INFO_STRUCT src_dimm;
|
MEMMAP_DIMM_DEVICE_INFO_STRUCT src_dimm;
|
||||||
int dimm_max, index = 0;
|
int dimm_max, index = 0, num_dimms = 0;
|
||||||
uint32_t vdd_voltage;
|
uint32_t vdd_voltage;
|
||||||
|
|
||||||
hob = get_system_memory_map();
|
hob = get_system_memory_map();
|
||||||
|
@ -134,13 +134,25 @@ void save_dimm_info(void)
|
||||||
src_dimm.actKeyByte2,
|
src_dimm.actKeyByte2,
|
||||||
0);
|
0);
|
||||||
index++;
|
index++;
|
||||||
|
num_dimms++;
|
||||||
|
} else if (mainboard_dimm_slot_exists(0, ch, dimm)) {
|
||||||
|
if (index >= dimm_max) {
|
||||||
|
printk(BIOS_WARNING, "Too many DIMMs info for %s.\n",
|
||||||
|
__func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dest_dimm = &mem_info->dimm[index];
|
||||||
|
dest_dimm->dimm_size = 0;
|
||||||
|
dest_dimm->channel_num = ch;
|
||||||
|
dest_dimm->dimm_num = dimm;
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save available DIMM information */
|
/* Save available DIMM slot information */
|
||||||
mem_info->dimm_cnt = index;
|
mem_info->dimm_cnt = index;
|
||||||
printk(BIOS_DEBUG, "%d DIMMs found\n", mem_info->dimm_cnt);
|
printk(BIOS_DEBUG, "%d out of %d DIMMs found\n", num_dimms, mem_info->dimm_cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_cmos_mrc_cold_boot_flag(bool cold_boot_required)
|
static void set_cmos_mrc_cold_boot_flag(bool cold_boot_required)
|
||||||
|
|
Loading…
Reference in New Issue