]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
riscv: dmi: Add SMBIOS/DMI support
authorHaibo Xu <haibo1.xu@intel.com>
Thu, 13 Jun 2024 06:55:07 +0000 (14:55 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 26 Jun 2024 15:02:33 +0000 (08:02 -0700)
Enable the dmi driver for riscv which would allow access the
SMBIOS info through some userspace file(/sys/firmware/dmi/*).

The change was based on that of arm64 and has been verified
by dmidecode tool.

Signed-off-by: Haibo Xu <haibo1.xu@intel.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Link: https://lore.kernel.org/r/20240613065507.287577-1-haibo1.xu@intel.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig
arch/riscv/include/asm/dmi.h [new file with mode: 0644]
drivers/firmware/efi/riscv-runtime.c

index b94176e25be1810e749cb94686b9c536fd9a2bb0..0a9f731bd1dfba2939e2065f156c4edca0fb70dc 100644 (file)
@@ -967,6 +967,17 @@ config EFI
          allow the kernel to be booted as an EFI application. This
          is only useful on systems that have UEFI firmware.
 
+config DMI
+       bool "Enable support for SMBIOS (DMI) tables"
+       depends on EFI
+       default y
+       help
+         This enables SMBIOS/DMI feature for systems.
+
+         This option is only useful on systems that have UEFI firmware.
+         However, even with this option, the resultant kernel should
+         continue to boot on existing non-UEFI platforms.
+
 config CC_HAVE_STACKPROTECTOR_TLS
        def_bool $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=0)
 
diff --git a/arch/riscv/include/asm/dmi.h b/arch/riscv/include/asm/dmi.h
new file mode 100644 (file)
index 0000000..ca7cce5
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2024 Intel Corporation
+ *
+ * based on arch/arm64/include/asm/dmi.h
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef __ASM_DMI_H
+#define __ASM_DMI_H
+
+#include <linux/io.h>
+#include <linux/slab.h>
+
+#define dmi_early_remap(x, l)          memremap(x, l, MEMREMAP_WB)
+#define dmi_early_unmap(x, l)          memunmap(x)
+#define dmi_remap(x, l)                        memremap(x, l, MEMREMAP_WB)
+#define dmi_unmap(x)                   memunmap(x)
+#define dmi_alloc(l)                   kzalloc(l, GFP_KERNEL)
+
+#endif
index 01f0f90ea4183119b0a4eedf82a3fe81f1b2f480..fa71cd898120302c8e8787f1032c9f60733b02c6 100644 (file)
@@ -152,3 +152,16 @@ void arch_efi_call_virt_teardown(void)
 {
        efi_virtmap_unload();
 }
+
+static int __init riscv_dmi_init(void)
+{
+       /*
+        * On riscv, DMI depends on UEFI, and dmi_setup() needs to
+        * be called early because dmi_id_init(), which is an arch_initcall
+        * itself, depends on dmi_scan_machine() having been called already.
+        */
+       dmi_setup();
+
+       return 0;
+}
+core_initcall(riscv_dmi_init);