mirror of
https://xff.cz/git/u-boot/
synced 2025-09-29 22:41:17 +02:00
rockchip: add option to change method of loading u-boot
If we would like to boot from SD card, we have to implement mmc driver in SPL stage, and get a slightly large SPL binary. Rockchip SoC's bootrom code has the ability to load spl and u-boot, then boot. If CONFIG_ROCKCHIP_SPL_BACK_TO_BROM is enabled, the spl will return to bootrom in board_init_f(), then bootrom loads u-boot binary. Loading sequence after rework: bootrom ==> spl ==> bootrom ==> u-boot Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com> Acked-by: Simon Glass <sjg@chromium.org> Fixed up spelling of U-Boot, boorom, opinion->option, Rochchip: Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -17,6 +17,14 @@ config ROCKCHIP_RK3036
|
|||||||
and video codec support. Peripherals include Gigabit Ethernet,
|
and video codec support. Peripherals include Gigabit Ethernet,
|
||||||
USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.
|
USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.
|
||||||
|
|
||||||
|
config ROCKCHIP_SPL_BACK_TO_BROM
|
||||||
|
bool "SPL returns to bootrom"
|
||||||
|
default y if ROCKCHIP_RK3036
|
||||||
|
help
|
||||||
|
Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled,
|
||||||
|
SPL will return to the boot rom, which will then load the U-Boot
|
||||||
|
binary to keep going on.
|
||||||
|
|
||||||
source "arch/arm/mach-rockchip/rk3288/Kconfig"
|
source "arch/arm/mach-rockchip/rk3288/Kconfig"
|
||||||
source "arch/arm/mach-rockchip/rk3036/Kconfig"
|
source "arch/arm/mach-rockchip/rk3036/Kconfig"
|
||||||
endif
|
endif
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
ifdef CONFIG_SPL_BUILD
|
ifdef CONFIG_SPL_BUILD
|
||||||
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o
|
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o
|
||||||
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
|
obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
|
||||||
|
obj-$(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) += save_boot_param.o
|
||||||
else
|
else
|
||||||
obj-$(CONFIG_ROCKCHIP_RK3288) += board.o
|
obj-$(CONFIG_ROCKCHIP_RK3288) += board.o
|
||||||
endif
|
endif
|
||||||
|
@@ -10,12 +10,45 @@
|
|||||||
#include <ram.h>
|
#include <ram.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/periph.h>
|
||||||
|
#include <asm/gpio.h>
|
||||||
|
#include <dm/pinctrl.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
int board_init(void)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM
|
||||||
|
struct udevice *pinctrl;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to implement sdcard iomux here for the further
|
||||||
|
* initlization, otherwise, it'll hit sdcard command sending
|
||||||
|
* timeout exception.
|
||||||
|
*/
|
||||||
|
ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
|
||||||
|
if (ret) {
|
||||||
|
debug("%s: Cannot find pinctrl device\n", __func__);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_SDCARD);
|
||||||
|
if (ret) {
|
||||||
|
debug("%s: Failed to set up SD card\n", __func__);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
err:
|
||||||
|
printf("board_init: Error %d\n", ret);
|
||||||
|
|
||||||
|
/* No way to report error here */
|
||||||
|
hang();
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int dram_init(void)
|
int dram_init(void)
|
||||||
|
@@ -10,4 +10,3 @@ obj-y += syscon_rk3036.o
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
obj-y += sdram_rk3036.o
|
obj-y += sdram_rk3036.o
|
||||||
obj-y += save_boot_param.o
|
|
||||||
|
@@ -149,7 +149,7 @@ static int configure_emmc(struct udevice *pinctrl)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
extern void back_to_bootrom(void);
|
||||||
void board_init_f(ulong dummy)
|
void board_init_f(ulong dummy)
|
||||||
{
|
{
|
||||||
struct udevice *pinctrl;
|
struct udevice *pinctrl;
|
||||||
@@ -204,6 +204,9 @@ void board_init_f(ulong dummy)
|
|||||||
debug("DRAM init failed: %d\n", ret);
|
debug("DRAM init failed: %d\n", ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM
|
||||||
|
back_to_bootrom();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int setup_led(void)
|
static int setup_led(void)
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* (C) Copyright 2015 Google, Inc
|
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
*/
|
*/
|
@@ -119,6 +119,20 @@ something like:
|
|||||||
Hit any key to stop autoboot: 0
|
Hit any key to stop autoboot: 0
|
||||||
=>
|
=>
|
||||||
|
|
||||||
|
The rockchip bootrom can load and boot an initial spl, then continue to
|
||||||
|
load a second-level bootloader(ie. U-BOOT) as soon as it returns to bootrom.
|
||||||
|
Therefore RK3288 has another loading sequence like RK3036. The option of
|
||||||
|
U-Boot is controlled with this setting in U-Boot:
|
||||||
|
|
||||||
|
#define CONFIG_ROCKCHIP_SPL_BACK_TO_BROM
|
||||||
|
|
||||||
|
You can create the image via the following operations:
|
||||||
|
|
||||||
|
./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
|
||||||
|
firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
|
||||||
|
cat firefly-rk3288/u-boot-dtb.bin >> out && \
|
||||||
|
sudo dd if=out of=/dev/sdc seek=64
|
||||||
|
|
||||||
If you have an HDMI cable attached you should see a video console.
|
If you have an HDMI cable attached you should see a video console.
|
||||||
|
|
||||||
For evb_rk3036 board:
|
For evb_rk3036 board:
|
||||||
|
@@ -33,7 +33,12 @@
|
|||||||
#define CONFIG_SYS_NS16550_MEM32
|
#define CONFIG_SYS_NS16550_MEM32
|
||||||
#define CONFIG_SPL_BOARD_INIT
|
#define CONFIG_SPL_BOARD_INIT
|
||||||
|
|
||||||
|
#ifdef CONFIG_ROCKCHIP_SPL_BACK_TO_BROM
|
||||||
|
/* Bootrom will load u-boot binary to 0x0 once return from SPL */
|
||||||
|
#define CONFIG_SYS_TEXT_BASE 0x00000000
|
||||||
|
#else
|
||||||
#define CONFIG_SYS_TEXT_BASE 0x00100000
|
#define CONFIG_SYS_TEXT_BASE 0x00100000
|
||||||
|
#endif
|
||||||
#define CONFIG_SYS_INIT_SP_ADDR 0x00100000
|
#define CONFIG_SYS_INIT_SP_ADDR 0x00100000
|
||||||
#define CONFIG_SYS_LOAD_ADDR 0x00800800
|
#define CONFIG_SYS_LOAD_ADDR 0x00800800
|
||||||
#define CONFIG_SPL_STACK 0xff718000
|
#define CONFIG_SPL_STACK 0xff718000
|
||||||
|
Reference in New Issue
Block a user