ARM: mm: Make virt_to_pfn() a static inline
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 2 Jun 2022 08:18:32 +0000 (10:18 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 29 May 2023 09:27:08 +0000 (11:27 +0200)
Making virt_to_pfn() a static inline taking a strongly typed
(const void *) makes the contract of a passing a pointer of that
type to the function explicit and exposes any misuse of the
macro virt_to_pfn() acting polymorphic and accepting many types
such as (void *), (unitptr_t) or (unsigned long) as arguments
without warnings.

Doing this is a bit intrusive: virt_to_pfn() requires
PHYS_PFN_OFFSET and PAGE_SHIFT to be defined, and this is defined in
<asm/page.h>, so this must be included *before* <asm/memory.h>.

The use of macros were obscuring the unclear inclusion order here,
as the macros would eventually be resolved, but a static inline
like this cannot be compiled with unresolved macros.

The naive solution to include <asm/page.h> at the top of
<asm/memory.h> does not work, because <asm/memory.h> sometimes
includes <asm/page.h> at the end of itself, which would create a
confusing inclusion loop. So instead, take the approach to always
unconditionally include <asm/page.h> at the end of <asm/memory.h>

arch/arm uses <asm/memory.h> explicitly in a lot of places,
however it turns out that if we just unconditionally include
<asm/memory.h> into <asm/page.h> and switch all inclusions of
<asm/memory.h> to <asm/page.h> instead, we enforce the right
order and <asm/memory.h> will always have access to the
definitions.

Put an inclusion guard in place making it impossible to include
<asm/memory.h> explicitly.

Link: https://lore.kernel.org/linux-mm/20220701160004.2ffff4e5ab59a55499f4c736@linux-foundation.org/
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
46 files changed:
arch/arm/common/sharpsl_param.c
arch/arm/include/asm/delay.h
arch/arm/include/asm/io.h
arch/arm/include/asm/memory.h
arch/arm/include/asm/page.h
arch/arm/include/asm/pgtable.h
arch/arm/include/asm/proc-fns.h
arch/arm/include/asm/sparsemem.h
arch/arm/include/asm/uaccess-asm.h
arch/arm/include/asm/uaccess.h
arch/arm/kernel/asm-offsets.c
arch/arm/kernel/entry-armv.S
arch/arm/kernel/entry-common.S
arch/arm/kernel/entry-v7m.S
arch/arm/kernel/head-nommu.S
arch/arm/kernel/head.S
arch/arm/kernel/hibernate.c
arch/arm/kernel/suspend.c
arch/arm/kernel/tcm.c
arch/arm/kernel/vmlinux-xip.lds.S
arch/arm/kernel/vmlinux.lds.S
arch/arm/mach-berlin/platsmp.c
arch/arm/mach-keystone/keystone.c
arch/arm/mach-omap2/sleep33xx.S
arch/arm/mach-omap2/sleep43xx.S
arch/arm/mach-omap2/sleep44xx.S
arch/arm/mach-pxa/gumstix.c
arch/arm/mach-rockchip/sleep.S
arch/arm/mach-sa1100/pm.c
arch/arm/mach-shmobile/headsmp-scu.S
arch/arm/mach-shmobile/headsmp.S
arch/arm/mach-socfpga/headsmp.S
arch/arm/mach-spear/spear.h
arch/arm/mm/cache-fa.S
arch/arm/mm/cache-v4wb.S
arch/arm/mm/dma-mapping.c
arch/arm/mm/dump.c
arch/arm/mm/init.c
arch/arm/mm/kasan_init.c
arch/arm/mm/mmu.c
arch/arm/mm/physaddr.c
arch/arm/mm/pmsa-v8.c
arch/arm/mm/proc-v7.S
arch/arm/mm/proc-v7m.S
arch/arm/mm/pv-fixup-asm.S
drivers/memory/ti-emif-sram-pm.S

index 6237ede2f0c70010c6bc5fd9c3688365a602a787..1ca26c063f800b0511e9ca25431c45e3c15dfb15 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/string.h>
 #include <asm/mach/sharpsl_param.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 /*
  * Certain hardware parameters determined at the time of device manufacture,
index 4f80b72372b4160594366199b53f5261fc6d3f14..1d069e558d8debcbb261f490e78edc1726e5f3d4 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef __ASM_ARM_DELAY_H
 #define __ASM_ARM_DELAY_H
 
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/param.h> /* HZ */
 
 /*
index 7fcdc785366c54ce0720c9e7271dbb15edb529da..56b08ed6cc3bcb30f472a09d13f4952f960dc013 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/string.h>
 #include <linux/types.h>
 #include <asm/byteorder.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm-generic/pci_iomap.h>
 
 /*
index 62e9df024445724ab6a5e0cc83aba4628fd3fbea..ef2aa79ece5ad53472d64961a4c5b28eb4a9f84a 100644 (file)
@@ -5,11 +5,16 @@
  *  Copyright (C) 2000-2002 Russell King
  *  modification for nommu, Hyok S. Choi, 2004
  *
- *  Note: this file should not be included by non-asm/.h files
+ *  Note: this file should not be included explicitly, include <asm/page.h>
+ *  to get access to these definitions.
  */
 #ifndef __ASM_ARM_MEMORY_H
 #define __ASM_ARM_MEMORY_H
 
+#ifndef _ASMARM_PAGE_H
+#error "Do not include <asm/memory.h> directly"
+#endif
+
 #include <linux/compiler.h>
 #include <linux/const.h>
 #include <linux/types.h>
@@ -288,10 +293,12 @@ static inline unsigned long __phys_to_virt(phys_addr_t x)
 
 #endif
 
-#define virt_to_pfn(kaddr) \
-       ((((unsigned long)(kaddr) - PAGE_OFFSET) >> PAGE_SHIFT) + \
-        PHYS_PFN_OFFSET)
-
+static inline unsigned long virt_to_pfn(const void *p)
+{
+       unsigned long kaddr = (unsigned long)p;
+       return (((kaddr - PAGE_OFFSET) >> PAGE_SHIFT) +
+               PHYS_PFN_OFFSET);
+}
 #define __pa_symbol_nodebug(x) __virt_to_phys_nodebug((x))
 
 #ifdef CONFIG_DEBUG_VIRTUAL
index 74bb5947b387ab1491b37296676f58ee4d3b2404..4e44f970737684482588dd9b51aacdc5b2d5bbf3 100644 (file)
@@ -161,10 +161,10 @@ extern int pfn_valid(unsigned long);
 #define pfn_valid pfn_valid
 #endif
 
-#include <asm/memory.h>
-
 #endif /* !__ASSEMBLY__ */
 
+#include <asm/memory.h>
+
 #define VM_DATA_DEFAULT_FLAGS  VM_DATA_FLAGS_TSK_EXEC
 
 #include <asm-generic/getorder.h>
index a58ccbb406adf23722e5ae430009745f0338c49a..34662a9d4cabf78270734a91337c9b02de8ea09d 100644 (file)
@@ -27,7 +27,7 @@ extern struct page *empty_zero_page;
 #else
 
 #include <asm-generic/pgtable-nopud.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/pgtable-hwdef.h>
 
 
index c82f7a29ec4a6ebab3f1203028bea92765b09e21..280396483f5dd845fc25b3a772062ab37000faef 100644 (file)
@@ -147,8 +147,6 @@ static inline void init_proc_vtable(const struct processor *p)
 
 extern void cpu_resume(void);
 
-#include <asm/memory.h>
-
 #ifdef CONFIG_MMU
 
 #define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm)
index d362233856a5baaa4a3f2b063bd529141917802b..421e3415338ac26c7a4cf81acc34299c4f772951 100644 (file)
@@ -2,7 +2,7 @@
 #ifndef ASMARM_SPARSEMEM_H
 #define ASMARM_SPARSEMEM_H
 
-#include <asm/memory.h>
+#include <asm/page.h>
 
 /*
  * Two definitions are required for sparsemem:
index 6451a433912c61fc380e985771d8a12d9e288e51..65da32e1f1c15d87ca51db4df4679275dd89c87d 100644 (file)
@@ -5,7 +5,7 @@
 
 #include <asm/asm-offsets.h>
 #include <asm/domain.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/thread_info.h>
 
        .macro  csdb
index 2fcbec9c306cfb6b379a52e02568c40cf7b0a2a4..bb5c8182311774469a4d6d64a6b2910239f34b31 100644 (file)
@@ -9,7 +9,7 @@
  * User space memory access functions
  */
 #include <linux/string.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/domain.h>
 #include <asm/unaligned.h>
 #include <asm/unified.h>
index 38121c59cbc26cdd51afc30e3593b909e3890c18..6a80d4be743b4f9d95d3b29e9c36f5ef65c863b3 100644 (file)
@@ -17,7 +17,7 @@
 #include <asm/glue-pf.h>
 #include <asm/mach/arch.h>
 #include <asm/thread_info.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/mpu.h>
 #include <asm/procinfo.h>
 #include <asm/suspend.h>
index c39303e5c23470e6a37a91185193b8964794a628..112fd6cd3f26b02a4fdf4521b512989b72289c89 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/init.h>
 
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/glue-df.h>
 #include <asm/glue-pf.h>
 #include <asm/vfpmacros.h>
index 03d4c5578c5c98481539afb942565f7af0c0859f..bcc4c9ec3aa4ecdfb8027f55d87e1346db74705e 100644 (file)
@@ -9,7 +9,7 @@
 #include <asm/unistd.h>
 #include <asm/ftrace.h>
 #include <asm/unwind.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #ifdef CONFIG_AEABI
 #include <asm/unistd-oabi.h>
 #endif
index de8a60363c8597769d0d3b5d8bbe28208c724bdd..52bacf07ba16da2534ae40e83d1fa4ace6b0ec6f 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Low-level vector interface routines for the ARMv7-M architecture
  */
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/glue.h>
 #include <asm/thread_notify.h>
 #include <asm/v7m.h>
index 950bef83339f5e5bcde33333b2f081a546f98297..b9d6818f1ee164e1c872ab2984fd6d26efa9175a 100644 (file)
 #include <asm/assembler.h>
 #include <asm/ptrace.h>
 #include <asm/asm-offsets.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/cp15.h>
 #include <asm/thread_info.h>
 #include <asm/v7m.h>
 #include <asm/mpu.h>
-#include <asm/page.h>
 
 /*
  * Kernel startup entry point.
index 656991055bc17bc422e4084e990847b27d6cd324..1ec35f065617e4c0dabfe7ff0b915ac6985e638a 100644 (file)
@@ -17,7 +17,7 @@
 #include <asm/domain.h>
 #include <asm/ptrace.h>
 #include <asm/asm-offsets.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/thread_info.h>
 
 #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
index 2373020af96588ba0f54c5fca3f5d302a0cacb3f..38a90a3d12b2cfcc1b96b8999950f9a8f0f244fb 100644 (file)
@@ -19,7 +19,7 @@
 #include <asm/system_misc.h>
 #include <asm/idmap.h>
 #include <asm/suspend.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/sections.h>
 #include "reboot.h"
 
index 43f0a3ebf3909d6c85daa059cdd7e1acbb2a50bc..c3ec3861dd0792a5ad18ac3875ffcfedefa2b8ec 100644 (file)
@@ -8,7 +8,7 @@
 #include <asm/bugs.h>
 #include <asm/cacheflush.h>
 #include <asm/idmap.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/smp_plat.h>
 #include <asm/suspend.h>
 #include <asm/tlbflush.h>
index d3a85f01b328648b9ed39156841ab2b5da52bebb..f59927bcfbce31d8c5604821e0e4b187792bb046 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/string.h> /* memcpy */
 #include <asm/cputype.h>
 #include <asm/mach/map.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/system_info.h>
 #include <asm/traps.h>
 #include <asm/tcm.h>
index 76678732c60da42e02718cc2a21b878a472a0265..c16d196b5aad3e159c160295fd21c75c3cb7055b 100644 (file)
@@ -12,9 +12,8 @@
 #include <asm/vmlinux.lds.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
-#include <asm/memory.h>
-#include <asm/mpu.h>
 #include <asm/page.h>
+#include <asm/mpu.h>
 
 OUTPUT_ARCH(arm)
 ENTRY(stext)
index aa12b65a7fd6a8cc60463e9beec35698397daeee..bd9127c4b451015bb67b64cc273ff10ebb68a398 100644 (file)
@@ -12,9 +12,8 @@
 #include <asm/vmlinux.lds.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
-#include <asm/memory.h>
-#include <asm/mpu.h>
 #include <asm/page.h>
+#include <asm/mpu.h>
 
 OUTPUT_ARCH(arm)
 ENTRY(stext)
index 593fc4a69d8442527b222ded1ffedcd760dda670..ed94758d30ff9ae5628cbce7bdc7b58edd1d7512 100644 (file)
@@ -12,7 +12,7 @@
 
 #include <asm/cacheflush.h>
 #include <asm/cp15.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/smp_plat.h>
 #include <asm/smp_scu.h>
 
index aa352c2de3138974d9f359ba7c9fd15fb3c90366..68039aad3014e26972ed07ebc43ebb7e6709f3b7 100644 (file)
@@ -18,7 +18,7 @@
 #include <asm/mach/map.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/time.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #include "memory.h"
 
index ac3d0b363c511330775de8498ad0dd13be181dee..3bfd8b5e03ed6b2ab065642c8f3df05ffbfe9c40 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/platform_data/pm33xx.h>
 #include <linux/ti-emif-sram.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #include "iomap.h"
 #include "cm33xx.h"
index 832c913279455855b3ef9441f0c8b70880bee99e..ec0972a48f08d4a6ffe81840eb068bb35dce8d4e 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/platform_data/pm33xx.h>
 #include <asm/assembler.h>
 #include <asm/hardware/cache-l2x0.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #include "cm33xx.h"
 #include "common.h"
index f60f6a9aed7351532fbe0116a0fa7025e20dc367..f09c9197808b1640c928e34a1edd6a977404f945 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/smp_scu.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/hardware/cache-l2x0.h>
 
 #include "omap-secure.h"
index 72b08a9bf0fd2a70962c4e943d3acfed851567a5..ebeee82e649ec3420e6437bb32f177c1e7ba176f 100644 (file)
@@ -26,7 +26,7 @@
 #include <linux/clk.h>
 
 #include <asm/setup.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/mach-types.h>
 #include <asm/irq.h>
 #include <linux/sizes.h>
index 3eca3922c944576c9c6aae93cea3a94b24055702..38b6c5186c3c63c2e48370d714771edabdd50d1b 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <linux/linkage.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 .data
 /*
index 9a7079f565bd394c4ae1436e8a2b14cd52acba34..9cf5d917bb9243ee2df6ee6a4994911e12631450 100644 (file)
@@ -29,7 +29,7 @@
 #include <linux/time.h>
 
 #include <mach/hardware.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/suspend.h>
 #include <asm/mach/time.h>
 
index d0234296ae622b5f1745d9be7002d4705c3e4913..e892ee794d649559cc39d4634f871bd464148773 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <linux/linkage.h>
 #include <linux/init.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 /*
  * Boot code for secondary CPUs.
index 9466ae61f56abd17726098143c4019789da1b201..a956b489b6ea12caeb667b9531c512b334319352 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/linkage.h>
 #include <linux/threads.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #define SCTLR_MMU      0x01
 #define BOOTROM_ADDRESS        0xE6340000
index 54f1844eac031bd165484daec502040fee2a992a..f7e91a772428c8416f37646542754b93a367afcc 100644 (file)
@@ -6,7 +6,7 @@
  */
 #include <linux/linkage.h>
 #include <linux/init.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/assembler.h>
 
        .arch   armv7-a
index 432efd407c7633640d7ef24a21fc494be7e843fb..f23eaf1e522f491dc75560f11aa9aca5382a8210 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef __MACH_SPEAR_H
 #define __MACH_SPEAR_H
 
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #if defined(CONFIG_ARCH_SPEAR3XX) || defined (CONFIG_ARCH_SPEAR6XX)
 
index 3a464d1649b4b25b8e718be84d1d42d7093646e7..71c64e92deada9c392431c70661aaa2dbd37897f 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/init.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
 #include <asm/page.h>
 
 #include "proc-macros.S"
index 905ac2fa2b1ea27b918f1d3c06960425403ac8fb..ad382cee0fdbd016b7c8a6bfb8dd81fb21cc3dc2 100644 (file)
@@ -7,7 +7,6 @@
 #include <linux/linkage.h>
 #include <linux/init.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
 #include <asm/page.h>
 #include "proc-macros.S"
 
index b4a33358d2e9c8c09c55cfe05c46673aa5cc23e7..0549bee68a6724dd307fa584f925828a9bdbc737 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/sizes.h>
 #include <linux/cma.h>
 
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/highmem.h>
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
index 059eb4cdc9c28b8f0d5f07a8b8c8b60700fbc8a1..a9381095ab3662cc6f2e7fdcbedb387c12efeed2 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <asm/domain.h>
 #include <asm/fixmap.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/ptdump.h>
 
 static struct addr_marker address_markers[] = {
index ce64bdb55a16bc8d5266af40e9c155b8c2ef3569..a42e4cd11db2949875814e23cb21e8a3203ace60 100644 (file)
@@ -26,7 +26,7 @@
 #include <asm/cp15.h>
 #include <asm/mach-types.h>
 #include <asm/memblock.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/prom.h>
 #include <asm/sections.h>
 #include <asm/setup.h>
index 46d9f4a622cbc4c3822a7812cc106462f3e0fa4f..24d71b5db62de43bac5639a325b26fbba16f3f33 100644 (file)
@@ -17,7 +17,6 @@
 #include <asm/cputype.h>
 #include <asm/highmem.h>
 #include <asm/mach/map.h>
-#include <asm/memory.h>
 #include <asm/page.h>
 #include <asm/pgalloc.h>
 #include <asm/procinfo.h>
index 463fc2a8448f0a28725f3f26bf098fa8c504de0b..22292cf3381c151d489912acbc871aae0ea608ee 100644 (file)
@@ -26,7 +26,7 @@
 #include <asm/system_info.h>
 #include <asm/traps.h>
 #include <asm/procinfo.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/pgalloc.h>
 #include <asm/kasan_def.h>
 
index cf75819e4c137618cfe1c5c18ef91e7ede6b98bb..3f263c840ebc462e13c34d33be0161e7a473173d 100644 (file)
@@ -6,7 +6,7 @@
 #include <linux/mm.h>
 
 #include <asm/sections.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/fixmap.h>
 #include <asm/dma.h>
 
index 8359748a19a11a6a206c59facacc0378704c6cc4..28cdc5468406c447872da251f57f78a224643e34 100644 (file)
@@ -11,7 +11,7 @@
 #include <asm/cputype.h>
 #include <asm/mpu.h>
 
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/sections.h>
 
 #include "mm.h"
index 6b4ef9539b68384d618029a6f517f494cf03b635..193c7aeb670391ff27b764d9667baa1ffa1e4992 100644 (file)
@@ -14,7 +14,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/hwcap.h>
 #include <asm/pgtable-hwdef.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #include "proc-macros.S"
 
index 335144d50134840887d7dcebdd301bd109a5c3af..d65a12f851a978f573b4fcf09310332553d0def3 100644 (file)
@@ -9,7 +9,7 @@
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 #include <asm/v7m.h>
 #include "proc-macros.S"
 
index f8e11f7c78807d3dbdfc1d5738a76b995ee53a52..1d9f52c71ad0dfcab86c94a427f072e6f6c3ea9c 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/pgtable.h>
 #include <asm/asm-offsets.h>
 #include <asm/cp15.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
        .section ".idmap.text", "ax"
 
index d60a8cfd63f35b13ffe775a367abd648a050fe4e..7756b397124428e66184bc5466dc1107ac0b3c3c 100644 (file)
@@ -8,7 +8,7 @@
 
 #include <linux/linkage.h>
 #include <asm/assembler.h>
-#include <asm/memory.h>
+#include <asm/page.h>
 
 #include "emif.h"
 #include "ti-emif-asm-offsets.h"