aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/mmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mm/mmu.c')
-rw-r--r--arch/arm/mm/mmu.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index d4d082c5c2d4..4810a4c9ffce 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -21,6 +21,7 @@
21#include <asm/setup.h> 21#include <asm/setup.h>
22#include <asm/sizes.h> 22#include <asm/sizes.h>
23#include <asm/tlb.h> 23#include <asm/tlb.h>
24#include <asm/highmem.h>
24 25
25#include <asm/mach/arch.h> 26#include <asm/mach/arch.h>
26#include <asm/mach/map.h> 27#include <asm/mach/map.h>
@@ -895,6 +896,17 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
895 flush_cache_all(); 896 flush_cache_all();
896} 897}
897 898
899static void __init kmap_init(void)
900{
901#ifdef CONFIG_HIGHMEM
902 pmd_t *pmd = pmd_off_k(PKMAP_BASE);
903 pte_t *pte = alloc_bootmem_low_pages(2 * PTRS_PER_PTE * sizeof(pte_t));
904 BUG_ON(!pmd_none(*pmd) || !pte);
905 __pmd_populate(pmd, __pa(pte) | _PAGE_KERNEL_TABLE);
906 pkmap_page_table = pte + PTRS_PER_PTE;
907#endif
908}
909
898/* 910/*
899 * paging_init() sets up the page tables, initialises the zone memory 911 * paging_init() sets up the page tables, initialises the zone memory
900 * maps, and sets up the zero page, bad page and bad page tables. 912 * maps, and sets up the zero page, bad page and bad page tables.
@@ -908,6 +920,7 @@ void __init paging_init(struct machine_desc *mdesc)
908 prepare_page_table(); 920 prepare_page_table();
909 bootmem_init(); 921 bootmem_init();
910 devicemaps_init(mdesc); 922 devicemaps_init(mdesc);
923 kmap_init();
911 924
912 top_pmd = pmd_off_k(0xffff0000); 925 top_pmd = pmd_off_k(0xffff0000);
913 926