Changes in boot/arch/arm32/src/main.c [67d02bb:0e63d34] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/arm32/src/main.c
r67d02bb r0e63d34 53 53 extern void *bdata_end; 54 54 55 56 static inline void invalidate_icache(void) 57 { 58 /* ICIALLU Invalidate entire ICache */ 59 asm volatile ("mov r0, #0\n" "mcr p15, 0, r0, c7, c5, 0\n" ::: "r0" ); 60 } 61 62 static inline void invalidate_dcache(void *address, size_t size) 63 { 64 const uintptr_t addr = (uintptr_t)address; 65 /* DCIMVAC - invalidate by address to the point of coherence */ 66 for (uintptr_t a = addr; a < addr + size; a += 4) { 67 asm volatile ("mcr p15, 0, %[a], c7, c6, 1\n" :: [a]"r"(a) : ); 68 } 69 } 70 55 71 static inline void clean_dcache_poc(void *address, size_t size) 56 72 { 57 73 const uintptr_t addr = (uintptr_t)address; 74 /* DCCMVAC - clean by address to the point of coherence */ 58 75 for (uintptr_t a = addr; a < addr + size; a += 4) { 59 /* DCCMVAC - clean by address to the point of coherence */60 76 asm volatile ("mcr p15, 0, %[a], c7, c10, 1\n" :: [a]"r"(a) : ); 61 77 } … … 66 82 void bootstrap(void) 67 83 { 84 /* Make sure we run in memory code when caches are enabled, 85 * make sure we read memory data too. This part is ARMv7 specific as 86 * ARMv7 no longer invalidates caches on restart. 87 * See chapter B2.2.2 of ARM Architecture Reference Manual p. B2-1263*/ 88 invalidate_icache(); 89 invalidate_dcache(&bdata_start, &bdata_end - &bdata_start); 90 68 91 /* Enable MMU and caches */ 69 92 mmu_start(); … … 82 105 components[i].start, components[i].name, components[i].inflated, 83 106 components[i].size); 107 invalidate_dcache(components[i].start, components[i].size); 84 108 } 85 109 … … 124 148 halt(); 125 149 } 126 /* Make sure data are in the memory, ICache will need them */127 150 clean_dcache_poc(dest[i - 1], components[i - 1].inflated); 128 151 }
Note:
See TracChangeset
for help on using the changeset viewer.