diff options
-rw-r--r-- | arch/arm/include/asm/fixmap.h | 2 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 16 |
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 | ||
81 | extern void init_default_cache_policy(unsigned long); | 81 | extern void init_default_cache_policy(unsigned long); |
82 | extern void paging_init(const struct machine_desc *desc); | 82 | extern void paging_init(const struct machine_desc *desc); |
83 | extern void early_paging_init(const struct machine_desc *); | 83 | extern void early_mm_init(const struct machine_desc *); |
84 | extern void adjust_lowmem_bounds(void); | 84 | extern void adjust_lowmem_bounds(void); |
85 | extern enum reboot_mode reboot_mode; | 85 | extern enum reboot_mode reboot_mode; |
86 | extern void setup_dma_zone(const struct machine_desc *desc); | 86 | extern 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 | */ |
1495 | void __init early_paging_init(const struct machine_desc *mdesc) | 1500 | static 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 | ||
1563 | void __init early_paging_init(const struct machine_desc *mdesc) | 1568 | static 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 | |||
1644 | void __init early_mm_init(const struct machine_desc *mdesc) | ||
1645 | { | ||
1646 | build_mem_type_table(); | ||
1647 | early_paging_init(mdesc); | ||
1648 | } | ||