diff options
author | Xu Ziyuan <xzy.xu@rock-chips.com> | 2016-07-12 19:09:49 +0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-07-25 20:44:18 -0600 |
commit | b47ea79219f1de43fa21456c6c60c8390b8755d2 (patch) | |
tree | 7639d25c4dba2ed0fc87bd153111ba33a1dc2fa7 /arch/arm/mach-rockchip/board.c | |
parent | 4579720412744dd13266a3505bb38ce2da819b4f (diff) | |
download | u-boot-imx-b47ea79219f1de43fa21456c6c60c8390b8755d2.zip u-boot-imx-b47ea79219f1de43fa21456c6c60c8390b8755d2.tar.gz u-boot-imx-b47ea79219f1de43fa21456c6c60c8390b8755d2.tar.bz2 |
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>
Diffstat (limited to 'arch/arm/mach-rockchip/board.c')
-rw-r--r-- | arch/arm/mach-rockchip/board.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c index 816540e..b07e073 100644 --- a/arch/arm/mach-rockchip/board.c +++ b/arch/arm/mach-rockchip/board.c @@ -10,12 +10,45 @@ #include <ram.h> #include <asm/io.h> #include <asm/arch/clock.h> +#include <asm/arch/periph.h> +#include <asm/gpio.h> +#include <dm/pinctrl.h> DECLARE_GLOBAL_DATA_PTR; 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; +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) |