Message ID | 1467016205-2859-1-git-send-email-xzy.xu@rock-chips.com |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
Hi Ziyuan, On 27 June 2016 at 02:30, Ziyuan Xu <xzy.xu@rock-chips.com> wrote: > From: Xu Ziyuan <xzy.xu@rock-chips.com> > > 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 <xzy.xu@rock-chips.com> > --- > > 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 <sjg@chromium.org> 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? > > 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 <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_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
On 27 June 2016 at 02:30, Ziyuan Xu <xzy.xu@rock-chips.com> wrote: > From: Xu Ziyuan <xzy.xu@rock-chips.com> > > 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 <xzy.xu@rock-chips.com> > --- > > 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 > > 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%) > Applied to u-boot-rockchip, thanks!
hi Simon, On 2016年07月12日 07:29, Simon Glass wrote: > Hi Ziyuan, > > On 27 June 2016 at 02:30, Ziyuan Xu <xzy.xu@rock-chips.com> wrote: >> From: Xu Ziyuan <xzy.xu@rock-chips.com> >> >> 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 <xzy.xu@rock-chips.com> >> --- >> >> 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 <sjg@chromium.org> > > 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 <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_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 > > >
Hi, On Jul 11, 2016 20:06, "Ziyuan Xu" <xzy.xu@rock-chips.com> wrote: > > hi Simon, > > > On 2016年07月12日 07:29, Simon Glass wrote: >> >> Hi Ziyuan, >> >> On 27 June 2016 at 02:30, Ziyuan Xu <xzy.xu@rock-chips.com> wrote: >>> >>> From: Xu Ziyuan <xzy.xu@rock-chips.com> >>> >>> 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 <xzy.xu@rock-chips.com> >>> --- >>> >>> 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 <sjg@chromium.org> >> >> 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? Yes, either that or a new patch with your changes is fine. Regards, Simon > >> >>> 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 <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_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 >> >> >> > >
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 <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_RK3288_SPL_BACKTO_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) 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 +load a second level bootloader(ie. u-boot) as soon as it return 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_RK3288_SPL_BACKTO_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. 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 #define CONFIG_SYS_INIT_SP_ADDR 0x00100000 #define CONFIG_SYS_LOAD_ADDR 0x00800800 #define CONFIG_SPL_STACK 0xff718000