[003-u-boot-Exynos4412] 移植SPL阶段

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengfei240/article/details/77540446

0. 前言

本文以Exynos4412芯片为例,介绍了SPL阶段的软件流程。
具体代码可以参考:uboot code

1. SPL介绍

SPL(Secondary Program Loader)是uboot第一阶段执行的代码。主要负责初始化CPU Core,系统时钟和DRAM控制器等,并搬移uboot第二阶段的代码到系统内存中运行。SPL一般是由固化在芯片内部的ROM引导的。

2. SPL配置项

  • CONFIG_SPL
    使能SPL

  • CONFIG_SUPPORT_SPL
    Board是否支持SPL

  • CONFIG_SPL_GPIO_SUPPORT
    SPL是否支持GPIO驱动

  • CONFIG_SPL_SERIAL_SUPPORT
    SPL是否支持UART功能

  • CONFIG_SPL_DM_SERIAL
    SPL是否支持UART驱动

  • CONFIG_SPL_MAX_SIZE
    SPL镜像的最大尺寸

  • CONFIG_SPL_TEXT_BASE
    SPL镜像的运行地址

  • CONFIG_SPL_STACK
    SPL镜像的堆栈地址

  • CONFIG_SPL_BUILD
    非用户配置项,在编译过程中由Makefile自动加入到编译参数中。用户可以在代码中根据该宏判断当前编译的是SPL还是uboot

  • CONFIG_SPL_FRAMEWORK
    是否支持SPL框架,因为exynos系列在mach中实现了独立的SPL框架,所以不使能该配置项

2. SPL软件流程

3. SPL详细流程

crt0.S

#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
    ldr r0, =(CONFIG_SPL_STACK)
#else
    ldr r0, =(CONFIG_SYS_INIT_SP_ADDR)
#endif
    bic r0, r0, #7  /* 8-byte alignment for ABI compliance */
    mov sp, r0
    bl  board_init_f_alloc_reserve
    mov sp, r0
    /* set up gd here, outside any C code */
    mov r9, r0
    bl  board_init_f_init_reserve

    mov r0, #0
    bl  board_init_f

主要功能:
1. 设置初始的堆栈
2. 分配malloc和global data所需的空间,并16bits对齐
3. 初始化global data
4. 调用board_init_f接口

lowlevel.c

cpu_info.c

#ifdef CONFIG_ARCH_CPU_INIT
int arch_cpu_init(void)
{
    s5p_set_cpu_id();

    return 0;
}
#endif

该文件的主要功能就是配置cpu_id,这样后面就可以使用cpu_is_xxx之类的接口选择外设的不同基地址或寄存器组。

power.c

static void exynos4412_set_ps_hold_ctrl(void)
{
    struct exynos4_power *power =
        (struct exynos4_power *)samsung_get_base_power();

    /* Set PS-Hold high */
    setbits_le32(&power->ps_hold_control,
            EXYNOS_PS_HOLD_CONTROL_EN |
            EXYNOS_PS_HOLD_CONTROL_DATA_HIGH);
}

该接口给外部的PMU芯片提供PS Hold on信号。

clock_init_exynos4412.c

该部分的内容请参见 Clock Management Unit

dmc_init_exynos4412.c

该部分的内容请参见 Dynamic Memory Controller.pdf

spl_boot.c

spl_boot主要负责拷贝镜像和从iRAM中跳至RAM运行uboot第二阶段的代码。

猜你喜欢

转载自blog.csdn.net/pengfei240/article/details/77540446