hc
2023-05-31 43fd8d44e8182b691c8ee61d487cec02ca11afd2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * A lowlevel_init function that sets up the stack to call a C function to
 * perform further init.
 *
 * (C) Copyright 2010
 * Texas Instruments, <www.ti.com>
 *
 * Author :
 *    Aneesh V    <aneesh@ti.com>
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <asm-offsets.h>
#include <config.h>
#include <linux/linkage.h>
 
.pushsection .text.s_init, "ax"
WEAK(s_init)
   bx    lr
ENDPROC(s_init)
.popsection
 
.pushsection .text.lowlevel_init, "ax"
WEAK(lowlevel_init)
   /*
    * Setup a temporary stack. Global data is not available yet.
    */
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
   ldr    sp, =CONFIG_SPL_STACK
#else
   ldr    sp, =CONFIG_SYS_INIT_SP_ADDR
#endif
   bic    sp, sp, #7 /* 8-byte alignment for ABI compliance */
#ifdef CONFIG_SPL_DM
   mov    r9, #0
#else
   /*
    * Set up global data for boards that still need it. This will be
    * removed soon.
    */
#ifdef CONFIG_SPL_BUILD
   ldr    r9, =gdata
#else
   sub    sp, sp, #GD_SIZE
   bic    sp, sp, #7
   mov    r9, sp
#endif
#endif
   /*
    * Save the old lr(passed in ip) and the current lr to stack
    */
   push    {ip, lr}
 
   /*
    * Call the very early init function. This should do only the
    * absolute bare minimum to get started. It should not:
    *
    * - set up DRAM
    * - use global_data
    * - clear BSS
    * - try to start a console
    *
    * For boards with SPL this should be empty since SPL can do all of
    * this init in the SPL board_init_f() function which is called
    * immediately after this.
    */
   bl    s_init
   pop    {ip, pc}
ENDPROC(lowlevel_init)
.popsection