This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM5728: SPL and U-boot code flow

Part Number: AM5728


Tool/software: Linux

Hi ,

I am trying to understand the code flow of both SPL and u-boot.

I am using ti-processor-sdk-linux-am57xx-evm-04.02.00.09.

Please help me in understanding the code flow of SPL as well as U-boot.

In case of earlier GLSDK u-boot code flow:

s_init->board_init_f-()>board_init_r()

s_init() is called from lowlevel_init.S

arch/arm/lib/spl.c board_init_f() called common/spl/spl.c of board_init_r

But the same flow i am not finding in my current PSDK U-boot.

Regards,
Biswajit

  • Hello Biswajit,

    Please, read this article below quoted from the README file and you will understand the code flow of SPL as well as U-boot.

    Board Initialisation Flow:
    --------------------------

    This is the intended start-up flow for boards. This should apply for both
    SPL and U-Boot proper (i.e. they both follow the same rules).

    Note: "SPL" stands for "Secondary Program Loader," which is explained in
    more detail later in this file.

    At present, SPL mostly uses a separate code path, but the function names
    and roles of each function are the same. Some boards or architectures
    may not conform to this. At least most ARM boards which use
    CONFIG_SPL_FRAMEWORK conform to this.

    Execution typically starts with an architecture-specific (and possibly
    CPU-specific) start.S file, such as:

    - arch/arm/cpu/armv7/start.S
    - arch/powerpc/cpu/mpc83xx/start.S
    - arch/mips/cpu/start.S

    and so on. From there, three functions are called; the purpose and
    limitations of each of these functions are described below.

    lowlevel_init():
    - purpose: essential init to permit execution to reach board_init_f()
    - no global_data or BSS
    - there is no stack (ARMv7 may have one but it will soon be removed)
    - must not set up SDRAM or use console
    - must only do the bare minimum to allow execution to continue to
    board_init_f()
    - this is almost never needed
    - return normally from this function

    board_init_f():
    - purpose: set up the machine ready for running board_init_r():
    i.e. SDRAM and serial UART
    - global_data is available
    - stack is in SRAM
    - BSS is not available, so you cannot use global/static variables,
    only stack variables and global_data

    Non-SPL-specific notes:
    - dram_init() is called to set up DRAM. If already done in SPL this
    can do nothing

    SPL-specific notes:
    - you can override the entire board_init_f() function with your own
    version as needed.
    - preloader_console_init() can be called here in extremis
    - should set up SDRAM, and anything needed to make the UART work
    - these is no need to clear BSS, it will be done by crt0.S
    - must return normally from this function (don't call board_init_r()
    directly)

    Here the BSS is cleared. For SPL, if CONFIG_SPL_STACK_R is defined, then at
    this point the stack and global_data are relocated to below
    CONFIG_SPL_STACK_R_ADDR. For non-SPL, U-Boot is relocated to run at the top of
    memory.

    board_init_r():
    - purpose: main execution, common code
    - global_data is available
    - SDRAM is available
    - BSS is available, all static/global variables can be used
    - execution eventually continues to main_loop()

    Non-SPL-specific notes:
    - U-Boot is relocated to the top of memory and is now running from
    there.

    SPL-specific notes:
    - stack is optionally in SDRAM, if CONFIG_SPL_STACK_R is defined and
    CONFIG_SPL_STACK_R_ADDR points into SDRAM
    - preloader_console_init() can be called here - typically this is
    done by defining CONFIG_SPL_BOARD_INIT and then supplying a
    spl_board_init() function containing this call
    - loads U-Boot or (in falcon mode) Linux

    If you are not finding the exact code flow on your current PSDK U-boot, please explore how you can benefit from the advantages of grep command.

    Best regards,
    Kemal