aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2016-05-17 03:02:56 -0400
committerScott Wood <oss@buserror.net>2016-07-09 03:02:48 -0400
commit62f64b49d04dc70687cd713c804fecd80216b2d6 (patch)
treef4d8264d6e3a40c95cb2aecf404642e097cc9852 /arch/powerpc/mm
parent4ad274502f66614eec3093aaa0cdeb4b70697ddf (diff)
powerpc/8xx: add CONFIG_PIN_TLB_IMMR
CONFIG_PIN_TLB maps IMMR area and the first 24 Mbytes of memory. In some circunstances it might be more interesting to not map IMMR but map 32 Mbytes of memory instead. Therefore we add config option CONFIG_PIN_TLB_IMMR to select if IMMR shall be pinned or not, hence whether we pin 24 or 32 Mbytes of RAM Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Scott Wood <oss@buserror.net>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r--arch/powerpc/mm/8xx_mmu.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/powerpc/mm/8xx_mmu.c b/arch/powerpc/mm/8xx_mmu.c
index 0f0a83ed7a20..6c5025e81236 100644
--- a/arch/powerpc/mm/8xx_mmu.c
+++ b/arch/powerpc/mm/8xx_mmu.c
@@ -61,11 +61,15 @@ void __init MMU_init_hw(void)
61#ifdef CONFIG_PIN_TLB 61#ifdef CONFIG_PIN_TLB
62 unsigned long ctr = mfspr(SPRN_MD_CTR) & 0xfe000000; 62 unsigned long ctr = mfspr(SPRN_MD_CTR) & 0xfe000000;
63 unsigned long flags = 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY; 63 unsigned long flags = 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY;
64 int i; 64#ifdef CONFIG_PIN_TLB_IMMR
65 int i = 29;
66#else
67 int i = 28;
68#endif
65 unsigned long addr = 0; 69 unsigned long addr = 0;
66 unsigned long mem = total_lowmem; 70 unsigned long mem = total_lowmem;
67 71
68 for (i = 29; i < 32 && mem >= LARGE_PAGE_SIZE_8M; i++) { 72 for (; i < 32 && mem >= LARGE_PAGE_SIZE_8M; i++) {
69 mtspr(SPRN_MD_CTR, ctr | (i << 8)); 73 mtspr(SPRN_MD_CTR, ctr | (i << 8));
70 mtspr(SPRN_MD_EPN, (unsigned long)__va(addr) | MD_EVALID); 74 mtspr(SPRN_MD_EPN, (unsigned long)__va(addr) | MD_EVALID);
71 mtspr(SPRN_MD_TWC, MD_PS8MEG | MD_SVALID); 75 mtspr(SPRN_MD_TWC, MD_PS8MEG | MD_SVALID);
@@ -88,7 +92,7 @@ static void mmu_mapin_immr(void)
88} 92}
89 93
90/* Address of instructions to patch */ 94/* Address of instructions to patch */
91#ifndef CONFIG_PIN_TLB 95#ifndef CONFIG_PIN_TLB_IMMR
92extern unsigned int DTLBMiss_jmp; 96extern unsigned int DTLBMiss_jmp;
93#endif 97#endif
94extern unsigned int DTLBMiss_cmp, FixupDAR_cmp; 98extern unsigned int DTLBMiss_cmp, FixupDAR_cmp;
@@ -109,7 +113,7 @@ unsigned long __init mmu_mapin_ram(unsigned long top)
109 if (__map_without_ltlbs) { 113 if (__map_without_ltlbs) {
110 mapped = 0; 114 mapped = 0;
111 mmu_mapin_immr(); 115 mmu_mapin_immr();
112#ifndef CONFIG_PIN_TLB 116#ifndef CONFIG_PIN_TLB_IMMR
113 patch_instruction(&DTLBMiss_jmp, PPC_INST_NOP); 117 patch_instruction(&DTLBMiss_jmp, PPC_INST_NOP);
114#endif 118#endif
115 } else { 119 } else {