aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/include/asm/fixmap.h2
-rw-r--r--arch/arm/kernel/setup.c4
-rw-r--r--arch/arm/mm/mmu.c16
3 files changed, 16 insertions, 6 deletions
diff --git a/arch/arm/include/asm/fixmap.h b/arch/arm/include/asm/fixmap.h
index 5c17d2dec777..8f967d1373f6 100644
--- a/arch/arm/include/asm/fixmap.h
+++ b/arch/arm/include/asm/fixmap.h
@@ -41,7 +41,7 @@ static const enum fixed_addresses __end_of_fixed_addresses =
41 41
42#define FIXMAP_PAGE_COMMON (L_PTE_YOUNG | L_PTE_PRESENT | L_PTE_XN | L_PTE_DIRTY) 42#define FIXMAP_PAGE_COMMON (L_PTE_YOUNG | L_PTE_PRESENT | L_PTE_XN | L_PTE_DIRTY)
43 43
44#define FIXMAP_PAGE_NORMAL (FIXMAP_PAGE_COMMON | L_PTE_MT_WRITEBACK) 44#define FIXMAP_PAGE_NORMAL (pgprot_kernel | L_PTE_XN)
45#define FIXMAP_PAGE_RO (FIXMAP_PAGE_NORMAL | L_PTE_RDONLY) 45#define FIXMAP_PAGE_RO (FIXMAP_PAGE_NORMAL | L_PTE_RDONLY)
46 46
47/* Used by set_fixmap_(io|nocache), both meant for mapping a device */ 47/* Used by set_fixmap_(io|nocache), both meant for mapping a device */
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index f4e54503afa9..32e1a9513dc7 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -80,7 +80,7 @@ __setup("fpe=", fpe_setup);
80 80
81extern void init_default_cache_policy(unsigned long); 81extern void init_default_cache_policy(unsigned long);
82extern void paging_init(const struct machine_desc *desc); 82extern void paging_init(const struct machine_desc *desc);
83extern void early_paging_init(const struct machine_desc *); 83extern void early_mm_init(const struct machine_desc *);
84extern void adjust_lowmem_bounds(void); 84extern void adjust_lowmem_bounds(void);
85extern enum reboot_mode reboot_mode; 85extern enum reboot_mode reboot_mode;
86extern void setup_dma_zone(const struct machine_desc *desc); 86extern void setup_dma_zone(const struct machine_desc *desc);
@@ -1088,7 +1088,7 @@ void __init setup_arch(char **cmdline_p)
1088 parse_early_param(); 1088 parse_early_param();
1089 1089
1090#ifdef CONFIG_MMU 1090#ifdef CONFIG_MMU
1091 early_paging_init(mdesc); 1091 early_mm_init(mdesc);
1092#endif 1092#endif
1093 setup_dma_zone(mdesc); 1093 setup_dma_zone(mdesc);
1094 xen_early_init(); 1094 xen_early_init();
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 4e016d7f37b3..347cca965783 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -414,6 +414,11 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
414 FIXADDR_END); 414 FIXADDR_END);
415 BUG_ON(idx >= __end_of_fixed_addresses); 415 BUG_ON(idx >= __end_of_fixed_addresses);
416 416
417 /* we only support device mappings until pgprot_kernel has been set */
418 if (WARN_ON(pgprot_val(prot) != pgprot_val(FIXMAP_PAGE_IO) &&
419 pgprot_val(pgprot_kernel) == 0))
420 return;
421
417 if (pgprot_val(prot)) 422 if (pgprot_val(prot))
418 set_pte_at(NULL, vaddr, pte, 423 set_pte_at(NULL, vaddr, pte,
419 pfn_pte(phys >> PAGE_SHIFT, prot)); 424 pfn_pte(phys >> PAGE_SHIFT, prot));
@@ -1492,7 +1497,7 @@ pgtables_remap lpae_pgtables_remap_asm;
1492 * early_paging_init() recreates boot time page table setup, allowing machines 1497 * early_paging_init() recreates boot time page table setup, allowing machines
1493 * to switch over to a high (>4G) address space on LPAE systems 1498 * to switch over to a high (>4G) address space on LPAE systems
1494 */ 1499 */
1495void __init early_paging_init(const struct machine_desc *mdesc) 1500static void __init early_paging_init(const struct machine_desc *mdesc)
1496{ 1501{
1497 pgtables_remap *lpae_pgtables_remap; 1502 pgtables_remap *lpae_pgtables_remap;
1498 unsigned long pa_pgd; 1503 unsigned long pa_pgd;
@@ -1560,7 +1565,7 @@ void __init early_paging_init(const struct machine_desc *mdesc)
1560 1565
1561#else 1566#else
1562 1567
1563void __init early_paging_init(const struct machine_desc *mdesc) 1568static void __init early_paging_init(const struct machine_desc *mdesc)
1564{ 1569{
1565 long long offset; 1570 long long offset;
1566 1571
@@ -1616,7 +1621,6 @@ void __init paging_init(const struct machine_desc *mdesc)
1616{ 1621{
1617 void *zero_page; 1622 void *zero_page;
1618 1623
1619 build_mem_type_table();
1620 prepare_page_table(); 1624 prepare_page_table();
1621 map_lowmem(); 1625 map_lowmem();
1622 memblock_set_current_limit(arm_lowmem_limit); 1626 memblock_set_current_limit(arm_lowmem_limit);
@@ -1636,3 +1640,9 @@ void __init paging_init(const struct machine_desc *mdesc)
1636 empty_zero_page = virt_to_page(zero_page); 1640 empty_zero_page = virt_to_page(zero_page);
1637 __flush_dcache_page(NULL, empty_zero_page); 1641 __flush_dcache_page(NULL, empty_zero_page);
1638} 1642}
1643
1644void __init early_mm_init(const struct machine_desc *mdesc)
1645{
1646 build_mem_type_table();
1647 early_paging_init(mdesc);
1648}