Go to the source code of this file.
Functions | |
static void | cpu_arm920_cache_clean_invalidate_all (void) |
void | cache_clean_invalidate (void) |
static void | cpu_arm920_tlb_invalidate_all (void) |
void | MMU_SetFastBusMode (void) |
void | MMU_SetAsyncBusMode (void) |
void | tlb_invalidate (void) |
static void | arm920_setup (void) |
void | mmu_init (void) |
static void | copy_vivi_to_ram (void) |
static void | mem_mapping_linear (void) |
static void | nor_flash_mapping (void) |
static void | nor_flash_remapping (void) |
void | mem_map_nand_boot (void) |
void | mem_map_nor (void) |
void | mem_map_init (void) |
void | F_MmuInitial (void) |
void | F_MemoryMapInitial (void) |
Variables | |
static unsigned long * | mmu_tlb_base = (unsigned long *) MMU_TABLE_BASE |
static void arm920_setup | ( | void | ) | [inline, static] |
Definition at line 87 of file mmu.c.
00088 { 00089 unsigned long ttb = MMU_TABLE_BASE; 00090 00091 __asm__( 00092 /* Invalidate caches */ 00093 "mov r0, #0\n" 00094 "mcr p15, 0, r0, c7, c7, 0\n" /* invalidate I,D caches on v4 */ 00095 "mcr p15, 0, r0, c7, c10, 4\n" /* drain write buffer on v4 */ 00096 "mcr p15, 0, r0, c8, c7, 0\n" /* invalidate I,D TLBs on v4 */ 00097 /* Load page table pointer */ 00098 "mov r4, %0\n" 00099 "mcr p15, 0, r4, c2, c0, 0\n" /* load page table pointer */ 00100 /* Write domain id (cp15_r3) */ 00101 "mvn r0, #0\n" /* Domains 0, 1 = client */ 00102 "mcr p15, 0, r0, c3, c0, 0\n" /* load domain access register */ 00103 /* Set control register v4 */ 00104 "mrc p15, 0, r0, c1, c0, 0\n" /* get control register v4 */ 00105 /* Clear out 'unwanted' bits (then put them in if we need them) */ 00106 /* .RVI ..RS B... .CAM */ 00107 "bic r0, r0, #0x3000\n" /* ..11 .... .... .... */ 00108 "bic r0, r0, #0x0300\n" /* .... ..11 .... .... */ 00109 "bic r0, r0, #0x0087\n" /* .... .... 1... .111 */ 00110 /* Turn on what we want */ 00111 /* Fault checking enabled */ 00112 "orr r0, r0, #0x0002\n" /* .... .... .... ..1. */ 00113 #ifdef CONFIG_CPU_D_CACHE_ON 00114 "orr r0, r0, #0x0004\n" /* .... .... .... .1.. */ 00115 #endif 00116 #ifdef CONFIG_CPU_I_CACHE_ON 00117 "orr r0, r0, #0x1000\n" /* ...1 .... .... .... */ 00118 #endif 00119 /* MMU enabled */ 00120 "orr r0, r0, #0x0001\n" /* .... .... .... ...1 */ 00121 "mcr p15, 0, r0, c1, c0, 0\n" /* write control register */ 00122 : /* no outputs */ 00123 : "r" (ttb) ); 00124 }
void cache_clean_invalidate | ( | void | ) |
static void copy_vivi_to_ram | ( | void | ) | [static] |
static void cpu_arm920_cache_clean_invalidate_all | ( | void | ) | [inline, static] |
Definition at line 23 of file mmu.c.
00024 { 00025 __asm__( 00026 " mov r1, #0\n" 00027 " mov r1, #7 << 5\n" /* 8 segments */ 00028 "1: orr r3, r1, #63 << 26\n" /* 64 entries */ 00029 "2: mcr p15, 0, r3, c7, c14, 2\n" /* clean & invalidate D index */ 00030 " subs r3, r3, #1 << 26\n" 00031 " bcs 2b\n" /* entries 64 to 0 */ 00032 " subs r1, r1, #1 << 5\n" 00033 " bcs 1b\n" /* segments 7 to 0 */ 00034 " mcr p15, 0, r1, c7, c5, 0\n" /* invalidate I cache */ 00035 " mcr p15, 0, r1, c7, c10, 4\n" /* drain WB */ 00036 ); 00037 }
static void cpu_arm920_tlb_invalidate_all | ( | void | ) | [inline, static] |
void F_MemoryMapInitial | ( | void | ) |
Definition at line 229 of file mmu.c.
00230 { 00231 mem_map_nand_boot(); 00232 cache_clean_invalidate(); 00233 tlb_invalidate(); 00234 }
void F_MmuInitial | ( | void | ) |
void mem_map_init | ( | void | ) |
Definition at line 215 of file mmu.c.
00216 { 00217 //#ifdef CONFIG_S3C2440_NAND_BOOT 00218 mem_map_nand_boot(); 00219 //#else 00220 // mem_map_nor(); 00221 //#endif 00222 cache_clean_invalidate(); 00223 tlb_invalidate(); 00224 }
void mem_map_nand_boot | ( | void | ) |
Definition at line 197 of file mmu.c.
00198 { 00199 mem_mapping_linear(); 00200 #ifdef CONFIG_MTD_AMDSTD 00201 nor_flash_mapping(); 00202 #endif 00203 }
void mem_map_nor | ( | void | ) |
Definition at line 206 of file mmu.c.
00207 { 00208 copy_vivi_to_ram(); 00209 mem_mapping_linear(); 00210 nor_flash_mapping(); 00211 nor_flash_remapping(); 00212 }
static void mem_mapping_linear | ( | void | ) | [inline, static] |
Definition at line 139 of file mmu.c.
00140 { 00141 unsigned long pageoffset, sectionNumber; 00142 00143 //putstr_hex("\n\r MMU table base address = 0x", (unsigned long)mmu_tlb_base); 00144 /* 4G not cacacheable, not bufferable */ 00145 for (sectionNumber = 0; sectionNumber < 4096; sectionNumber++) { 00146 pageoffset = (sectionNumber << 20); 00147 *(mmu_tlb_base + sectionNumber) = pageoffset | MMU_SECDESC; 00148 } 00149 00150 /* make dram cacheable */ 00151 for (pageoffset = DRAM_BASE; pageoffset < (DRAM_BASE+DRAM_SIZE); pageoffset += SZ_1M) { 00152 //DPRINTK(3, "Make DRAM section cacheable: 0x%08lx\n", pageoffset); 00153 *(mmu_tlb_base + (pageoffset >> 20)) = pageoffset | MMU_SECDESC | MMU_CACHEABLE; 00154 } 00155 }
void mmu_init | ( | void | ) |
void MMU_SetAsyncBusMode | ( | void | ) |
void MMU_SetFastBusMode | ( | void | ) |
static void nor_flash_mapping | ( | void | ) | [inline, static] |
Definition at line 158 of file mmu.c.
00159 { 00160 unsigned long offset, cached_addr, uncached_addr; 00161 00162 cached_addr = FLASH_BASE; 00163 uncached_addr = FLASH_UNCACHED_BASE; 00164 00165 /*for (offset = 0; offset < FLASH_SIZE; offset += MMU_SECTION_SIZE) { 00166 cached_addr += offset; 00167 uncached_addr += offset; 00168 *(mmu_tlb_base + (cached_addr >> 20)) = \ 00169 (cached_addr | MMU_SECDESC | MMU_CACHEABLE); 00170 *(mmu_tlb_base + (uncached_addr >> 20)) = \ 00171 (cached_addr | MMU_SECDESC); 00172 }*/ 00173 00174 for (offset = 0; offset < FLASH_SIZE; offset += MMU_SECTION_SIZE) { 00175 cached_addr = FLASH_BASE + offset; 00176 uncached_addr = FLASH_UNCACHED_BASE + offset; 00177 *(mmu_tlb_base + (cached_addr >> 20)) = \ 00178 (cached_addr | MMU_SECDESC | MMU_CACHEABLE); 00179 *(mmu_tlb_base + (uncached_addr >> 20)) = \ 00180 (cached_addr | MMU_SECDESC); 00181 } 00182 }
static void nor_flash_remapping | ( | void | ) | [inline, static] |
Definition at line 189 of file mmu.c.
00190 { 00191 putstr_hex("Map flash virtual section to DRAM at 0x", VIVI_RAM_BASE); 00192 *(mmu_tlb_base + (VIVI_ROM_BASE >> 20)) = \ 00193 (VIVI_RAM_BASE | MMU_SECDESC | MMU_CACHEABLE); 00194 }
void tlb_invalidate | ( | void | ) |
unsigned long* mmu_tlb_base = (unsigned long *) MMU_TABLE_BASE [static] |