aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpu/riscv_cpu.c12
-rw-r--r--drivers/misc/qfw_smbios.c2
2 files changed, 13 insertions, 1 deletions
diff --git a/drivers/cpu/riscv_cpu.c b/drivers/cpu/riscv_cpu.c
index a9b253719f..5d1026b37d 100644
--- a/drivers/cpu/riscv_cpu.c
+++ b/drivers/cpu/riscv_cpu.c
@@ -11,6 +11,7 @@
#include <errno.h>
#include <log.h>
#include <asm/global_data.h>
+#include <asm/sbi.h>
#include <dm/device-internal.h>
#include <dm/lists.h>
#include <linux/bitops.h>
@@ -94,13 +95,24 @@ static int riscv_cpu_bind(struct udevice *dev)
struct cpu_plat *plat = dev_get_parent_plat(dev);
struct driver *drv;
int ret;
+ long mvendorid;
/* save the hart id */
plat->cpu_id = dev_read_addr(dev);
+ /* provide data for SMBIOS */
if (IS_ENABLED(CONFIG_64BIT))
plat->family = 0x201;
else
plat->family = 0x200;
+ if (CONFIG_IS_ENABLED(RISCV_SMODE)) {
+ /*
+ * For RISC-V CPUs the SMBIOS Processor ID field contains
+ * the Machine Vendor ID from CSR mvendorid.
+ */
+ ret = sbi_get_mvendorid(&mvendorid);
+ if (!ret)
+ plat->id[0] = mvendorid;
+ }
/* first examine the property in current cpu node */
ret = dev_read_u32(dev, "timebase-frequency", &plat->timebase_freq);
/* if not found, then look at the parent /cpus node */
diff --git a/drivers/misc/qfw_smbios.c b/drivers/misc/qfw_smbios.c
index a898cb4eea..c3e8c310d0 100644
--- a/drivers/misc/qfw_smbios.c
+++ b/drivers/misc/qfw_smbios.c
@@ -90,7 +90,7 @@ static int qfw_parse_smbios_anchor(struct udevice *dev,
entry->length = sizeof(struct smbios3_entry);
entry->major_ver = entry2->major_ver;
entry->minor_ver = entry2->minor_ver;
- entry->max_struct_size = entry2->struct_table_length;
+ entry->table_maximum_size = entry2->struct_table_length;
} else {
ret = -ENOENT;
goto out;