arch/x86/smbios: Bump to version 3.0
Fill in the new fields introduced with version 3.0 and install the new entry point structure identified by _SM3_. Tested on Linux 5.6 using tianocore as payload: Still able to decode the tables without errors. Change-Id: Iba7a54e9de0b315f8072e6fd2880582355132a81 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43719 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
73030c8c54
commit
7a83582e77
|
@ -724,12 +724,17 @@ static int smbios_write_type4(unsigned long *current, int handle)
|
|||
if (leaf_b_threads == 0) {
|
||||
leaf_b_threads = 1;
|
||||
}
|
||||
t->core_count = leaf_b_cores / leaf_b_threads;
|
||||
t->core_count2 = leaf_b_cores / leaf_b_threads;
|
||||
t->core_count = t->core_count2 > 0xff ? 0xff : t->core_count2;
|
||||
t->thread_count2 = leaf_b_threads;
|
||||
} else {
|
||||
t->core_count = (res.ebx >> 16) & 0xff;
|
||||
t->core_count2 = t->core_count;
|
||||
t->thread_count2 = t->core_count2;
|
||||
}
|
||||
/* Assume we enable all the cores always, capped only by MAX_CPUS */
|
||||
t->core_enabled = MIN(t->core_count, CONFIG_MAX_CPUS);
|
||||
t->core_enabled2 = MIN(t->core_count2, CONFIG_MAX_CPUS);
|
||||
t->l1_cache_handle = 0xffff;
|
||||
t->l2_cache_handle = 0xffff;
|
||||
t->l3_cache_handle = 0xffff;
|
||||
|
@ -1313,6 +1318,7 @@ static int smbios_walk_device_tree(struct device *tree, int *handle,
|
|||
unsigned long smbios_write_tables(unsigned long current)
|
||||
{
|
||||
struct smbios_entry *se;
|
||||
struct smbios_entry30 *se3;
|
||||
unsigned long tables;
|
||||
int len = 0;
|
||||
int max_struct_size = 0;
|
||||
|
@ -1325,6 +1331,10 @@ unsigned long smbios_write_tables(unsigned long current)
|
|||
current += sizeof(struct smbios_entry);
|
||||
current = ALIGN_UP(current, 16);
|
||||
|
||||
se3 = (struct smbios_entry30 *)current;
|
||||
current += sizeof(struct smbios_entry30);
|
||||
current = ALIGN_UP(current, 16);
|
||||
|
||||
tables = current;
|
||||
update_max(len, max_struct_size, smbios_write_type0(¤t,
|
||||
handle++));
|
||||
|
@ -1359,11 +1369,12 @@ unsigned long smbios_write_tables(unsigned long current)
|
|||
update_max(len, max_struct_size, smbios_write_type127(¤t,
|
||||
handle++));
|
||||
|
||||
/* Install SMBIOS 2.1 entry point */
|
||||
memset(se, 0, sizeof(struct smbios_entry));
|
||||
memcpy(se->anchor, "_SM_", 4);
|
||||
se->length = sizeof(struct smbios_entry);
|
||||
se->major_version = 2;
|
||||
se->minor_version = 8;
|
||||
se->major_version = 3;
|
||||
se->minor_version = 0;
|
||||
se->max_struct_size = max_struct_size;
|
||||
se->struct_count = handle;
|
||||
memcpy(se->intermediate_anchor_string, "_DMI_", 5);
|
||||
|
@ -1375,5 +1386,18 @@ unsigned long smbios_write_tables(unsigned long current)
|
|||
sizeof(struct smbios_entry)
|
||||
- 0x10);
|
||||
se->checksum = smbios_checksum((u8 *)se, sizeof(struct smbios_entry));
|
||||
|
||||
/* Install SMBIOS 3.0 entry point */
|
||||
memset(se3, 0, sizeof(struct smbios_entry30));
|
||||
memcpy(se3->anchor, "_SM3_", 5);
|
||||
se3->length = sizeof(struct smbios_entry30);
|
||||
se3->major_version = 3;
|
||||
se3->minor_version = 0;
|
||||
|
||||
se3->struct_table_address = (u64)tables;
|
||||
se3->struct_table_length = len;
|
||||
|
||||
se3->checksum = smbios_checksum((u8 *)se3, sizeof(struct smbios_entry30));
|
||||
|
||||
return current;
|
||||
}
|
||||
|
|
|
@ -247,6 +247,19 @@ struct smbios_entry {
|
|||
u8 smbios_bcd_revision;
|
||||
} __packed;
|
||||
|
||||
struct smbios_entry30 {
|
||||
u8 anchor[5];
|
||||
u8 checksum;
|
||||
u8 length;
|
||||
u8 major_version;
|
||||
u8 minor_version;
|
||||
u8 smbios_doc_rev;
|
||||
u8 entry_point_rev;
|
||||
u8 reserved;
|
||||
u32 struct_table_length;
|
||||
u64 struct_table_address;
|
||||
} __packed;
|
||||
|
||||
struct smbios_type0 {
|
||||
u8 type;
|
||||
u8 length;
|
||||
|
@ -402,6 +415,9 @@ struct smbios_type4 {
|
|||
u8 thread_count;
|
||||
u16 processor_characteristics;
|
||||
u16 processor_family2;
|
||||
u16 core_count2;
|
||||
u16 core_enabled2;
|
||||
u16 thread_count2;
|
||||
u8 eos[2];
|
||||
} __packed;
|
||||
|
||||
|
|
Loading…
Reference in New Issue