hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
/*
 * A lowlevel_init function that sets up the stack to call a C function to
 * perform further init.
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#include <asm-offsets.h>
#include <config.h>
#include <linux/linkage.h>
 
ENTRY(lowlevel_init)
   /*
    * Setup a temporary stack. Global data is not available yet.
    */
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
   ldr    w0, =CONFIG_SPL_STACK
#else
   ldr    w0, =CONFIG_SYS_INIT_SP_ADDR
#endif
   bic    sp, x0, #0xf    /* 16-byte alignment for ABI compliance */
 
   /*
    * Save the old LR(passed in x29) and the current LR to stack
    */
   stp    x29, x30, [sp, #-16]!
 
   /*
    * 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
   ldp    x29, x30, [sp]
   ret
ENDPROC(lowlevel_init)