Commit f84d0275 authored by Mark Salter's avatar Mark Salter Committed by Matt Fleming

arm64: add EFI runtime services

This patch adds EFI runtime support for arm64. This runtime support allows
the kernel to access various EFI runtime services provided by EFI firmware.
Things like reboot, real time clock, EFI boot variables, and others.

This functionality is supported for little endian kernels only. The UEFI
firmware standard specifies that the firmware be little endian. A future
patch is expected to add support for big endian kernels running with
little endian firmware.
Signed-off-by: default avatarMark Salter <msalter@redhat.com>
[ Remove unnecessary cache/tlb maintenance. ]
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarLeif Lindholm <leif.lindholm@linaro.org>
Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
parent 263b4a30
...@@ -280,6 +280,19 @@ config CMDLINE_FORCE ...@@ -280,6 +280,19 @@ config CMDLINE_FORCE
This is useful if you cannot or don't want to change the This is useful if you cannot or don't want to change the
command-line options your boot loader passes to the kernel. command-line options your boot loader passes to the kernel.
config EFI
bool "UEFI runtime support"
depends on OF && !CPU_BIG_ENDIAN
select LIBFDT
select UCS2_STRING
select EFI_PARAMS_FROM_FDT
default y
help
This option provides support for runtime services provided
by UEFI firmware (such as non-volatile variables, realtime
clock, and platform reset). This is only useful on systems
that have UEFI firmware.
endmenu endmenu
menu "Userspace binary formats" menu "Userspace binary formats"
...@@ -333,6 +346,8 @@ source "net/Kconfig" ...@@ -333,6 +346,8 @@ source "net/Kconfig"
source "drivers/Kconfig" source "drivers/Kconfig"
source "drivers/firmware/Kconfig"
source "fs/Kconfig" source "fs/Kconfig"
source "arch/arm64/kvm/Kconfig" source "arch/arm64/kvm/Kconfig"
......
#ifndef _ASM_EFI_H
#define _ASM_EFI_H
#include <asm/io.h>
#ifdef CONFIG_EFI
extern void efi_init(void);
extern void efi_idmap_init(void);
#else
#define efi_init()
#define efi_idmap_init()
#endif
#endif /* _ASM_EFI_H */
...@@ -22,6 +22,7 @@ arm64-obj-$(CONFIG_EARLY_PRINTK) += early_printk.o ...@@ -22,6 +22,7 @@ arm64-obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
arm64-obj-$(CONFIG_ARM64_CPU_SUSPEND) += sleep.o suspend.o arm64-obj-$(CONFIG_ARM64_CPU_SUSPEND) += sleep.o suspend.o
arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o
arm64-obj-$(CONFIG_KGDB) += kgdb.o arm64-obj-$(CONFIG_KGDB) += kgdb.o
arm64-obj-$(CONFIG_EFI) += efi.o
obj-y += $(arm64-obj-y) vdso/ obj-y += $(arm64-obj-y) vdso/
obj-m += $(arm64-obj-m) obj-m += $(arm64-obj-m)
......
This diff is collapsed.
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/of_fdt.h> #include <linux/of_fdt.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/efi.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include <asm/cputype.h> #include <asm/cputype.h>
...@@ -55,6 +56,7 @@ ...@@ -55,6 +56,7 @@
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/memblock.h> #include <asm/memblock.h>
#include <asm/psci.h> #include <asm/psci.h>
#include <asm/efi.h>
unsigned int processor_id; unsigned int processor_id;
EXPORT_SYMBOL(processor_id); EXPORT_SYMBOL(processor_id);
...@@ -366,11 +368,14 @@ void __init setup_arch(char **cmdline_p) ...@@ -366,11 +368,14 @@ void __init setup_arch(char **cmdline_p)
parse_early_param(); parse_early_param();
efi_init();
arm64_memblock_init(); arm64_memblock_init();
paging_init(); paging_init();
request_standard_resources(); request_standard_resources();
efi_idmap_init();
unflatten_device_tree(); unflatten_device_tree();
psci_init(); psci_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment