|
@@ -12,10 +12,12 @@
|
|
|
#ifndef _ASM_ACPI_H
|
|
|
#define _ASM_ACPI_H
|
|
|
|
|
|
+#include <linux/efi.h>
|
|
|
#include <linux/memblock.h>
|
|
|
#include <linux/psci.h>
|
|
|
|
|
|
#include <asm/cputype.h>
|
|
|
+#include <asm/io.h>
|
|
|
#include <asm/smp_plat.h>
|
|
|
#include <asm/tlbflush.h>
|
|
|
|
|
@@ -29,18 +31,22 @@
|
|
|
|
|
|
/* Basic configuration for ACPI */
|
|
|
#ifdef CONFIG_ACPI
|
|
|
+pgprot_t __acpi_get_mem_attribute(phys_addr_t addr);
|
|
|
+
|
|
|
/* ACPI table mapping after acpi_permanent_mmap is set */
|
|
|
static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys,
|
|
|
acpi_size size)
|
|
|
{
|
|
|
+ /* For normal memory we already have a cacheable mapping. */
|
|
|
+ if (memblock_is_map_memory(phys))
|
|
|
+ return (void __iomem *)__phys_to_virt(phys);
|
|
|
+
|
|
|
/*
|
|
|
- * EFI's reserve_regions() call adds memory with the WB attribute
|
|
|
- * to memblock via early_init_dt_add_memory_arch().
|
|
|
+ * We should still honor the memory's attribute here because
|
|
|
+ * crash dump kernel possibly excludes some ACPI (reclaim)
|
|
|
+ * regions from memblock list.
|
|
|
*/
|
|
|
- if (!memblock_is_memory(phys))
|
|
|
- return ioremap(phys, size);
|
|
|
-
|
|
|
- return ioremap_cache(phys, size);
|
|
|
+ return __ioremap(phys, size, __acpi_get_mem_attribute(phys));
|
|
|
}
|
|
|
#define acpi_os_ioremap acpi_os_ioremap
|
|
|
|
|
@@ -129,7 +135,10 @@ static inline const char *acpi_get_enable_method(int cpu)
|
|
|
* for compatibility.
|
|
|
*/
|
|
|
#define acpi_disable_cmcff 1
|
|
|
-pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr);
|
|
|
+static inline pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr)
|
|
|
+{
|
|
|
+ return __acpi_get_mem_attribute(addr);
|
|
|
+}
|
|
|
#endif /* CONFIG_ACPI_APEI */
|
|
|
|
|
|
#ifdef CONFIG_ACPI_NUMA
|