From 9989171401175e9a701782bd08858b87c99183bc Mon Sep 17 00:00:00 2001 From: Julien Viard de Galbert Date: Wed, 24 Jan 2018 11:04:46 +0100 Subject: smbios: handle DIMM of 32G or more MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to SMBIOS Reference Specification (1) section 7.18.5 Memory Device — Extended Size When the size cannot be represented in the size field, it must be set to 0x7fff and the real size stored in the extended_size field. 1: https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.1.1.pdf Change-Id: Idc559454c16ccd685aaaed0d60f1af69b634ea2e Signed-off-by: Julien Viard de Galbert Reviewed-on: https://review.coreboot.org/23396 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Rudolph Reviewed-by: Paul Menzel --- src/arch/x86/smbios.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/arch') diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index 89951a10ab..548e6ed741 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -207,7 +207,12 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm, t->clock_speed = dimm->ddr_frequency; t->speed = dimm->ddr_frequency; t->type = SMBIOS_MEMORY_DEVICE; - t->size = dimm->dimm_size; + if (dimm->dimm_size < 0x7fff) { + t->size = dimm->dimm_size; + } else { + t->size = 0x7fff; + t->extended_size = dimm->dimm_size & 0x7fffffff; + } t->data_width = 8 * (1 << (dimm->bus_width & 0x7)); t->total_width = t->data_width + 8 * ((dimm->bus_width & 0x18) >> 3); -- cgit v1.2.3