diff options
author | Yi Li <yi.li@linaro.org> | 2014-10-04 11:46:43 -0400 |
---|---|---|
committer | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2014-11-05 03:03:25 -0500 |
commit | d1ae8c0057921681ca489bba7efbfacbb60d0f28 (patch) | |
tree | bbc462d4e9fd5e166cbdc6580fb4e0cf053186ad /arch/arm64 | |
parent | fc43026278b23b3515cf8f909ec29df94b3ae1a2 (diff) |
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 <yi.li@linaro.org>
Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/Kconfig | 11 | ||||
-rw-r--r-- | arch/arm64/include/asm/dmi.h | 31 | ||||
-rw-r--r-- | arch/arm64/kernel/efi.c | 13 |
3 files changed, 55 insertions, 0 deletions
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 9532f8d5857e..2c3c2ca6f8bc 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -401,6 +401,17 @@ config EFI | |||
401 | allow the kernel to be booted as an EFI application. This | 401 | allow the kernel to be booted as an EFI application. This |
402 | is only useful on systems that have UEFI firmware. | 402 | is only useful on systems that have UEFI firmware. |
403 | 403 | ||
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 | |||
404 | endmenu | 415 | endmenu |
405 | 416 | ||
406 | menu "Userspace binary formats" | 417 | menu "Userspace binary formats" |
diff --git a/arch/arm64/include/asm/dmi.h b/arch/arm64/include/asm/dmi.h new file mode 100644 index 000000000000..69d37d87b159 --- /dev/null +++ b/arch/arm64/include/asm/dmi.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * arch/arm64/include/asm/dmi.h | ||
3 | * | ||
4 | * Copyright (C) 2013 Linaro Limited. | ||
5 | * Written by: Yi Li (yi.li@linaro.org) | ||
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 | ||
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 558572ef1ea3..9ae5e7918b8f 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c | |||
@@ -11,6 +11,7 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/dmi.h> | ||
14 | #include <linux/efi.h> | 15 | #include <linux/efi.h> |
15 | #include <linux/export.h> | 16 | #include <linux/export.h> |
16 | #include <linux/memblock.h> | 17 | #include <linux/memblock.h> |
@@ -469,3 +470,15 @@ err_unmap: | |||
469 | return -1; | 470 | return -1; |
470 | } | 471 | } |
471 | early_initcall(arm64_enter_virtual_mode); | 472 | 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); | ||