Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/arm32/src/main.c

    r0e63d34 r7e752b2  
    5050#define TOP2ADDR(top)  (((void *) PA2KA(BOOT_OFFSET)) + (top))
    5151
    52 extern void *bdata_start;
    53 extern void *bdata_end;
    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 
    71 static inline void clean_dcache_poc(void *address, size_t size)
    72 {
    73         const uintptr_t addr = (uintptr_t)address;
    74         /* DCCMVAC - clean by address to the point of coherence */
    75         for (uintptr_t a = addr; a < addr + size; a += 4) {
    76                 asm volatile ("mcr p15, 0, %[a], c7, c10, 1\n" :: [a]"r"(a) : );
    77         }
    78 }
    79 
    8052static bootinfo_t bootinfo;
    8153
    8254void bootstrap(void)
    8355{
    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 
    91         /* Enable MMU and caches */
    9256        mmu_start();
    9357        version_print();
    9458       
    95         printf("Boot data: %p -> %p\n", &bdata_start, &bdata_end);
    9659        printf("\nMemory statistics\n");
    9760        printf(" %p|%p: bootstrap stack\n", &boot_stack, &boot_stack);
     
    10164            (void *) PA2KA(BOOT_OFFSET), (void *) BOOT_OFFSET);
    10265       
    103         for (size_t i = 0; i < COMPONENTS; i++) {
     66        size_t i;
     67        for (i = 0; i < COMPONENTS; i++)
    10468                printf(" %p|%p: %s image (%u/%u bytes)\n", components[i].start,
    10569                    components[i].start, components[i].name, components[i].inflated,
    10670                    components[i].size);
    107                 invalidate_dcache(components[i].start, components[i].size);
    108         }
    10971       
    11072        void *dest[COMPONENTS];
     
    11274        size_t cnt = 0;
    11375        bootinfo.cnt = 0;
    114         for (size_t i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) {
     76        for (i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) {
    11577                top = ALIGN_UP(top, PAGE_SIZE);
    11678               
     
    13294        printf("\nInflating components ... ");
    13395       
    134         for (size_t i = cnt; i > 0; i--) {
     96        for (i = cnt; i > 0; i--) {
    13597                void *tail = components[i - 1].start + components[i - 1].size;
    13698                if (tail >= dest[i - 1]) {
     
    144106                int err = inflate(components[i - 1].start, components[i - 1].size,
    145107                    dest[i - 1], components[i - 1].inflated);
     108               
    146109                if (err != EOK) {
    147110                        printf("\n%s: Inflating error %d\n", components[i - 1].name, err);
    148111                        halt();
    149112                }
    150                 clean_dcache_poc(dest[i - 1], components[i - 1].inflated);
    151113        }
    152114       
    153115        printf(".\n");
    154116       
    155         printf("Booting the kernel...\n");
     117        printf("Booting the kernel... \n");
    156118        jump_to_kernel((void *) PA2KA(BOOT_OFFSET), &bootinfo);
    157119}
Note: See TracChangeset for help on using the changeset viewer.