Skip to content

Commit d1ae8c0

Browse files
Yi LiArd Biesheuvel
authored andcommitted
arm64: dmi: Add SMBIOS/DMI support
SMBIOS is important for server hardware vendors. It implements a spec for providing descriptive information about the platform. Things like serial numbers, physical layout of the ports, build configuration data, and the like. Signed-off-by: Yi Li <[email protected]> Tested-by: Suravee Suthikulpanit <[email protected]> Tested-by: Leif Lindholm <[email protected]> Signed-off-by: Ard Biesheuvel <[email protected]>
1 parent fc43026 commit d1ae8c0

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

arch/arm64/Kconfig

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,17 @@ config EFI
401401
allow the kernel to be booted as an EFI application. This
402402
is only useful on systems that have UEFI firmware.
403403

404+
config DMI
405+
bool "Enable support for SMBIOS (DMI) tables"
406+
depends on EFI
407+
default y
408+
help
409+
This enables SMBIOS/DMI feature for systems.
410+
411+
This option is only useful on systems that have UEFI firmware.
412+
However, even with this option, the resultant kernel should
413+
continue to boot on existing non-UEFI platforms.
414+
404415
endmenu
405416

406417
menu "Userspace binary formats"

arch/arm64/include/asm/dmi.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* arch/arm64/include/asm/dmi.h
3+
*
4+
* Copyright (C) 2013 Linaro Limited.
5+
* Written by: Yi Li ([email protected])
6+
*
7+
* based on arch/ia64/include/asm/dmi.h
8+
*
9+
* This file is subject to the terms and conditions of the GNU General Public
10+
* License. See the file "COPYING" in the main directory of this archive
11+
* for more details.
12+
*/
13+
14+
#ifndef __ASM_DMI_H
15+
#define __ASM_DMI_H
16+
17+
#include <linux/io.h>
18+
#include <linux/slab.h>
19+
20+
/*
21+
* According to section 2.3.6 of the UEFI spec, the firmware should not
22+
* request a virtual mapping for configuration tables such as SMBIOS.
23+
* This means we have to map them before use.
24+
*/
25+
#define dmi_early_remap(x, l) ioremap_cache(x, l)
26+
#define dmi_early_unmap(x, l) iounmap(x)
27+
#define dmi_remap(x, l) ioremap_cache(x, l)
28+
#define dmi_unmap(x) iounmap(x)
29+
#define dmi_alloc(l) kzalloc(l, GFP_KERNEL)
30+
31+
#endif

arch/arm64/kernel/efi.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*
1212
*/
1313

14+
#include <linux/dmi.h>
1415
#include <linux/efi.h>
1516
#include <linux/export.h>
1617
#include <linux/memblock.h>
@@ -469,3 +470,15 @@ static int __init arm64_enter_virtual_mode(void)
469470
return -1;
470471
}
471472
early_initcall(arm64_enter_virtual_mode);
473+
474+
static int __init arm64_dmi_init(void)
475+
{
476+
/*
477+
* On arm64, DMI depends on UEFI, and dmi_scan_machine() needs to
478+
* be called early because dmi_id_init(), which is an arch_initcall
479+
* itself, depends on dmi_scan_machine() having been called already.
480+
*/
481+
dmi_scan_machine();
482+
return 0;
483+
}
484+
core_initcall(arm64_dmi_init);

0 commit comments

Comments
 (0)