From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ziyuan Xu Date: Tue, 12 Jul 2016 10:05:30 +0800 Subject: [U-Boot] [PATCH v3] rockchip: rk3288: Change method of loading u-boot In-Reply-To: References: <1467016205-2859-1-git-send-email-xzy.xu@rock-chips.com> Message-ID: <5784506A.7040607@rock-chips.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de hi Simon, On 2016?07?12? 07:29, Simon Glass wrote: > Hi Ziyuan, > > On 27 June 2016 at 02:30, Ziyuan Xu wrote: >> From: Xu Ziyuan >> >> If we would like to boot from SD card, we have to implement mmc driver >> in SPL stage, and get a slightly large spl binrary. RK3288's bootrom code >> has the ability to load spl and u-boot, then boot. >> >> If CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM is enabled, the spl will >> return to bootrom in board_init_f(), then bootrom load u-boot binrary. >> >> This patch does that. >> >> Loading sequence after rework: >> bootrom ==> spl ==> bootrom ==> u-boot >> >> Signed-off-by: Ziyuan Xu >> --- >> >> Changes in v3: >> - Add CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM for enabling this feature >> - Update doc/README.rockchip to instruct how to use it >> - Detailed commit message >> >> Changes in v2: >> - Add sdcard iomux initlization in board_init() to fix sdmmc command >> sending timeout issue when booting from eMMC > Acked-by: Simon Glass > > I'm going to apply this, but please can you send a follow-up patch (to > u-boot-rockchip/testing) to fix the nits below? This patch had already apply to u-boot/rockchip, I can't revise commit' nits. I had revise the glitches according to your opinion. May I send patch V4, and you revert the former commit? > >> arch/arm/mach-rockchip/Makefile | 1 + >> arch/arm/mach-rockchip/board.c | 33 ++++++++++++++++++++++ >> arch/arm/mach-rockchip/rk3036/Makefile | 1 - >> arch/arm/mach-rockchip/rk3288-board-spl.c | 5 +++- >> .../mach-rockchip/{rk3036 => }/save_boot_param.S | 2 +- >> doc/README.rockchip | 14 +++++++++ >> include/configs/rk3288_common.h | 4 +++ >> 7 files changed, 57 insertions(+), 3 deletions(-) >> rename arch/arm/mach-rockchip/{rk3036 => }/save_boot_param.S (90%) >> >> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile >> index 55567cb..8e0c0ab 100644 >> --- a/arch/arm/mach-rockchip/Makefile >> +++ b/arch/arm/mach-rockchip/Makefile >> @@ -7,6 +7,7 @@ >> ifdef CONFIG_SPL_BUILD >> obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o >> obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o >> +obj-y += save_boot_param.o >> else >> obj-$(CONFIG_ROCKCHIP_RK3288) += board.o >> endif >> diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c >> index 816540e..bcb2c9e 100644 >> --- a/arch/arm/mach-rockchip/board.c >> +++ b/arch/arm/mach-rockchip/board.c >> @@ -10,12 +10,45 @@ >> #include >> #include >> #include >> +#include >> +#include >> +#include >> >> DECLARE_GLOBAL_DATA_PTR; >> >> int board_init(void) >> { >> +#ifdef CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM > How about CONFIG_ROCKCHIP_SPL_BACK_TO_BROM? > > I think this could be implemented for any SoC. > > Also please add this to Kconfig as we should not be adding new CONFIG > options that are not in Kconfig. > >> + 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) >> diff --git a/arch/arm/mach-rockchip/rk3036/Makefile b/arch/arm/mach-rockchip/rk3036/Makefile >> index 97d299d..6095777 100644 >> --- a/arch/arm/mach-rockchip/rk3036/Makefile >> +++ b/arch/arm/mach-rockchip/rk3036/Makefile >> @@ -10,4 +10,3 @@ obj-y += syscon_rk3036.o >> endif >> >> obj-y += sdram_rk3036.o >> -obj-y += save_boot_param.o >> diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c >> index e133cca..5de060c 100644 >> --- a/arch/arm/mach-rockchip/rk3288-board-spl.c >> +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c >> @@ -149,7 +149,7 @@ static int configure_emmc(struct udevice *pinctrl) >> return 0; >> } >> #endif >> - >> +extern void back_to_bootrom(void); >> void board_init_f(ulong dummy) >> { >> struct udevice *pinctrl; >> @@ -204,6 +204,9 @@ void board_init_f(ulong dummy) >> debug("DRAM init failed: %d\n", ret); >> return; >> } >> +#ifdef CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM >> + back_to_bootrom(); >> +#endif >> } >> >> static int setup_led(void) >> diff --git a/arch/arm/mach-rockchip/rk3036/save_boot_param.S b/arch/arm/mach-rockchip/save_boot_param.S >> similarity index 90% >> rename from arch/arm/mach-rockchip/rk3036/save_boot_param.S >> rename to arch/arm/mach-rockchip/save_boot_param.S >> index 778ec83..85b407b 100644 >> --- a/arch/arm/mach-rockchip/rk3036/save_boot_param.S >> +++ b/arch/arm/mach-rockchip/save_boot_param.S >> @@ -1,5 +1,5 @@ >> /* >> - * (C) Copyright 2015 Google, Inc >> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd >> * >> * SPDX-License-Identifier: GPL-2.0+ >> */ >> diff --git a/doc/README.rockchip b/doc/README.rockchip >> index e0572c8..4c6a04e 100644 >> --- a/doc/README.rockchip >> +++ b/doc/README.rockchip >> @@ -119,6 +119,20 @@ something like: >> Hit any key to stop autoboot: 0 >> => >> >> +The rockchip bootrom could load and boot an initial spl, then continue to > s/could/can/ > >> +load a second level bootloader(ie. u-boot) as soon as it return to bootrom. > second-level > > U-Boot > > s/return/returns > >> +Therefore RK3288 has another loading sequence like RK3036. The option of >> +U-Boot is controlled with this setting in U-Boot: >> + >> + #define CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM > If you make this a generic Rockchip option then it should be enabled > for RK3036 by default. > >> + >> +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. >> >> For evb_rk3036 board: >> diff --git a/include/configs/rk3288_common.h b/include/configs/rk3288_common.h >> index 9d50d83..3574d57 100644 >> --- a/include/configs/rk3288_common.h >> +++ b/include/configs/rk3288_common.h >> @@ -33,7 +33,11 @@ >> #define CONFIG_SYS_NS16550_MEM32 >> #define CONFIG_SPL_BOARD_INIT >> >> +#ifndef CONFIG_ROCKCHIP_RK3288_SPL_BACKTO_BROM >> #define CONFIG_SYS_TEXT_BASE 0x00100000 >> +#else >> +#define CONFIG_SYS_TEXT_BASE 0x00000000 >> +#endif > Can you flip that to an ifdef? > > Also please add a comment as to why it needs to be 0. > >> #define CONFIG_SYS_INIT_SP_ADDR 0x00100000 >> #define CONFIG_SYS_LOAD_ADDR 0x00800800 >> #define CONFIG_SPL_STACK 0xff718000 >> -- >> 1.9.1 >> >> > Regards, > Simon > > >