summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Viard de Galbert <jviarddegalbert@online.net>2018-01-24 11:04:46 +0100
committerMartin Roth <martinroth@google.com>2018-01-26 17:27:51 +0000
commit9989171401175e9a701782bd08858b87c99183bc (patch)
treea15c9f5d1e8568fc8b38d98a50efd81a76b1092f
parentefea957ed68b1e3f345b1bc8d1dc4cac30824325 (diff)
smbios: handle DIMM of 32G or more
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 <jviarddegalbert@online.net> Reviewed-on: https://review.coreboot.org/23396 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r--src/arch/x86/smbios.c7
1 files changed, 6 insertions, 1 deletions
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);