[REACTOS]
[reactos.git] / reactos / boot / armllb / boot.s
1 /*
2 * PROJECT: ReactOS Boot Loader
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: boot/armllb/boot.s
5 * PURPOSE: Implements the entry point for ARM machines
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9 .title "ARM LLB Entry Point"
10 .include "ntoskrnl/include/internal/arm/kxarm.h"
11 .include "ntoskrnl/include/internal/arm/ksarm.h"
12
13 NESTED_ENTRY _start
14 PROLOG_END _start
15
16 #ifdef _BEAGLE_ // This is only used for TI BootROM on Beagle/Emulator for now
17 /*
18 * On Beagle, the boot is directly from TI BootROM that reads NAND flash.
19 * First word is size of program to load.
20 * Second word is load address of program. Since DDR is not initialized,
21 * we load to SDRAM at 40200000h. Max 64K.
22 */
23 .word 0x8000
24 .word 0x40200000
25 #elif _ZOOM2_
26 /*
27 * On ZOOM2, we currently load from u-boot to make bring-up easier.
28 *
29 * In order to get ATAG and all that goodness, we have to fool u-boot into
30 * thinking we are a Linux ARM kernel.
31 *
32 * So this is a 'fake' uImage-format header, which will make u-boot grok our
33 * image and correctly execute it.
34 *
35 * Note that a data checksum is in the header, but thankfully we can disable
36 * the check.
37 *
38 * There's also a header checksum, but as long as there's no need to modify
39 * this header, we can leave it static.
40 *
41 * Finally, note that the "Image String" is sized as a 32-byte array in the
42 * uImage header format. The string chosen below is not only accurate, but
43 * also happens to fit exactly in 32 bytes, meaning we don't need to pad.
44 */
45 .word 0x56190527 // Header Magic
46 .word 0x5E4B8444 // Checksum
47 .word 0x483BE54C // Timestamp
48 .word 0x0CA10000 // Image size (64K)
49 .word 0x00000081 // Load address
50 .word 0x40000081 // Entrypoint
51 .word 0x90873DD8 // Data Checksum ('setenv verify n' must be set!)
52 .byte 5 // Linux OS
53 .byte 2 // ARM
54 .byte 2 // Kernel
55 .byte 0 // No compression
56 .ascii "ReactOS ARM Low-Level Bootloader"
57 #endif
58
59 /* Load C entrypoint and setup LLB stack */
60 ldr lr, L_LlbStartup
61 ldr sp, L_BootStackEnd
62 bx lr
63 ENTRY_END _start
64
65 L_BootStackEnd:
66 #ifdef _BEAGLE_ // This is only used for TI BootROM on Beagle/Emulator for now
67 .long 0x00010000
68 #elif _ZOOM2_ // On ZOOM2 RAM starts at 0x80000000, not 0
69 .long 0x81014000
70 #else
71 #error Stack Address Not Defined
72 #endif
73
74 L_LlbStartup:
75 .long LlbStartup
76
77 /* EOF */