diff options
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/cache-feroceon-l2.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 50 | ||||
-rw-r--r-- | arch/arm/mm/proc-arm940.S | 1 | ||||
-rw-r--r-- | arch/arm/mm/proc-arm946.S | 1 |
4 files changed, 53 insertions, 1 deletions
diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c index 20eec4ba173f..7b5a25d81576 100644 --- a/arch/arm/mm/cache-feroceon-l2.c +++ b/arch/arm/mm/cache-feroceon-l2.c | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <asm/cacheflush.h> | 16 | #include <asm/cacheflush.h> |
17 | #include <asm/plat-orion/cache-feroceon-l2.h> | 17 | #include <plat/cache-feroceon-l2.h> |
18 | 18 | ||
19 | 19 | ||
20 | /* | 20 | /* |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 2d6d682c206a..25d9a11eb617 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -568,6 +568,55 @@ void __init iotable_init(struct map_desc *io_desc, int nr) | |||
568 | create_mapping(io_desc + i); | 568 | create_mapping(io_desc + i); |
569 | } | 569 | } |
570 | 570 | ||
571 | static int __init check_membank_valid(struct membank *mb) | ||
572 | { | ||
573 | /* | ||
574 | * Check whether this memory region has non-zero size. | ||
575 | */ | ||
576 | if (mb->size == 0) | ||
577 | return 0; | ||
578 | |||
579 | /* | ||
580 | * Check whether this memory region would entirely overlap | ||
581 | * the vmalloc area. | ||
582 | */ | ||
583 | if (phys_to_virt(mb->start) >= VMALLOC_MIN) { | ||
584 | printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " | ||
585 | "(vmalloc region overlap).\n", | ||
586 | mb->start, mb->start + mb->size - 1); | ||
587 | return 0; | ||
588 | } | ||
589 | |||
590 | /* | ||
591 | * Check whether this memory region would partially overlap | ||
592 | * the vmalloc area. | ||
593 | */ | ||
594 | if (phys_to_virt(mb->start + mb->size) < phys_to_virt(mb->start) || | ||
595 | phys_to_virt(mb->start + mb->size) > VMALLOC_MIN) { | ||
596 | unsigned long newsize = VMALLOC_MIN - phys_to_virt(mb->start); | ||
597 | |||
598 | printk(KERN_NOTICE "Truncating RAM at %.8lx-%.8lx " | ||
599 | "to -%.8lx (vmalloc region overlap).\n", | ||
600 | mb->start, mb->start + mb->size - 1, | ||
601 | mb->start + newsize - 1); | ||
602 | mb->size = newsize; | ||
603 | } | ||
604 | |||
605 | return 1; | ||
606 | } | ||
607 | |||
608 | static void __init sanity_check_meminfo(struct meminfo *mi) | ||
609 | { | ||
610 | int i; | ||
611 | int j; | ||
612 | |||
613 | for (i = 0, j = 0; i < mi->nr_banks; i++) { | ||
614 | if (check_membank_valid(&mi->bank[i])) | ||
615 | mi->bank[j++] = mi->bank[i]; | ||
616 | } | ||
617 | mi->nr_banks = j; | ||
618 | } | ||
619 | |||
571 | static inline void prepare_page_table(struct meminfo *mi) | 620 | static inline void prepare_page_table(struct meminfo *mi) |
572 | { | 621 | { |
573 | unsigned long addr; | 622 | unsigned long addr; |
@@ -753,6 +802,7 @@ void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc) | |||
753 | void *zero_page; | 802 | void *zero_page; |
754 | 803 | ||
755 | build_mem_type_table(); | 804 | build_mem_type_table(); |
805 | sanity_check_meminfo(mi); | ||
756 | prepare_page_table(mi); | 806 | prepare_page_table(mi); |
757 | bootmem_init(mi); | 807 | bootmem_init(mi); |
758 | devicemaps_init(mdesc); | 808 | devicemaps_init(mdesc); |
diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S index 1a3d63df8e90..551244d5ca19 100644 --- a/arch/arm/mm/proc-arm940.S +++ b/arch/arm/mm/proc-arm940.S | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/pgtable-hwdef.h> | 15 | #include <asm/pgtable-hwdef.h> |
16 | #include <asm/pgtable.h> | 16 | #include <asm/pgtable.h> |
17 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
18 | #include "proc-macros.S" | ||
18 | 19 | ||
19 | /* ARM940T has a 4KB DCache comprising 256 lines of 4 words */ | 20 | /* ARM940T has a 4KB DCache comprising 256 lines of 4 words */ |
20 | #define CACHE_DLINESIZE 16 | 21 | #define CACHE_DLINESIZE 16 |
diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S index 82d579ac9b98..6168c6160dee 100644 --- a/arch/arm/mm/proc-arm946.S +++ b/arch/arm/mm/proc-arm946.S | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <asm/pgtable-hwdef.h> | 17 | #include <asm/pgtable-hwdef.h> |
18 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
19 | #include <asm/ptrace.h> | 19 | #include <asm/ptrace.h> |
20 | #include "proc-macros.S" | ||
20 | 21 | ||
21 | /* | 22 | /* |
22 | * ARM946E-S is synthesizable to have 0KB to 1MB sized D-Cache, | 23 | * ARM946E-S is synthesizable to have 0KB to 1MB sized D-Cache, |