From a96a4e0da2b03967741ea62fd2e7ee9ec6447d9b Mon Sep 17 00:00:00 2001 From: DizzyOfCRN Date: Wed, 2 Jul 2014 18:47:14 +0000 Subject: [PATCH] - Rethink bootstrap workings: Use more c and less asm - Simplified memory mapping somewhat - TODO: Move kernelBSS at the top of ram and bootmsg as well (ATAGS) git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@49098 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/arm-sun4i/boot/boot.c | 123 ++++++++------- arch/arm-sun4i/boot/boot.h | 7 +- arch/arm-sun4i/platform/pcDuino/bootlog.txt | 229 +++++++++++++++------------- 3 files changed, 187 insertions(+), 172 deletions(-) rewrite arch/arm-sun4i/platform/pcDuino/bootlog.txt (65%) diff --git a/arch/arm-sun4i/boot/boot.c b/arch/arm-sun4i/boot/boot.c index 6492dae333..eeb769b234 100644 --- a/arch/arm-sun4i/boot/boot.c +++ b/arch/arm-sun4i/boot/boot.c @@ -21,6 +21,7 @@ #include +/* Parse ATAGS to find end of DRAM (align on mebibyte (or megabyte...) boundary) and set stack pointer there. "Push" ATAGS in stack and jump to C */ asm(" .section .aros.startup \n" " .globl bootstrap \n" " .type bootstrap,%function \n" @@ -44,19 +45,11 @@ asm(" .section .aros.startup \n" " cmp sp, #0 \n" /* Allow only one ATAG_MEM tag, else we get confused */ " bne .fancy_error_loop \n" " \n" -" ldr sp, [r0, #12] \n" /* Initial stackpointer is end of DRAM minus (space for vectors + initial stack size) */ +" ldr sp, [r0, #12] \n" /* Initial stackpointer is end of DRAM */ " ldr r5, [r0, #8] \n" -" add sp, sp, r5 \n" -" mov r5, sp \n" -" lsr sp, sp, #16 \n" -" lsl sp, sp, #16 \n" -" sub sp, sp, #0x10000 \n" -" mov r6, sp \n" -" sub r6, r6, #"STR(BOOT_STACK_SIZE)" \n" -" sub r6, r5, r6 \n" -" ldr r5, [r0, #8] \n" -" sub r5, r5, r6 \n" -" str r5, [r0, #8] \n" /* In future clean the above mess, uses now too many registers */ +" add sp, sp, r5 \n" /* Align on last mebibyte (or megabyte...) */ +" lsr sp, sp, #20 \n" +" lsl sp, sp, #20 \n" /* sp = 0x8000 0000 on pcDuino (0x4000 0000 - 0x7fff ffff DRAM)*/ " \n" ".get_tag: \n" " ldr ip, [r0] \n" @@ -68,7 +61,7 @@ asm(" .section .aros.startup \n" " cmp sp, #0 \n" " beq .fancy_error_loop \n" " \n" -" sub sp, sp, r4, lsl #2 \n" /* Copy ATAGs in the stack */ +" sub sp, sp, r4, lsl #2 \n" /* "Push" ATAGs in the stack */ " mov r0, sp \n" ".atag_copy: \n" " ldr r3, [r2], #4 \n" @@ -81,9 +74,7 @@ asm(" .section .aros.startup \n" " b boot \n" " \n" ".fancy_error_loop: \n" -" b . \n" -" \n" -); +" b . \n"); void setup_mmu(uint32_t kernel_phys, uint32_t kernel_virt, uint32_t mem_lower, uint32_t mem_upper) { @@ -92,11 +83,10 @@ void setup_mmu(uint32_t kernel_phys, uint32_t kernel_virt, uint32_t mem_lower, u kprintf("[BOOT] MMU kernel_phys %08x\n", kernel_phys); kprintf("[BOOT] MMU kernel_virt %08x\n", kernel_virt); kprintf("[BOOT] MMU mem_lower %08x\n", mem_lower); - kprintf("[BOOT] MMU mem_upper %08x\n", mem_upper); - - /* Use memory right below kernel for page dir */ - pde_t *page_dir = (pde_t *)(((uintptr_t)kernel_phys - 16384) & ~ 16383); + kprintf("[BOOT] MMU mem_upper %08x\n", mem_upper-1); + /* We know the virtual address but not the physical */ + pde_t *page_dir = 0xfffec000-(kernel_virt-kernel_phys); kprintf("[BOOT] First level MMU page at %08x\n", page_dir); /* Clear page dir */ @@ -104,36 +94,33 @@ void setup_mmu(uint32_t kernel_phys, uint32_t kernel_virt, uint32_t mem_lower, u page_dir[i].raw = 0; } - /* 1:1 memory mapping */ + // 1:1 memory mapping for (i=(mem_lower >> 20); i < (mem_upper >> 20); i++) { //kprintf("[BOOT] Memory mapping page %d\n", i); //page_dir[i].raw = 0; page_dir[i].section.type = PDE_TYPE_SECTION; page_dir[i].section.b = 0; - page_dir[i].section.c = 1; /* Cacheable */ - page_dir[i].section.ap = 3; /* All can read&write */ + page_dir[i].section.c = 1; // Cacheable + page_dir[i].section.ap = 3; // All can read&write page_dir[i].section.base_address = i; } - /* v:p memory mapping */ + // v:p memory mapping for (i=(kernel_virt >> 20); i <= (0xffffffff >> 20); i++) { - kprintf("[BOOT] Kernel mapping page %d\n", i); + kprintf("[BOOT] Kernel mapping page %d phys %08x -> virt %08x\n", i, (kernel_phys)+((i << 20)-(kernel_virt)), i << 20); //page_dir[i].raw = 0; page_dir[i].section.type = PDE_TYPE_SECTION; page_dir[i].section.b = 0; - page_dir[i].section.c = 1; /* Cacheable */ - page_dir[i].section.ap = 3; /* All can read&write */ - page_dir[i].section.base_address = (kernel_phys >> 20); // Fixme + page_dir[i].section.c = 1; // Cacheable + page_dir[i].section.ap = 3; // All can read&write + page_dir[i].section.base_address = (kernel_phys >> 20)+(i-(kernel_virt >> 20)); } - pte_t *current_pte = (pte_t *)page_dir; - /* Write page_dir address to ttbr0 */ asm volatile ("mcr p15, 0, %0, c2, c0, 0"::"r"(page_dir)); /* Write ttbr control N = 0 (use only ttbr0) */ asm volatile ("mcr p15, 0, %0, c2, c0, 2"::"r"(0)); - mem_upper = (intptr_t)current_pte; } void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { @@ -144,6 +131,8 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { uint32_t mem_upper = 0; uint32_t mem_lower = 0; + uint32_t kernel_phys = 0; + uint32_t kernel_virt = 0; void *pkg_image; uint32_t pkg_size; @@ -165,6 +154,8 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { void (*entry)(struct TagItem *tags) = NULL; kprintf("[BOOT] AROS for sun4i (" SUN4I_PLATFORM_NAME ") bootstrap\n"); + asm volatile ("mov %0, sp":"=r"(tmp)); + kprintf("[BOOT] Stack @ %08x\n", tmp); tag->ti_Tag = KRN_BootLoader; tag->ti_Data = (IPTR)"Bootstrap/sun4i (" SUN4I_PLATFORM_NAME ") ARM"; @@ -178,16 +169,9 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { switch (t->hdr.tag) { case ATAG_MEM: { - kprintf("Memory (%08x-%08x)\n", t->u.mem.start, t->u.mem.size + t->u.mem.start - 1); - tag->ti_Tag = KRN_MEMLower; - tag->ti_Data = t->u.mem.start; - mem_lower = tag->ti_Data; - tag++; - - tag->ti_Tag = KRN_MEMUpper; - tag->ti_Data = t->u.mem.start + t->u.mem.size; - mem_upper = tag->ti_Data; - tag++; + mem_lower = t->u.mem.start; + mem_upper = t->u.mem.start+t->u.mem.size; + kprintf("Memory (%08x-%08x)\n", mem_lower, mem_upper-1); } break; @@ -219,12 +203,17 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { } kprintf("[BOOT] Bootstrap @ %08x-%08x\n", &__bootstrap_start, &__bootstrap_end); - kprintf("[BOOT] Topmost address for kernel: %p\n", mem_upper); if (mem_upper) { - uint32_t kernel_phys = mem_upper; - uint32_t kernel_virt = kernel_phys; + mem_upper -= MEM_OFFSET_VECTOR; /* Preserve DRAM for vectors (virtual 0xffff 0000 - 0xffff 003f) */ + kprintf("[BOOT] Vectors @%p\n", mem_upper); + + mem_upper -= MEM_OFFSET_MMU1; /* Preserve DRAM for top level mmu table (MMU1) 16kb boundary and size */ + kprintf("[BOOT] MMU1 @%p\n", mem_upper); + + kernel_phys = mem_upper; + kernel_virt = kernel_phys; uint32_t total_size_ro; uint32_t total_size_rw; @@ -285,13 +274,12 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { } } - kernel_phys = mem_upper - total_size_ro - total_size_rw; - kernel_virt = 0xffff0000 - total_size_ro - total_size_rw - BOOT_STACK_SIZE; - /* - ffff ffff (free) Top of the world - ffff fffb (free) ~4 - | (free) + On asm bootstrap we aligned top of memory to 1Mb and set the stack pointer there and "pushed" ATAGS in stack + We then substracted vector space and mmu1 + + ffff ffff (Serial debug port base,) ATAGS and stack + | ffff 003c routine address FIQ ffff 0038 routine address IRQ ffff 0034 routine address Reserved @@ -308,31 +296,42 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { ffff 0008 Software interrupt ffff 0004 Undefined instruction ffff 0000 Reset - fffe ffff U-Boot ATAGS end - | Stack - fffe 0000 End of stack - fffd ffff End of kernel + fffe c000 MMU1 + fffa ffff End of kernel + | + xxx0 0000 RAM | */ - /* Adjust "top of memory" pointer */ - mem_upper = kernel_phys; + kernel_phys = mem_upper - total_size_ro - total_size_rw; + kernel_virt = (kernel_phys | 0xfff00000); - kprintf("[BOOT] Physical address of kernel: %p\n", kernel_phys); - kprintf("[BOOT] Virtual address of kernel: %p\n", kernel_virt); + /* Adjust top of memory to last mebibyte (or megabyte...)*/ + mem_upper = AROS_ROUNDDOWN2(kernel_phys, 1024*1024-1); - entry = (void (*)(struct TagItem *))kernel_virt; + tag->ti_Tag = KRN_MEMLower; + tag->ti_Data = mem_lower; + tag++; - initAllocator(kernel_phys, kernel_phys + total_size_ro, kernel_virt - kernel_phys); + tag->ti_Tag = KRN_MEMUpper; + tag->ti_Data = mem_upper; + tag++; tag->ti_Tag = KRN_KernelLowest; tag->ti_Data = kernel_virt; tag++; tag->ti_Tag = KRN_KernelHighest; - tag->ti_Data = kernel_virt + ((total_size_ro + 4095) & ~4095) + ((total_size_rw + 4095) & ~4095); + tag->ti_Data = kernel_virt + ((total_size_ro + 4095) & ~4095) + ((total_size_rw + 4095) & ~4095); // 0xfffe c000 tag++; + kprintf("[BOOT] Physical address of kernel: %p\n", kernel_phys); + kprintf("[BOOT] Virtual address of kernel: %p\n", kernel_virt); + + entry = (void (*)(struct TagItem *))kernel_virt; + + initAllocator(kernel_phys, kernel_phys + total_size_ro, kernel_virt - kernel_phys); + loadElf(&_binary_kernel_bin_start); if (pkg_image && pkg_size) { @@ -390,7 +389,7 @@ void boot(uintptr_t dummy, uintptr_t arch, struct tag *atags) { tag->ti_Data = 0; kprintf("[BOOT] Kernel taglist contains %d entries\n", ((intptr_t)tag - (intptr_t)tags)/sizeof(struct TagItem)); - kprintf("[BOOT] Topmost address for kernel: %p\n", mem_upper); + kprintf("[BOOT] mem_upper: %p\n", mem_upper); if (entry) { /* Set domains - Dom0 is usable, rest is disabled */ diff --git a/arch/arm-sun4i/boot/boot.h b/arch/arm-sun4i/boot/boot.h index 54dd522cdb..0c0f66e0e8 100644 --- a/arch/arm-sun4i/boot/boot.h +++ b/arch/arm-sun4i/boot/boot.h @@ -12,8 +12,13 @@ #include #include #include +#include -#define BOOT_STACK_SIZE 4*10*(4*1024) /* Minimum stack is 4kb (MMU chosen page size) and we need four stacks */ +#define MEM_OFFSET_VECTOR 0x10000 +#define MMU_L1_SIZE (4*4096) +#define MEM_OFFSET_MMU1 (4*4096) +#define MEM_OFFSET_MMU2 (4*256*4096) +#define MEM_OFFSET_STACKS 4*10*1024 const char *remove_path(const char *in); void arm_dcache_invalidate(uint32_t addr, uint32_t length); diff --git a/arch/arm-sun4i/platform/pcDuino/bootlog.txt b/arch/arm-sun4i/platform/pcDuino/bootlog.txt dissimilarity index 65% index b01633d592..829df2b88c 100644 --- a/arch/arm-sun4i/platform/pcDuino/bootlog.txt +++ b/arch/arm-sun4i/platform/pcDuino/bootlog.txt @@ -1,109 +1,120 @@ -U-Boot SPL 2013.10 (Mar 11 2014 - 13:47:49) -Board: pcDuin -o -DRAM: 1024 MiB -CPU: 1008000000Hz, AXI/AHB/APB: 3/2/2 -spl: not an uImage at 1600 - - -U-Boot 2013.10 (Mar 11 2014 - 13:47:49) Allwinner Technology - -CPU: Allwinner A10 (SUN4I) -Board: pcDuino -I2C: ready -DRAM: 1 GiB -MMC: SUNXI SD/MMC: 0 -*** Warning - bad CRC, using default environment - -In: serial -Out: serial -Err: serial -Net: emac -Hit any key to stop autoboot: 3 -\0x08\0x08\0x08 2 -\0x08\0x08\0x08 1 -\0x08\0x08\0x08 0 -reading uEnv.txt -172 bytes read in 5 ms (33.2 KiB/s -) -Loaded environment from uEnv.txt -Running uenvcmd ... -reading boot/uImage-aros -18956 bytes read in 11 ms (1.6 MiB/s) -reading boot/uInitrd-aros -36128 bytes read in 13 ms (2.7 MiB/s) -## Booting kernel from Legacy Image at 48000000 ... - Image Name: AROS Boot - Created: 2014-03-20 17:17:14 UTC - Image Type: ARM Linux Kernel Image (gzip compressed) - Data Size: 18892 Bytes = 18.4 KiB - Load Address: 40010000 - Entry Point: 40010000 - Verifying Checksum ... OK -## Loading init Ramdisk from Legacy Image at 49000000 ... - Image Name: AROS rom - Created: 2014-03-20 17:17:14 UTC - Image Type: ARM Linux RAMDisk Image (uncompressed) - Data Size: 36064 Bytes = 35.2 KiB - Load Address: 00000000 - Entry Point: 00000000 - Verifying Checksum ... OK - Uncompressing Kernel Image ... OK - -Starting kernel ... - -[BOOT] AROS for sun4i (pcDuino) bootstrap -[BOOT] Parsing ATAGS 7ffefb84 -[BOOT] (7ffeffac-7ffeffbf) tag 54410001 (5): IGN... -[BOOT] (7ffeffc0-7ffeffd7) tag 54410009 (6): CMDLine: "debug=serial0" -[BOOT] (7ffeffd8-7ffeffe7) tag 54410002 (4): Memory (40000000-7ffdffff) -[BOOT] (7ffeffe8-7ffefff7) tag 54420005 (4): RAMDISK: (49000040-49008d1f) -[BOOT] (7ffefff8-7ffeffff) tag 00000000 (2): ATAG_NONE -[BOOT] Bootstrap @ 40010000-4001b814 -[BOOT] Topmost address for kernel: 7ffe0000 -[BOOT] Kernel image is a package: -[BOOT] Package size: 35KB -[BOOT] oop.library -[BOOT] utility.library -[BOOT] Physical address of kernel: 7ffc2000 -[BOOT] Virtual address of kernel: fffc2000 -[BOOT] loadElf(40014004) -[BOOT] ELF: RO section loaded at 7ffc2000 (Virtual addr: fffc2000-fffc64cc) -[BOOT] ELF: RO section loaded at 7ffc64cc (Virtual addr: fffc64cc-fffc6dcc) -[BOOT] ELF: RW section loaded at 7ffcd000 (Virtual addr: fffcd000-fffcd300) -[BOOT] ELF: RW section loaded at 7ffcd300 (Virtual addr: fffcd300-fffcd304) -[BOOT] ELF: RW section loaded at 7ffcd310 (Virtual addr: fffcd310-fffdd724) -[BOOT] Kernel image is a package: -[BOOT] Package size: 35KB -[BOOT] oop.library [BOOT] loadElf(49000094) -[BOOT] ELF: RO section loaded at 7ffc6dcc (Virtual addr: fffc6dcc-fffca228) -[BOOT] ELF: RO section loaded at 7ffca228 (Virtual addr: fffca228-fffca654) -[BOOT] ELF: RW section loaded at 7ffdd724 (Virtual addr: fffdd724-fffdd728) -[BOOT] ELF: RW section loaded at 7ffdd728 (Virtual addr: fffdd728-fffdd72c) -[BOOT] utility.library [BOOT] loadElf(49005834) -[BOOT] ELF: RO section loaded at 7ffca654 (Virtual addr: fffca654-fffcc184) -[BOOT] ELF: RO section loaded at 7ffcc184 (Virtual addr: fffcc184-fffcc404) -[BOOT] ELF: RW section loaded at 7ffdd72c (Virtual addr: fffdd72c-fffdd730) -[BOOT] ELF: RW section loaded at 7ffdd730 (Virtual addr: fffdd730-fffdd734) -[BOOT] MMU kernel_phys 7ffc2000 -[BOOT] MMU kernel_virt fffc2000 -[BOOT] MMU mem_lower 40000000 -[BOOT] MMU mem_upper 7ffc2000 -[BOOT] First level MMU page at 7ffbc000 -[BOOT] Kernel mapping page 4095 -[BOOT] Kernel taglist contains 7 entries -[BOOT] Topmost address for kernel: 7ffc2000 -[BOOT] Domain access control register: ffffffff -[BOOT] Heading over to AROS kernel @ fffc2000 - -[KRN] AROS for sun4i (pcDuino) built on Mar 20 2014 starting... -[KRN] BootMsg @ 7ffefb84 -[KRN] Kernel entry @ fffc2000 -[KRN] Kernel c entry @ fffc215c -[KRN] CmdLine: debug=serial0 -[KRN] MemLower: 40000000 -[KRN] MemUpper: 7ffe0000 -[KRN] KernelLowest: fffc2000 -[KRN] KernelHighest: fffe0000 -[KRN] kernelBSS: 4001b014 - +U-Boot SPL 2013.10 (Jul 02 2014 - 17:24:53) +Board: pcDuin +o +DRAM: 1024 MiB +CPU: 1008000000Hz, AXI/AHB/APB: 3/2/2 +spl: not an uImage at 1600 + + +U-Boot 2013.10 (Jul 02 2014 - 17:24:53) Allwinner Technology + +CPU: Allwinner A10 (SUN4I) +Board: pcDuino +I2C: ready +DRAM: 1 GiB +MMC: SUNXI SD/MMC: 0 +*** Warning - bad CRC, using default environment + +In: serial +Out: serial +Err: serial +Net: emac +Hit any key to stop autoboot: 3 +\0x08\0x08\0x08 2 +\0x08\0x08\0x08 1 +\0x08\0x08\0x08 0 +reading uEnv.txt +175 bytes read in 6 ms (28.3 KiB/s +) +Loaded environment from uEnv.txt +Running uenvcmd ... +reading boot/uImage-aros +20110 bytes read in 11 ms (1.7 MiB/s) +reading boot/uInitrd-aros +58092 bytes read in 14 ms (4 MiB/s) +## Booting kernel from Legacy Image at 48000000 ... + Image Name: AROS Boot + Created: 2014-07-02 18:29:01 UTC + Image Type: ARM Linux Kernel Image (gzip compressed) + Data Size: 20046 Bytes = 19.6 KiB + Load Address: 40010000 + Entry Point: 40010000 + Verifying Checksum ... OK +## Loading init Ramdisk from Legacy Image at 49000000 ... + Image Name: AROS rom + Created: 2014-07-02 18:29:01 UTC + Image Type: ARM Linux RAMDisk Image (uncompressed) + Data Size: 58028 Bytes = 56.7 KiB + Load Address: 00000000 + Entry Point: 00000000 + Verifying Checksum ... OK + Uncompressing Kernel Image ... OK + +Starting kernel ... + +[BOOT] AROS for sun4i (pcDuino) bootstrap +[BOOT] Stack @ 7ffffb60 +[BOOT] Parsing ATAGS 7ffffb80 +[BOOT] (7fffffa8-7fffffbb) tag 54410001 (5): IGN... +[BOOT] (7fffffbc-7fffffd7) tag 54410009 (7): CMDLine: "debug = serial 0" +[BOOT] (7fffffd8-7fffffe7) tag 54410002 (4): Memory (40000000-7fffffff) +[BOOT] (7fffffe8-7ffffff7) tag 54420005 (4): RAMDISK: (49000040-4900e2eb) +[BOOT] (7ffffff8-7fffffff) tag 00000000 (2): ATAG_NONE +[BOOT] Bootstrap @ 40010000-4001c814 +[BOOT] Vectors @7fff0000 +[BOOT] MMU1 @7ffec000 + +[BOOT] Kernel image is a package: +[BOOT] Package size: 56KB +[BOOT] i2c.hidd +[BOOT] oop.library +[BOOT] utility.library +[BOOT] Physical address of kernel: 7ffc8000 +[BOOT] Virtual address of kernel: fffc8000 +[BOOT] loadElf(40014004) +[BOOT] ELF: RO section loaded at 7ffc8000 (Virtual addr: fffc8000-fffcca68) +[BOOT] ELF: RO section loaded at 7ffcca68 (Virtual addr: fffcca68-fffcd378) +[BOOT] ELF: RW section loaded at 7ffd8000 (Virtual addr: fffd8000-fffd8320) +[BOOT] ELF: RW section loaded at 7ffd8320 (Virtual addr: fffd8320-fffd8324) +[BOOT] ELF: RW section loaded at 7ffd8330 (Virtual addr: fffd8330-fffe8744) + +[BOOT] Kernel image is a package: + +[BOOT] Package size: 56KB +[BOOT] i2c.hidd [BOOT] loadElf(4900009c) +[BOOT] ELF: RO section loaded at 7ffcd378 (Virtual addr: fffcd378-fffd0828) +[BOOT] ELF: RO section loaded at 7ffd0828 (Virtual addr: fffd0828-fffd0ca8) +[BOOT] ELF: RW section loaded at 7ffe8744 (Virtual addr: fffe8744-fffe8748) +[BOOT] ELF: RW section loaded at 7ffe8748 (Virtual addr: fffe8748-fffe8758) +[BOOT] oop.library [BOOT] loadElf(49005660) +[BOOT] ELF: RO section loaded at 7ffd0ca8 (Virtual addr: fffd0ca8-fffd4104) +[BOOT] ELF: RO section loaded at 7ffd4104 (Virtual addr: fffd4104-fffd4530) +[BOOT] ELF: RW section loaded at 7ffe8758 (Virtual addr: fffe8758-fffe875c) +[BOOT] ELF: RW section loaded at 7ffe875c (Virtual addr: fffe875c-fffe8760) +[BOOT] utility.library [BOOT] loadElf(4900ae00) +[BOOT] ELF: RO section loaded at 7ffd4530 (Virtual addr: fffd4530-fffd6060) +[BOOT] ELF: RO section loaded at 7ffd6060 (Virtual addr: fffd6060-fffd62e0) +[BOOT] ELF: RW section loaded at 7ffe8760 (Virtual addr: fffe8760-fffe8764) +[BOOT] ELF: RW section loaded at 7ffe8764 (Virtual addr: fffe8764-fffe8768) +[BOOT] MMU kernel_phys 7ffc8000 +[BOOT] MMU kernel_virt fffc8000 +[BOOT] MMU mem_lower 40000000 +[BOOT] MMU mem_upper 7fefffff +[BOOT] First level MMU page at 7ffec000 +[BOOT] Kernel mapping page 4095 phys 7ff00000 -> virt fff00000 +[BOOT] Kernel taglist contains 7 entries +[BOOT] mem_upper: 7ff00000 +[BOOT] Domain access control register: ffffffff +[BOOT] Heading over to AROS kernel @ fffc8000 + +[KRN] AROS for sun4i (pcDuino) built on Jul 2 2014 starting... +[KRN] BootMsg @ 7ffffb80 +[KRN] Kernel entry @ fffc8000 +[KRN] Kernel c entry @ fffc815c +[KRN] Early MMU @ 00000000 +[KRN] CmdLine: debug = serial 0 +[KRN] MemLower: 40000000 +[KRN] MemUpper: 7ff00000 +[KRN] KernelLowest: fffc8000 +[KRN] KernelHighest: fffec000 +[KRN] kernelBSS: 4001c014 -- 2.11.4.GIT