]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
smbios: provide type 4 RISC-V SMBIOS Processor ID
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 29 Jan 2024 11:46:05 +0000 (12:46 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 2 Feb 2024 18:57:16 +0000 (19:57 +0100)
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>
drivers/cpu/riscv_cpu.c

index a9b253719f7f45925dc0e4af82e6c798ca5e04bf..5d1026b37da9ce6df5a1ba39526db92687f9c406 100644 (file)
@@ -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 */