summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTim Chu <Tim.Chu@quantatw.com>2021-01-22 01:10:45 -0800
committerPatrick Georgi <pgeorgi@google.com>2021-01-28 09:14:32 +0000
commit1ee8ddc484bf87b99d4ba80f6d4fb99ee043780e (patch)
treeffd8d387c84b4ed603b30ecbee73c4e7e1db41fc /src
parent7435e254d401e2b3bc78756f65e3d0f1b2ce61e2 (diff)
arch/x86/smbios: Update SMBIOS type 16 Extended Maximum Capacity
Update Extended Maximum Capacity field in SMBIOS type 16 so that maximum dimm size can be over 2TB. Tested=Execute "dmidecode -t 16" to check maximum capacity is over 2TB. Signed-off-by: Tim Chu <Tim.Chu@quantatw.com> Change-Id: I61901c815f9d0daae102e5077a116c0de87240ef Reviewed-on: https://review.coreboot.org/c/coreboot/+/49828 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86/smbios.c9
-rw-r--r--src/include/smbios.h2
2 files changed, 10 insertions, 1 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index 87714c0abe..b3e1c138f8 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -1028,6 +1028,7 @@ static int smbios_write_type16(unsigned long *current, int *handle)
int len;
int i;
+ uint64_t max_capacity;
struct memory_info *meminfo;
meminfo = cbmem_find(CBMEM_ID_MEMINFO);
@@ -1057,7 +1058,13 @@ static int smbios_write_type16(unsigned long *current, int *handle)
/* no error information handle available */
t->memory_error_information_handle = 0xFFFE;
- t->maximum_capacity = meminfo->max_capacity_mib * (MiB / KiB);
+ max_capacity = meminfo->max_capacity_mib;
+ if (max_capacity * (MiB / KiB) < SMBIOS_USE_EXTENDED_MAX_CAPACITY)
+ t->maximum_capacity = max_capacity * (MiB / KiB);
+ else {
+ t->maximum_capacity = SMBIOS_USE_EXTENDED_MAX_CAPACITY;
+ t->extended_maximum_capacity = max_capacity * MiB;
+ }
t->number_of_memory_devices = meminfo->number_of_devices;
len += smbios_string_table_len(t->eos);
diff --git a/src/include/smbios.h b/src/include/smbios.h
index d8ac4caff2..2f63aac6ab 100644
--- a/src/include/smbios.h
+++ b/src/include/smbios.h
@@ -829,6 +829,8 @@ enum {
SMBIOS_EVENTLOG_STATUS_FULL = 2, /* Bit 1 */
};
+#define SMBIOS_USE_EXTENDED_MAX_CAPACITY (1 << 31)
+
struct smbios_type16 {
u8 type;
u8 length;