blob: 2ffc298f061b3e7704e89dd634ece905ff13dcf4 [file] [log] [blame]
Kyle Swenson8d8f6542021-03-15 11:02:55 -06001/*
2 * Startup code for use with the u-boot bootloader.
3 *
4 * Copyright (C) 2004-2006 Atmel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <asm/setup.h>
11#include <asm/thread_info.h>
12#include <asm/sysreg.h>
13
14 /*
15 * The kernel is loaded where we want it to be and all caches
16 * have just been flushed. We get two parameters from u-boot:
17 *
18 * r12 contains a magic number (ATAG_MAGIC)
19 * r11 points to a tag table providing information about
20 * the system.
21 */
22 .section .init.text,"ax"
23 .global _start
24_start:
25 /* Initialize .bss */
26 lddpc r2, bss_start_addr
27 lddpc r3, end_addr
28 mov r0, 0
29 mov r1, 0
301: st.d r2++, r0
31 cp r2, r3
32 brlo 1b
33
34 /* Initialize status register */
35 lddpc r0, init_sr
36 mtsr SYSREG_SR, r0
37
38 /* Set initial stack pointer */
39 lddpc sp, stack_addr
40 sub sp, -THREAD_SIZE
41
42#ifdef CONFIG_FRAME_POINTER
43 /* Mark last stack frame */
44 mov lr, 0
45 mov r7, 0
46#endif
47
48 /* Check if the boot loader actually provided a tag table */
49 lddpc r0, magic_number
50 cp.w r12, r0
51 brne no_tag_table
52
53 /*
54 * Save the tag table address for later use. This must be done
55 * _after_ .bss has been initialized...
56 */
57 lddpc r0, tag_table_addr
58 st.w r0[0], r11
59
60 /* Jump to loader-independent setup code */
61 rjmp kernel_entry
62
63 .align 2
64magic_number:
65 .long ATAG_MAGIC
66tag_table_addr:
67 .long bootloader_tags
68bss_start_addr:
69 .long __bss_start
70end_addr:
71 .long _end
72init_sr:
73 .long 0x007f0000 /* Supervisor mode, everything masked */
74stack_addr:
75 .long init_thread_union
76panic_addr:
77 .long panic
78
79no_tag_table:
80 sub r12, pc, (. - 2f)
81 /* branch to panic() which can be far away with that construct */
82 lddpc pc, panic_addr
832: .asciz "Boot loader didn't provide correct magic number\n"