summaryrefslogtreecommitdiff
path: root/drivers/cpu
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2024-01-29 12:46:05 +0100
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2024-02-02 19:57:16 +0100
commit545e0e42b966751da48117820891356ccf47baf1 (patch)
treeeed824e83b68c5f4cd5a140a8234875be072756a /drivers/cpu
parent6ebf9136ec24c03f6ebeb6ec6d684ce55c2a4320 (diff)
downloadu-boot-545e0e42b966751da48117820891356ccf47baf1.tar.gz
u-boot-545e0e42b966751da48117820891356ccf47baf1.tar.bz2
u-boot-545e0e42b966751da48117820891356ccf47baf1.zip
smbios: provide type 4 RISC-V SMBIOS Processor ID
For RISC-V CPUs the SMBIOS Processor ID field contains the Machine Vendor ID from CSR mvendorid. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Diffstat (limited to 'drivers/cpu')
-rw-r--r--drivers/cpu/riscv_cpu.c12
1 files changed, 12 insertions, 0 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 */