diff options
| -rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/mm/Makefile | 2 | ||||
| -rw-r--r-- | arch/powerpc/mm/fsl_booke_mmu.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/mm/mmu_decl.h | 5 | ||||
| -rw-r--r-- | arch/powerpc/mm/tlb_nohash.c | 14 | ||||
| -rw-r--r-- | arch/powerpc/mm/tlb_nohash_low.S | 2 |
6 files changed, 29 insertions, 10 deletions
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index c6349409085..c3e01945ad4 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
| @@ -61,7 +61,7 @@ | |||
| 61 | #endif | 61 | #endif |
| 62 | #endif | 62 | #endif |
| 63 | 63 | ||
| 64 | #if defined(CONFIG_FSL_BOOKE) | 64 | #if defined(CONFIG_PPC_FSL_BOOK3E) |
| 65 | #include "../mm/mmu_decl.h" | 65 | #include "../mm/mmu_decl.h" |
| 66 | #endif | 66 | #endif |
| 67 | 67 | ||
| @@ -470,7 +470,7 @@ int main(void) | |||
| 470 | DEFINE(PGD_T_LOG2, PGD_T_LOG2); | 470 | DEFINE(PGD_T_LOG2, PGD_T_LOG2); |
| 471 | DEFINE(PTE_T_LOG2, PTE_T_LOG2); | 471 | DEFINE(PTE_T_LOG2, PTE_T_LOG2); |
| 472 | #endif | 472 | #endif |
| 473 | #ifdef CONFIG_FSL_BOOKE | 473 | #ifdef CONFIG_PPC_FSL_BOOK3E |
| 474 | DEFINE(TLBCAM_SIZE, sizeof(struct tlbcam)); | 474 | DEFINE(TLBCAM_SIZE, sizeof(struct tlbcam)); |
| 475 | DEFINE(TLBCAM_MAS0, offsetof(struct tlbcam, MAS0)); | 475 | DEFINE(TLBCAM_MAS0, offsetof(struct tlbcam, MAS0)); |
| 476 | DEFINE(TLBCAM_MAS1, offsetof(struct tlbcam, MAS1)); | 476 | DEFINE(TLBCAM_MAS1, offsetof(struct tlbcam, MAS1)); |
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index 53102f30688..bdca46e0838 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile | |||
| @@ -23,7 +23,7 @@ obj-$(CONFIG_PPC_STD_MMU) += hash_low_$(CONFIG_WORD_SIZE).o \ | |||
| 23 | mmu_context_hash$(CONFIG_WORD_SIZE).o | 23 | mmu_context_hash$(CONFIG_WORD_SIZE).o |
| 24 | obj-$(CONFIG_40x) += 40x_mmu.o | 24 | obj-$(CONFIG_40x) += 40x_mmu.o |
| 25 | obj-$(CONFIG_44x) += 44x_mmu.o | 25 | obj-$(CONFIG_44x) += 44x_mmu.o |
| 26 | obj-$(CONFIG_FSL_BOOKE) += fsl_booke_mmu.o | 26 | obj-$(CONFIG_PPC_FSL_BOOK3E) += fsl_booke_mmu.o |
| 27 | obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o | 27 | obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o |
| 28 | obj-$(CONFIG_PPC_MM_SLICES) += slice.o | 28 | obj-$(CONFIG_PPC_MM_SLICES) += slice.o |
| 29 | ifeq ($(CONFIG_HUGETLB_PAGE),y) | 29 | ifeq ($(CONFIG_HUGETLB_PAGE),y) |
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c index 1b4354db51b..67bc8a7c7e0 100644 --- a/arch/powerpc/mm/fsl_booke_mmu.c +++ b/arch/powerpc/mm/fsl_booke_mmu.c | |||
| @@ -56,11 +56,6 @@ | |||
| 56 | 56 | ||
| 57 | unsigned int tlbcam_index; | 57 | unsigned int tlbcam_index; |
| 58 | 58 | ||
| 59 | |||
| 60 | #if defined(CONFIG_LOWMEM_CAM_NUM_BOOL) && (CONFIG_LOWMEM_CAM_NUM >= NUM_TLBCAMS) | ||
| 61 | #error "LOWMEM_CAM_NUM must be less than NUM_TLBCAMS" | ||
| 62 | #endif | ||
| 63 | |||
| 64 | #define NUM_TLBCAMS (64) | 59 | #define NUM_TLBCAMS (64) |
| 65 | struct tlbcam TLBCAM[NUM_TLBCAMS]; | 60 | struct tlbcam TLBCAM[NUM_TLBCAMS]; |
| 66 | 61 | ||
| @@ -185,6 +180,12 @@ unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx) | |||
| 185 | return amount_mapped; | 180 | return amount_mapped; |
| 186 | } | 181 | } |
| 187 | 182 | ||
| 183 | #ifdef CONFIG_PPC32 | ||
| 184 | |||
| 185 | #if defined(CONFIG_LOWMEM_CAM_NUM_BOOL) && (CONFIG_LOWMEM_CAM_NUM >= NUM_TLBCAMS) | ||
| 186 | #error "LOWMEM_CAM_NUM must be less than NUM_TLBCAMS" | ||
| 187 | #endif | ||
| 188 | |||
| 188 | unsigned long __init mmu_mapin_ram(unsigned long top) | 189 | unsigned long __init mmu_mapin_ram(unsigned long top) |
| 189 | { | 190 | { |
| 190 | return tlbcam_addrs[tlbcam_index - 1].limit - PAGE_OFFSET + 1; | 191 | return tlbcam_addrs[tlbcam_index - 1].limit - PAGE_OFFSET + 1; |
| @@ -216,3 +217,4 @@ void __init adjust_total_lowmem(void) | |||
| 216 | 217 | ||
| 217 | __initial_memory_limit_addr = memstart_addr + __max_low_memory; | 218 | __initial_memory_limit_addr = memstart_addr + __max_low_memory; |
| 218 | } | 219 | } |
| 220 | #endif | ||
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index 63b84a0d3b1..dd0a2589591 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h | |||
| @@ -140,10 +140,13 @@ extern void wii_memory_fixups(void); | |||
| 140 | extern void MMU_init_hw(void); | 140 | extern void MMU_init_hw(void); |
| 141 | extern unsigned long mmu_mapin_ram(unsigned long top); | 141 | extern unsigned long mmu_mapin_ram(unsigned long top); |
| 142 | 142 | ||
| 143 | #elif defined(CONFIG_FSL_BOOKE) | 143 | #elif defined(CONFIG_PPC_FSL_BOOK3E) |
| 144 | extern unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx); | ||
| 145 | #ifdef CONFIG_PPC32 | ||
| 144 | extern void MMU_init_hw(void); | 146 | extern void MMU_init_hw(void); |
| 145 | extern unsigned long mmu_mapin_ram(unsigned long top); | 147 | extern unsigned long mmu_mapin_ram(unsigned long top); |
| 146 | extern void adjust_total_lowmem(void); | 148 | extern void adjust_total_lowmem(void); |
| 149 | #endif | ||
| 147 | extern void loadcam_entry(unsigned int index); | 150 | extern void loadcam_entry(unsigned int index); |
| 148 | 151 | ||
| 149 | struct tlbcam { | 152 | struct tlbcam { |
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c index 66518992076..61fe32a256d 100644 --- a/arch/powerpc/mm/tlb_nohash.c +++ b/arch/powerpc/mm/tlb_nohash.c | |||
| @@ -541,6 +541,20 @@ static void __early_init_mmu(int boot_cpu) | |||
| 541 | */ | 541 | */ |
| 542 | linear_map_top = memblock_end_of_DRAM(); | 542 | linear_map_top = memblock_end_of_DRAM(); |
| 543 | 543 | ||
| 544 | #ifdef CONFIG_PPC_FSL_BOOK3E | ||
| 545 | if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { | ||
| 546 | unsigned int num_cams; | ||
| 547 | |||
| 548 | /* use a quarter of the TLBCAM for bolted linear map */ | ||
| 549 | num_cams = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) / 4; | ||
| 550 | linear_map_top = map_mem_in_cams(linear_map_top, num_cams); | ||
| 551 | |||
| 552 | /* limit memory so we dont have linear faults */ | ||
| 553 | memblock_enforce_memory_limit(linear_map_top); | ||
| 554 | memblock_analyze(); | ||
| 555 | } | ||
| 556 | #endif | ||
| 557 | |||
| 544 | /* A sync won't hurt us after mucking around with | 558 | /* A sync won't hurt us after mucking around with |
| 545 | * the MMU configuration | 559 | * the MMU configuration |
| 546 | */ | 560 | */ |
diff --git a/arch/powerpc/mm/tlb_nohash_low.S b/arch/powerpc/mm/tlb_nohash_low.S index b9d9fed8f36..af405eefe48 100644 --- a/arch/powerpc/mm/tlb_nohash_low.S +++ b/arch/powerpc/mm/tlb_nohash_low.S | |||
| @@ -367,7 +367,7 @@ _GLOBAL(set_context) | |||
| 367 | #error Unsupported processor type ! | 367 | #error Unsupported processor type ! |
| 368 | #endif | 368 | #endif |
| 369 | 369 | ||
| 370 | #if defined(CONFIG_FSL_BOOKE) | 370 | #if defined(CONFIG_PPC_FSL_BOOK3E) |
| 371 | /* | 371 | /* |
| 372 | * extern void loadcam_entry(unsigned int index) | 372 | * extern void loadcam_entry(unsigned int index) |
| 373 | * | 373 | * |
