ACPI: ARM64: support for ACPI_TABLE_UPGRADE
authorJon Masters <jcm@redhat.com>
Mon, 20 Jun 2016 10:56:13 +0000 (13:56 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 21 Jun 2016 23:16:15 +0000 (01:16 +0200)
This patch adds support for ACPI_TABLE_UPGRADE for ARM64

To access initrd image we need to move initialization
of linear mapping a bit earlier.

The implementation of the feature acpi_table_upgrade()
(drivers/acpi/tables.c) works with initrd data represented as an array
in virtual memory.  It uses some library utility to find the redefined
tables in that array and iterates over it to copy the data to new
allocated memory.  So to access the initrd data via fixmap
we need to rewrite it considerably.

In x86 arch, kernel memory is already mapped by the time when
acpi_table_upgrade() and acpi_boot_table_init() are called so I
think that we can just move this mapping one function earlier too.

Signed-off-by: Jon Masters <jcm@redhat.com>
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
arch/arm64/Kconfig
arch/arm64/include/asm/acpi.h
arch/arm64/kernel/setup.c

index 5a0a691d4220a60aab7a1ef2251f8ba85ddffe2a..20d5a60530b19be8cfea62f604951957f3c8503f 100644 (file)
@@ -4,6 +4,7 @@ config ARM64
        select ACPI_GENERIC_GSI if ACPI
        select ACPI_REDUCED_HARDWARE_ONLY if ACPI
        select ARCH_HAS_DEVMEM_IS_ALLOWED
+       select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
        select ARCH_HAS_ELF_RANDOMIZE
        select ARCH_HAS_GCOV_PROFILE_ALL
index aee323b13802ad143e9774d2076a4b1c63731ece..c7aefc56dfdd338b7cee9cb9383c131e2eea7ef9 100644 (file)
@@ -113,4 +113,6 @@ static inline const char *acpi_get_enable_method(int cpu)
 pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr);
 #endif
 
+#define ACPI_TABLE_UPGRADE_MAX_PHYS MEMBLOCK_ALLOC_ACCESSIBLE
+
 #endif /*_ASM_ACPI_H*/
index 3279defabaa2904fda8d3a44cbbb491f85e44e5b..92f0e1e767cfe2fefbc84e174edddddc11333be8 100644 (file)
@@ -260,11 +260,13 @@ void __init setup_arch(char **cmdline_p)
        efi_init();
        arm64_memblock_init();
 
+       paging_init();
+
+       acpi_table_upgrade();
+
        /* Parse the ACPI tables for possible boot-time configuration */
        acpi_boot_table_init();
 
-       paging_init();
-
        if (acpi_disabled)
                unflatten_device_tree();