* [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct @ 2017-10-11 6:59 Andy Yan 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan ` (3 more replies) 0 siblings, 4 replies; 19+ messages in thread From: Andy Yan @ 2017-10-11 6:59 UTC (permalink / raw) To: u-boot the board enter download firmware mode, some boards use a adc to detect the key status, and some use a gpio. This series try to implement all the download mode related functions on the base of Dr. Philipp's patch[0]. [0]https://lists.denx.de/pipermail/u-boot/2017-October/309060.html Changes in v3: - add support for rk3188 - rebase on Dr. Philipp's series Changes in v2: - correct the rk322x boot mode register address - make the help text more clear - implement the back to bootrom download mode check in c, thanks for Dr. Philipp Tomsich's suggestion. - more document - move adc key detect as the default Andy Yan (3): rockchip: make boot_mode related codes reused across all platforms rockchip: add support for enter to bootrom download mode rockchip: check download key before bootup arch/arm/include/asm/arch-rockchip/boot_mode.h | 6 ++ arch/arm/mach-rockchip/Kconfig | 16 ++++++ arch/arm/mach-rockchip/Makefile | 6 ++ arch/arm/mach-rockchip/boot_mode.c | 76 ++++++++++++++++++++++++++ arch/arm/mach-rockchip/bootrom.c | 47 +++++++++++++++- arch/arm/mach-rockchip/rk3036-board.c | 24 -------- arch/arm/mach-rockchip/rk3188-board.c | 1 + arch/arm/mach-rockchip/rk322x-board.c | 24 -------- arch/arm/mach-rockchip/rk3288-board.c | 25 --------- arch/arm/mach-rockchip/rk3399-board.c | 14 +++++ 10 files changed, 164 insertions(+), 75 deletions(-) create mode 100644 arch/arm/mach-rockchip/boot_mode.c create mode 100644 arch/arm/mach-rockchip/rk3399-board.c -- 2.7.4 ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-10-11 6:59 [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan @ 2017-10-11 7:00 ` Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich ` (2 more replies) 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan ` (2 subsequent siblings) 3 siblings, 3 replies; 19+ messages in thread From: Andy Yan @ 2017-10-11 7:00 UTC (permalink / raw) To: u-boot setup_boot_mode function use the same logic but different mode register address across all the rockchip platforms, so it's better to make this function reused across all the platforms, and let the mode register address setting from the config file. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Reviewed-by: Simon Glass <sjg@chromium.org> --- Changes in v3: - add support for rk3188 Changes in v2: - correct the rk322x boot mode register address - make the help text more clear arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ arch/arm/mach-rockchip/Makefile | 6 +++++ arch/arm/mach-rockchip/boot_mode.c | 33 ++++++++++++++++++++++++++ arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- arch/arm/mach-rockchip/rk3188-board.c | 1 + arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ 9 files changed, 71 insertions(+), 73 deletions(-) create mode 100644 arch/arm/mach-rockchip/boot_mode.c create mode 100644 arch/arm/mach-rockchip/rk3399-board.c diff --git a/arch/arm/include/asm/arch-rockchip/boot_mode.h b/arch/arm/include/asm/arch-rockchip/boot_mode.h index bd65f60..163b2e7 100644 --- a/arch/arm/include/asm/arch-rockchip/boot_mode.h +++ b/arch/arm/include/asm/arch-rockchip/boot_mode.h @@ -16,4 +16,6 @@ /* enter usb mass storage mode */ #define BOOT_UMS (REBOOT_FLAG + 12) +int setup_boot_mode(void); + #endif diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig index 36df484..6144057 100644 --- a/arch/arm/mach-rockchip/Kconfig +++ b/arch/arm/mach-rockchip/Kconfig @@ -117,6 +117,7 @@ config ROCKCHIP_RK3399 select SPL_SERIAL_SUPPORT select SPL_DRIVERS_MISC_SUPPORT select DEBUG_UART_BOARD_INIT + select BOARD_LATE_INIT help The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72 and quad-core Cortex-A53. @@ -152,6 +153,20 @@ config TPL_ROCKCHIP_BACK_TO_BROM SPL will return to the boot rom, which will then load the U-Boot binary to keep going on. +config ROCKCHIP_BOOT_MODE_REG + hex "Rockchip boot mode flag register address" + default 0x200081c8 if ROCKCHIP_RK3036 + default 0x20004040 if ROCKCHIP_RK3188 + default 0x110005c8 if ROCKCHIP_RK322X + default 0xff730094 if ROCKCHIP_RK3288 + default 0xff738200 if ROCKCHIP_RK3368 + default 0xff320300 if ROCKCHIP_RK3399 + default 0x10300580 if ROCKCHIP_RV1108 + default 0 + help + The Soc will enter to different boot mode(defined in asm/arch/boot_mode.h) + according to the value from this register. + config ROCKCHIP_SPL_RESERVE_IRAM hex "Size of IRAM reserved in SPL" default 0x4000 diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile index c15e9bf..2127f2b 100644 --- a/arch/arm/mach-rockchip/Makefile +++ b/arch/arm/mach-rockchip/Makefile @@ -22,10 +22,16 @@ obj-spl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-spl.o spl-boot-order.o obj-spl-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o spl-boot-order.o ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) + +ifneq ($(CONFIG_ROCKCHIP_BOOT_MODE_REG),0) +obj-y += boot_mode.o +endif + obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o +obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board.o endif obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c new file mode 100644 index 0000000..4652490 --- /dev/null +++ b/arch/arm/mach-rockchip/boot_mode.c @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2016 Rockchip Electronics Co., Ltd + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/boot_mode.h> + +int setup_boot_mode(void) +{ + void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; + int boot_mode = readl(reg); + + debug("boot mode %x.\n", boot_mode); + + /* Clear boot mode */ + writel(BOOT_NORMAL, reg); + + switch (boot_mode) { + case BOOT_FASTBOOT: + printf("enter fastboot!\n"); + env_set("preboot", "setenv preboot; fastboot usb0"); + break; + case BOOT_UMS: + printf("enter UMS!\n"); + env_set("preboot", "setenv preboot; ums mmc 0"); + break; + } + + return 0; +} diff --git a/arch/arm/mach-rockchip/rk3036-board.c b/arch/arm/mach-rockchip/rk3036-board.c index a3457f3..a5d2571 100644 --- a/arch/arm/mach-rockchip/rk3036-board.c +++ b/arch/arm/mach-rockchip/rk3036-board.c @@ -19,30 +19,6 @@ DECLARE_GLOBAL_DATA_PTR; -#define GRF_BASE 0x20008000 - -static void setup_boot_mode(void) -{ - struct rk3036_grf *const grf = (void *)GRF_BASE; - int boot_mode = readl(&grf->os_reg[4]); - - debug("boot mode %x.\n", boot_mode); - - /* Clear boot mode */ - writel(BOOT_NORMAL, &grf->os_reg[4]); - - switch (boot_mode) { - case BOOT_FASTBOOT: - printf("enter fastboot!\n"); - env_set("preboot", "setenv preboot; fastboot usb0"); - break; - case BOOT_UMS: - printf("enter UMS!\n"); - env_set("preboot", "setenv preboot; ums mmc 0"); - break; - } -} - __weak int rk_board_late_init(void) { return 0; diff --git a/arch/arm/mach-rockchip/rk3188-board.c b/arch/arm/mach-rockchip/rk3188-board.c index 96859a5..916d18f 100644 --- a/arch/arm/mach-rockchip/rk3188-board.c +++ b/arch/arm/mach-rockchip/rk3188-board.c @@ -24,6 +24,7 @@ int board_late_init(void) { struct rk3188_grf *grf; + setup_boot_mode(); grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); if (IS_ERR(grf)) { pr_err("grf syscon returned %ld\n", PTR_ERR(grf)); diff --git a/arch/arm/mach-rockchip/rk322x-board.c b/arch/arm/mach-rockchip/rk322x-board.c index d443114..e71847d 100644 --- a/arch/arm/mach-rockchip/rk322x-board.c +++ b/arch/arm/mach-rockchip/rk322x-board.c @@ -16,30 +16,6 @@ DECLARE_GLOBAL_DATA_PTR; -#define GRF_BASE 0x11000000 - -static void setup_boot_mode(void) -{ - struct rk322x_grf *const grf = (void *)GRF_BASE; - int boot_mode = readl(&grf->os_reg[0]); - - debug("boot mode %x.\n", boot_mode); - - /* Clear boot mode */ - writel(BOOT_NORMAL, &grf->os_reg[0]); - - switch (boot_mode) { - case BOOT_FASTBOOT: - printf("enter fastboot!\n"); - env_set("preboot", "setenv preboot; fastboot usb0"); - break; - case BOOT_UMS: - printf("enter UMS!\n"); - env_set("preboot", "setenv preboot; ums mmc 0"); - break; - } -} - __weak int rk_board_late_init(void) { return 0; diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c index 278bb40..1c53cca 100644 --- a/arch/arm/mach-rockchip/rk3288-board.c +++ b/arch/arm/mach-rockchip/rk3288-board.c @@ -23,31 +23,6 @@ DECLARE_GLOBAL_DATA_PTR; -#define PMU_BASE 0xff730000 - -static void setup_boot_mode(void) -{ - struct rk3288_pmu *const pmu = (void *)PMU_BASE; - int boot_mode = readl(&pmu->sys_reg[0]); - - debug("boot mode %x.\n", boot_mode); - - /* Clear boot mode */ - writel(BOOT_NORMAL, &pmu->sys_reg[0]); - - switch (boot_mode) { - case BOOT_FASTBOOT: - printf("enter fastboot!\n"); - env_set("preboot", "setenv preboot; fastboot usb0"); - break; - case BOOT_UMS: - printf("enter UMS!\n"); - env_set("preboot", "setenv preboot; if mmc dev 0;" - "then ums mmc 0; else ums mmc 1;fi"); - break; - } -} - __weak int rk_board_late_init(void) { return 0; diff --git a/arch/arm/mach-rockchip/rk3399-board.c b/arch/arm/mach-rockchip/rk3399-board.c new file mode 100644 index 0000000..9293843 --- /dev/null +++ b/arch/arm/mach-rockchip/rk3399-board.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2017 Rockchip Electronics Co., Ltd + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/arch/boot_mode.h> + +int board_late_init(void) +{ + setup_boot_mode(); + return 0; +} -- 2.7.4 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan @ 2017-11-20 14:06 ` Philipp Tomsich 2017-11-20 14:50 ` Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:06 UTC (permalink / raw) To: u-boot > setup_boot_mode function use the same logic but different > mode register address across all the rockchip platforms, > so it's better to make this function reused across all the > platforms, and let the mode register address setting from > the config file. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > --- > > Changes in v3: > - add support for rk3188 > > Changes in v2: > - correct the rk322x boot mode register address > - make the help text more clear > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ > arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ > arch/arm/mach-rockchip/Makefile | 6 +++++ > arch/arm/mach-rockchip/boot_mode.c | 33 ++++++++++++++++++++++++++ > arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3188-board.c | 1 + > arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- > arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ > 9 files changed, 71 insertions(+), 73 deletions(-) > create mode 100644 arch/arm/mach-rockchip/boot_mode.c > create mode 100644 arch/arm/mach-rockchip/rk3399-board.c > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich @ 2017-11-20 14:50 ` Philipp Tomsich 2017-11-21 0:48 ` Andy Yan 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 1 reply; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:50 UTC (permalink / raw) To: u-boot On Wed, 11 Oct 2017, Andy Yan wrote: > setup_boot_mode function use the same logic but different > mode register address across all the rockchip platforms, > so it's better to make this function reused across all the > platforms, and let the mode register address setting from > the config file. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> See below for a suggestion... > --- > > Changes in v3: > - add support for rk3188 > > Changes in v2: > - correct the rk322x boot mode register address > - make the help text more clear > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ > arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ > arch/arm/mach-rockchip/Makefile | 6 +++++ > arch/arm/mach-rockchip/boot_mode.c | 33 ++++++++++++++++++++++++++ > arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3188-board.c | 1 + > arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- > arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ > 9 files changed, 71 insertions(+), 73 deletions(-) > create mode 100644 arch/arm/mach-rockchip/boot_mode.c > create mode 100644 arch/arm/mach-rockchip/rk3399-board.c > > diff --git a/arch/arm/include/asm/arch-rockchip/boot_mode.h b/arch/arm/include/asm/arch-rockchip/boot_mode.h > index bd65f60..163b2e7 100644 > --- a/arch/arm/include/asm/arch-rockchip/boot_mode.h > +++ b/arch/arm/include/asm/arch-rockchip/boot_mode.h > @@ -16,4 +16,6 @@ > /* enter usb mass storage mode */ > #define BOOT_UMS (REBOOT_FLAG + 12) > > +int setup_boot_mode(void); > + > #endif > diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig > index 36df484..6144057 100644 > --- a/arch/arm/mach-rockchip/Kconfig > +++ b/arch/arm/mach-rockchip/Kconfig > @@ -117,6 +117,7 @@ config ROCKCHIP_RK3399 > select SPL_SERIAL_SUPPORT > select SPL_DRIVERS_MISC_SUPPORT > select DEBUG_UART_BOARD_INIT > + select BOARD_LATE_INIT > help > The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72 > and quad-core Cortex-A53. > @@ -152,6 +153,20 @@ config TPL_ROCKCHIP_BACK_TO_BROM > SPL will return to the boot rom, which will then load the U-Boot > binary to keep going on. > > +config ROCKCHIP_BOOT_MODE_REG > + hex "Rockchip boot mode flag register address" > + default 0x200081c8 if ROCKCHIP_RK3036 > + default 0x20004040 if ROCKCHIP_RK3188 > + default 0x110005c8 if ROCKCHIP_RK322X > + default 0xff730094 if ROCKCHIP_RK3288 > + default 0xff738200 if ROCKCHIP_RK3368 > + default 0xff320300 if ROCKCHIP_RK3399 > + default 0x10300580 if ROCKCHIP_RV1108 > + default 0 > + help > + The Soc will enter to different boot mode(defined in asm/arch/boot_mode.h) > + according to the value from this register. > + > config ROCKCHIP_SPL_RESERVE_IRAM > hex "Size of IRAM reserved in SPL" > default 0x4000 > diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile > index c15e9bf..2127f2b 100644 > --- a/arch/arm/mach-rockchip/Makefile > +++ b/arch/arm/mach-rockchip/Makefile > @@ -22,10 +22,16 @@ obj-spl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-spl.o spl-boot-order.o > obj-spl-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o spl-boot-order.o > > ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) > + > +ifneq ($(CONFIG_ROCKCHIP_BOOT_MODE_REG),0) > +obj-y += boot_mode.o > +endif > + > obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o > obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o > obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o > obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o > +obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board.o > endif > > obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o > diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c > new file mode 100644 > index 0000000..4652490 > --- /dev/null > +++ b/arch/arm/mach-rockchip/boot_mode.c > @@ -0,0 +1,33 @@ > +/* > + * (C) Copyright 2016 Rockchip Electronics Co., Ltd > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <asm/arch/boot_mode.h> > + > +int setup_boot_mode(void) > +{ > + void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; I am somewhat uneasy about this... could we use a syscon/regmap instead that will map to something different on each device? I am thinking of something along the lines of "syscon_get_first_range(ROCKCHIP_BOOTMODE)". > + int boot_mode = readl(reg); > + > + debug("boot mode %x.\n", boot_mode); > + > + /* Clear boot mode */ > + writel(BOOT_NORMAL, reg); > + > + switch (boot_mode) { > + case BOOT_FASTBOOT: > + printf("enter fastboot!\n"); > + env_set("preboot", "setenv preboot; fastboot usb0"); > + break; > + case BOOT_UMS: > + printf("enter UMS!\n"); > + env_set("preboot", "setenv preboot; ums mmc 0"); > + break; > + } > + > + return 0; > +} > diff --git a/arch/arm/mach-rockchip/rk3036-board.c b/arch/arm/mach-rockchip/rk3036-board.c > index a3457f3..a5d2571 100644 > --- a/arch/arm/mach-rockchip/rk3036-board.c > +++ b/arch/arm/mach-rockchip/rk3036-board.c > @@ -19,30 +19,6 @@ > > DECLARE_GLOBAL_DATA_PTR; > > -#define GRF_BASE 0x20008000 > - > -static void setup_boot_mode(void) > -{ > - struct rk3036_grf *const grf = (void *)GRF_BASE; > - int boot_mode = readl(&grf->os_reg[4]); > - > - debug("boot mode %x.\n", boot_mode); > - > - /* Clear boot mode */ > - writel(BOOT_NORMAL, &grf->os_reg[4]); > - > - switch (boot_mode) { > - case BOOT_FASTBOOT: > - printf("enter fastboot!\n"); > - env_set("preboot", "setenv preboot; fastboot usb0"); > - break; > - case BOOT_UMS: > - printf("enter UMS!\n"); > - env_set("preboot", "setenv preboot; ums mmc 0"); > - break; > - } > -} > - > __weak int rk_board_late_init(void) > { > return 0; > diff --git a/arch/arm/mach-rockchip/rk3188-board.c b/arch/arm/mach-rockchip/rk3188-board.c > index 96859a5..916d18f 100644 > --- a/arch/arm/mach-rockchip/rk3188-board.c > +++ b/arch/arm/mach-rockchip/rk3188-board.c > @@ -24,6 +24,7 @@ int board_late_init(void) > { > struct rk3188_grf *grf; > > + setup_boot_mode(); > grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); > if (IS_ERR(grf)) { > pr_err("grf syscon returned %ld\n", PTR_ERR(grf)); > diff --git a/arch/arm/mach-rockchip/rk322x-board.c b/arch/arm/mach-rockchip/rk322x-board.c > index d443114..e71847d 100644 > --- a/arch/arm/mach-rockchip/rk322x-board.c > +++ b/arch/arm/mach-rockchip/rk322x-board.c > @@ -16,30 +16,6 @@ > > DECLARE_GLOBAL_DATA_PTR; > > -#define GRF_BASE 0x11000000 > - > -static void setup_boot_mode(void) > -{ > - struct rk322x_grf *const grf = (void *)GRF_BASE; > - int boot_mode = readl(&grf->os_reg[0]); > - > - debug("boot mode %x.\n", boot_mode); > - > - /* Clear boot mode */ > - writel(BOOT_NORMAL, &grf->os_reg[0]); > - > - switch (boot_mode) { > - case BOOT_FASTBOOT: > - printf("enter fastboot!\n"); > - env_set("preboot", "setenv preboot; fastboot usb0"); > - break; > - case BOOT_UMS: > - printf("enter UMS!\n"); > - env_set("preboot", "setenv preboot; ums mmc 0"); > - break; > - } > -} > - > __weak int rk_board_late_init(void) > { > return 0; > diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c > index 278bb40..1c53cca 100644 > --- a/arch/arm/mach-rockchip/rk3288-board.c > +++ b/arch/arm/mach-rockchip/rk3288-board.c > @@ -23,31 +23,6 @@ > > DECLARE_GLOBAL_DATA_PTR; > > -#define PMU_BASE 0xff730000 > - > -static void setup_boot_mode(void) > -{ > - struct rk3288_pmu *const pmu = (void *)PMU_BASE; > - int boot_mode = readl(&pmu->sys_reg[0]); > - > - debug("boot mode %x.\n", boot_mode); > - > - /* Clear boot mode */ > - writel(BOOT_NORMAL, &pmu->sys_reg[0]); > - > - switch (boot_mode) { > - case BOOT_FASTBOOT: > - printf("enter fastboot!\n"); > - env_set("preboot", "setenv preboot; fastboot usb0"); > - break; > - case BOOT_UMS: > - printf("enter UMS!\n"); > - env_set("preboot", "setenv preboot; if mmc dev 0;" > - "then ums mmc 0; else ums mmc 1;fi"); > - break; > - } > -} > - > __weak int rk_board_late_init(void) > { > return 0; > diff --git a/arch/arm/mach-rockchip/rk3399-board.c b/arch/arm/mach-rockchip/rk3399-board.c > new file mode 100644 > index 0000000..9293843 > --- /dev/null > +++ b/arch/arm/mach-rockchip/rk3399-board.c > @@ -0,0 +1,14 @@ > +/* > + * Copyright (c) 2017 Rockchip Electronics Co., Ltd > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <asm/arch/boot_mode.h> > + > +int board_late_init(void) > +{ > + setup_boot_mode(); > + return 0; > +} > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-11-20 14:50 ` Philipp Tomsich @ 2017-11-21 0:48 ` Andy Yan 2017-11-21 8:25 ` Dr. Philipp Tomsich 0 siblings, 1 reply; 19+ messages in thread From: Andy Yan @ 2017-11-21 0:48 UTC (permalink / raw) To: u-boot Hi Philipp: On 2017年11月20日 22:50, Philipp Tomsich wrote: > > > On Wed, 11 Oct 2017, Andy Yan wrote: > >> setup_boot_mode function use the same logic but different >> mode register address across all the rockchip platforms, >> so it's better to make this function reused across all the >> platforms, and let the mode register address setting from >> the config file. >> >> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > > See below for a suggestion... > >> --- >> >> Changes in v3: >> - add support for rk3188 >> >> Changes in v2: >> - correct the rk322x boot mode register address >> - make the help text more clear >> >> arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ >> arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ >> arch/arm/mach-rockchip/Makefile | 6 +++++ >> arch/arm/mach-rockchip/boot_mode.c | 33 >> ++++++++++++++++++++++++++ >> arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- >> arch/arm/mach-rockchip/rk3188-board.c | 1 + >> arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- >> arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- >> arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ >> 9 files changed, 71 insertions(+), 73 deletions(-) >> create mode 100644 arch/arm/mach-rockchip/boot_mode.c >> create mode 100644 arch/arm/mach-rockchip/rk3399-board.c >> >> diff --git a/arch/arm/include/asm/arch-rockchip/boot_mode.h >> b/arch/arm/include/asm/arch-rockchip/boot_mode.h >> index bd65f60..163b2e7 100644 >> --- a/arch/arm/include/asm/arch-rockchip/boot_mode.h >> +++ b/arch/arm/include/asm/arch-rockchip/boot_mode.h >> @@ -16,4 +16,6 @@ >> /* enter usb mass storage mode */ >> #define BOOT_UMS (REBOOT_FLAG + 12) >> >> +int setup_boot_mode(void); >> + >> #endif >> diff --git a/arch/arm/mach-rockchip/Kconfig >> b/arch/arm/mach-rockchip/Kconfig >> index 36df484..6144057 100644 >> --- a/arch/arm/mach-rockchip/Kconfig >> +++ b/arch/arm/mach-rockchip/Kconfig >> @@ -117,6 +117,7 @@ config ROCKCHIP_RK3399 >> select SPL_SERIAL_SUPPORT >> select SPL_DRIVERS_MISC_SUPPORT >> select DEBUG_UART_BOARD_INIT >> + select BOARD_LATE_INIT >> help >> The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72 >> and quad-core Cortex-A53. >> @@ -152,6 +153,20 @@ config TPL_ROCKCHIP_BACK_TO_BROM >> SPL will return to the boot rom, which will then load the >> U-Boot >> binary to keep going on. >> >> +config ROCKCHIP_BOOT_MODE_REG >> + hex "Rockchip boot mode flag register address" >> + default 0x200081c8 if ROCKCHIP_RK3036 >> + default 0x20004040 if ROCKCHIP_RK3188 >> + default 0x110005c8 if ROCKCHIP_RK322X >> + default 0xff730094 if ROCKCHIP_RK3288 >> + default 0xff738200 if ROCKCHIP_RK3368 >> + default 0xff320300 if ROCKCHIP_RK3399 >> + default 0x10300580 if ROCKCHIP_RV1108 >> + default 0 >> + help >> + The Soc will enter to different boot mode(defined in >> asm/arch/boot_mode.h) >> + according to the value from this register. >> + >> config ROCKCHIP_SPL_RESERVE_IRAM >> hex "Size of IRAM reserved in SPL" >> default 0x4000 >> diff --git a/arch/arm/mach-rockchip/Makefile >> b/arch/arm/mach-rockchip/Makefile >> index c15e9bf..2127f2b 100644 >> --- a/arch/arm/mach-rockchip/Makefile >> +++ b/arch/arm/mach-rockchip/Makefile >> @@ -22,10 +22,16 @@ obj-spl-$(CONFIG_ROCKCHIP_RK3368) += >> rk3368-board-spl.o spl-boot-order.o >> obj-spl-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o spl-boot-order.o >> >> ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) >> + >> +ifneq ($(CONFIG_ROCKCHIP_BOOT_MODE_REG),0) >> +obj-y += boot_mode.o >> +endif >> + >> obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o >> obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o >> obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o >> obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o >> +obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board.o >> endif >> >> obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o >> diff --git a/arch/arm/mach-rockchip/boot_mode.c >> b/arch/arm/mach-rockchip/boot_mode.c >> new file mode 100644 >> index 0000000..4652490 >> --- /dev/null >> +++ b/arch/arm/mach-rockchip/boot_mode.c >> @@ -0,0 +1,33 @@ >> +/* >> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#include <common.h> >> +#include <asm/io.h> >> +#include <asm/arch/boot_mode.h> >> + >> +int setup_boot_mode(void) >> +{ >> + void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; > > I am somewhat uneasy about this... could we use a syscon/regmap instead > that will map to something different on each device? I am thinking of > something along the lines of "syscon_get_first_range(ROCKCHIP_BOOTMODE)". The reason why we put the BOOTMODE register in Kconfig is because that we also need to access the resister in function save_boot_params(see patch 2/3) to check the BROM_DNL flag, we have no way to access the dtb or syscon driver at that point(it's the first step we enter the tpl/spl world from bootrom). > >> + int boot_mode = readl(reg); >> + >> + debug("boot mode %x.\n", boot_mode); >> + >> + /* Clear boot mode */ >> + writel(BOOT_NORMAL, reg); >> + >> + switch (boot_mode) { >> + case BOOT_FASTBOOT: >> + printf("enter fastboot!\n"); >> + env_set("preboot", "setenv preboot; fastboot usb0"); >> + break; >> + case BOOT_UMS: >> + printf("enter UMS!\n"); >> + env_set("preboot", "setenv preboot; ums mmc 0"); >> + break; >> + } >> + >> + return 0; >> +} >> diff --git a/arch/arm/mach-rockchip/rk3036-board.c >> b/arch/arm/mach-rockchip/rk3036-board.c >> index a3457f3..a5d2571 100644 >> --- a/arch/arm/mach-rockchip/rk3036-board.c >> +++ b/arch/arm/mach-rockchip/rk3036-board.c >> @@ -19,30 +19,6 @@ >> >> DECLARE_GLOBAL_DATA_PTR; >> >> -#define GRF_BASE 0x20008000 >> - >> -static void setup_boot_mode(void) >> -{ >> - struct rk3036_grf *const grf = (void *)GRF_BASE; >> - int boot_mode = readl(&grf->os_reg[4]); >> - >> - debug("boot mode %x.\n", boot_mode); >> - >> - /* Clear boot mode */ >> - writel(BOOT_NORMAL, &grf->os_reg[4]); >> - >> - switch (boot_mode) { >> - case BOOT_FASTBOOT: >> - printf("enter fastboot!\n"); >> - env_set("preboot", "setenv preboot; fastboot usb0"); >> - break; >> - case BOOT_UMS: >> - printf("enter UMS!\n"); >> - env_set("preboot", "setenv preboot; ums mmc 0"); >> - break; >> - } >> -} >> - >> __weak int rk_board_late_init(void) >> { >> return 0; >> diff --git a/arch/arm/mach-rockchip/rk3188-board.c >> b/arch/arm/mach-rockchip/rk3188-board.c >> index 96859a5..916d18f 100644 >> --- a/arch/arm/mach-rockchip/rk3188-board.c >> +++ b/arch/arm/mach-rockchip/rk3188-board.c >> @@ -24,6 +24,7 @@ int board_late_init(void) >> { >> struct rk3188_grf *grf; >> >> + setup_boot_mode(); >> grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); >> if (IS_ERR(grf)) { >> pr_err("grf syscon returned %ld\n", PTR_ERR(grf)); >> diff --git a/arch/arm/mach-rockchip/rk322x-board.c >> b/arch/arm/mach-rockchip/rk322x-board.c >> index d443114..e71847d 100644 >> --- a/arch/arm/mach-rockchip/rk322x-board.c >> +++ b/arch/arm/mach-rockchip/rk322x-board.c >> @@ -16,30 +16,6 @@ >> >> DECLARE_GLOBAL_DATA_PTR; >> >> -#define GRF_BASE 0x11000000 >> - >> -static void setup_boot_mode(void) >> -{ >> - struct rk322x_grf *const grf = (void *)GRF_BASE; >> - int boot_mode = readl(&grf->os_reg[0]); >> - >> - debug("boot mode %x.\n", boot_mode); >> - >> - /* Clear boot mode */ >> - writel(BOOT_NORMAL, &grf->os_reg[0]); >> - >> - switch (boot_mode) { >> - case BOOT_FASTBOOT: >> - printf("enter fastboot!\n"); >> - env_set("preboot", "setenv preboot; fastboot usb0"); >> - break; >> - case BOOT_UMS: >> - printf("enter UMS!\n"); >> - env_set("preboot", "setenv preboot; ums mmc 0"); >> - break; >> - } >> -} >> - >> __weak int rk_board_late_init(void) >> { >> return 0; >> diff --git a/arch/arm/mach-rockchip/rk3288-board.c >> b/arch/arm/mach-rockchip/rk3288-board.c >> index 278bb40..1c53cca 100644 >> --- a/arch/arm/mach-rockchip/rk3288-board.c >> +++ b/arch/arm/mach-rockchip/rk3288-board.c >> @@ -23,31 +23,6 @@ >> >> DECLARE_GLOBAL_DATA_PTR; >> >> -#define PMU_BASE 0xff730000 >> - >> -static void setup_boot_mode(void) >> -{ >> - struct rk3288_pmu *const pmu = (void *)PMU_BASE; >> - int boot_mode = readl(&pmu->sys_reg[0]); >> - >> - debug("boot mode %x.\n", boot_mode); >> - >> - /* Clear boot mode */ >> - writel(BOOT_NORMAL, &pmu->sys_reg[0]); >> - >> - switch (boot_mode) { >> - case BOOT_FASTBOOT: >> - printf("enter fastboot!\n"); >> - env_set("preboot", "setenv preboot; fastboot usb0"); >> - break; >> - case BOOT_UMS: >> - printf("enter UMS!\n"); >> - env_set("preboot", "setenv preboot; if mmc dev 0;" >> - "then ums mmc 0; else ums mmc 1;fi"); >> - break; >> - } >> -} >> - >> __weak int rk_board_late_init(void) >> { >> return 0; >> diff --git a/arch/arm/mach-rockchip/rk3399-board.c >> b/arch/arm/mach-rockchip/rk3399-board.c >> new file mode 100644 >> index 0000000..9293843 >> --- /dev/null >> +++ b/arch/arm/mach-rockchip/rk3399-board.c >> @@ -0,0 +1,14 @@ >> +/* >> + * Copyright (c) 2017 Rockchip Electronics Co., Ltd >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#include <common.h> >> +#include <asm/arch/boot_mode.h> >> + >> +int board_late_init(void) >> +{ >> + setup_boot_mode(); >> + return 0; >> +} >> > > > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-11-21 0:48 ` Andy Yan @ 2017-11-21 8:25 ` Dr. Philipp Tomsich 0 siblings, 0 replies; 19+ messages in thread From: Dr. Philipp Tomsich @ 2017-11-21 8:25 UTC (permalink / raw) To: u-boot Andy, > On 21 Nov 2017, at 01:48, Andy Yan <andy.yan@rock-chips.com> wrote: > > Hi Philipp: > > > On 2017年11月20日 22:50, Philipp Tomsich wrote: >> >> >> On Wed, 11 Oct 2017, Andy Yan wrote: >> >>> setup_boot_mode function use the same logic but different >>> mode register address across all the rockchip platforms, >>> so it's better to make this function reused across all the >>> platforms, and let the mode register address setting from >>> the config file. >>> >>> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >>> Reviewed-by: Simon Glass <sjg@chromium.org> >>> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> >> >> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> >> >> See below for a suggestion... >> >>> --- >>> >>> Changes in v3: >>> - add support for rk3188 >>> >>> Changes in v2: >>> - correct the rk322x boot mode register address >>> - make the help text more clear >>> >>> arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ >>> arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ >>> arch/arm/mach-rockchip/Makefile | 6 +++++ >>> arch/arm/mach-rockchip/boot_mode.c | 33 ++++++++++++++++++++++++++ >>> arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- >>> arch/arm/mach-rockchip/rk3188-board.c | 1 + >>> arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- >>> arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- >>> arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ >>> 9 files changed, 71 insertions(+), 73 deletions(-) >>> create mode 100644 arch/arm/mach-rockchip/boot_mode.c >>> create mode 100644 arch/arm/mach-rockchip/rk3399-board.c >>> >>> diff --git a/arch/arm/include/asm/arch-rockchip/boot_mode.h b/arch/arm/include/asm/arch-rockchip/boot_mode.h >>> index bd65f60..163b2e7 100644 >>> --- a/arch/arm/include/asm/arch-rockchip/boot_mode.h >>> +++ b/arch/arm/include/asm/arch-rockchip/boot_mode.h >>> @@ -16,4 +16,6 @@ >>> /* enter usb mass storage mode */ >>> #define BOOT_UMS (REBOOT_FLAG + 12) >>> >>> +int setup_boot_mode(void); >>> + >>> #endif >>> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig >>> index 36df484..6144057 100644 >>> --- a/arch/arm/mach-rockchip/Kconfig >>> +++ b/arch/arm/mach-rockchip/Kconfig >>> @@ -117,6 +117,7 @@ config ROCKCHIP_RK3399 >>> select SPL_SERIAL_SUPPORT >>> select SPL_DRIVERS_MISC_SUPPORT >>> select DEBUG_UART_BOARD_INIT >>> + select BOARD_LATE_INIT >>> help >>> The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72 >>> and quad-core Cortex-A53. >>> @@ -152,6 +153,20 @@ config TPL_ROCKCHIP_BACK_TO_BROM >>> SPL will return to the boot rom, which will then load the U-Boot >>> binary to keep going on. >>> >>> +config ROCKCHIP_BOOT_MODE_REG >>> + hex "Rockchip boot mode flag register address" >>> + default 0x200081c8 if ROCKCHIP_RK3036 >>> + default 0x20004040 if ROCKCHIP_RK3188 >>> + default 0x110005c8 if ROCKCHIP_RK322X >>> + default 0xff730094 if ROCKCHIP_RK3288 >>> + default 0xff738200 if ROCKCHIP_RK3368 >>> + default 0xff320300 if ROCKCHIP_RK3399 >>> + default 0x10300580 if ROCKCHIP_RV1108 >>> + default 0 >>> + help >>> + The Soc will enter to different boot mode(defined in asm/arch/boot_mode.h) >>> + according to the value from this register. >>> + >>> config ROCKCHIP_SPL_RESERVE_IRAM >>> hex "Size of IRAM reserved in SPL" >>> default 0x4000 >>> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile >>> index c15e9bf..2127f2b 100644 >>> --- a/arch/arm/mach-rockchip/Makefile >>> +++ b/arch/arm/mach-rockchip/Makefile >>> @@ -22,10 +22,16 @@ obj-spl-$(CONFIG_ROCKCHIP_RK3368) += rk3368-board-spl.o spl-boot-order.o >>> obj-spl-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board-spl.o spl-boot-order.o >>> >>> ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) >>> + >>> +ifneq ($(CONFIG_ROCKCHIP_BOOT_MODE_REG),0) >>> +obj-y += boot_mode.o >>> +endif >>> + >>> obj-$(CONFIG_ROCKCHIP_RK3188) += rk3188-board.o >>> obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o >>> obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o >>> obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o >>> +obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board.o >>> endif >>> >>> obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o >>> diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c >>> new file mode 100644 >>> index 0000000..4652490 >>> --- /dev/null >>> +++ b/arch/arm/mach-rockchip/boot_mode.c >>> @@ -0,0 +1,33 @@ >>> +/* >>> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd >>> + * >>> + * SPDX-License-Identifier: GPL-2.0+ >>> + */ >>> + >>> +#include <common.h> >>> +#include <asm/io.h> >>> +#include <asm/arch/boot_mode.h> >>> + >>> +int setup_boot_mode(void) >>> +{ >>> + void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; >> >> I am somewhat uneasy about this... could we use a syscon/regmap instead >> that will map to something different on each device? I am thinking of something along the lines of "syscon_get_first_range(ROCKCHIP_BOOTMODE)". > > > The reason why we put the BOOTMODE register in Kconfig is because that we also need to access the resister in function save_boot_params(see patch 2/3) to check > the BROM_DNL flag, we have no way to access the dtb or syscon driver at that point(it's the first step we enter the tpl/spl world from bootrom). Thanks for explaining. I suspected something like that, but it wasn’t obvious on the first glance. >> >>> + int boot_mode = readl(reg); >>> + >>> + debug("boot mode %x.\n", boot_mode); >>> + >>> + /* Clear boot mode */ >>> + writel(BOOT_NORMAL, reg); >>> + >>> + switch (boot_mode) { >>> + case BOOT_FASTBOOT: >>> + printf("enter fastboot!\n"); >>> + env_set("preboot", "setenv preboot; fastboot usb0"); >>> + break; >>> + case BOOT_UMS: >>> + printf("enter UMS!\n"); >>> + env_set("preboot", "setenv preboot; ums mmc 0"); >>> + break; >>> + } >>> + >>> + return 0; >>> +} >>> diff --git a/arch/arm/mach-rockchip/rk3036-board.c b/arch/arm/mach-rockchip/rk3036-board.c >>> index a3457f3..a5d2571 100644 >>> --- a/arch/arm/mach-rockchip/rk3036-board.c >>> +++ b/arch/arm/mach-rockchip/rk3036-board.c >>> @@ -19,30 +19,6 @@ >>> >>> DECLARE_GLOBAL_DATA_PTR; >>> >>> -#define GRF_BASE 0x20008000 >>> - >>> -static void setup_boot_mode(void) >>> -{ >>> - struct rk3036_grf *const grf = (void *)GRF_BASE; >>> - int boot_mode = readl(&grf->os_reg[4]); >>> - >>> - debug("boot mode %x.\n", boot_mode); >>> - >>> - /* Clear boot mode */ >>> - writel(BOOT_NORMAL, &grf->os_reg[4]); >>> - >>> - switch (boot_mode) { >>> - case BOOT_FASTBOOT: >>> - printf("enter fastboot!\n"); >>> - env_set("preboot", "setenv preboot; fastboot usb0"); >>> - break; >>> - case BOOT_UMS: >>> - printf("enter UMS!\n"); >>> - env_set("preboot", "setenv preboot; ums mmc 0"); >>> - break; >>> - } >>> -} >>> - >>> __weak int rk_board_late_init(void) >>> { >>> return 0; >>> diff --git a/arch/arm/mach-rockchip/rk3188-board.c b/arch/arm/mach-rockchip/rk3188-board.c >>> index 96859a5..916d18f 100644 >>> --- a/arch/arm/mach-rockchip/rk3188-board.c >>> +++ b/arch/arm/mach-rockchip/rk3188-board.c >>> @@ -24,6 +24,7 @@ int board_late_init(void) >>> { >>> struct rk3188_grf *grf; >>> >>> + setup_boot_mode(); >>> grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); >>> if (IS_ERR(grf)) { >>> pr_err("grf syscon returned %ld\n", PTR_ERR(grf)); >>> diff --git a/arch/arm/mach-rockchip/rk322x-board.c b/arch/arm/mach-rockchip/rk322x-board.c >>> index d443114..e71847d 100644 >>> --- a/arch/arm/mach-rockchip/rk322x-board.c >>> +++ b/arch/arm/mach-rockchip/rk322x-board.c >>> @@ -16,30 +16,6 @@ >>> >>> DECLARE_GLOBAL_DATA_PTR; >>> >>> -#define GRF_BASE 0x11000000 >>> - >>> -static void setup_boot_mode(void) >>> -{ >>> - struct rk322x_grf *const grf = (void *)GRF_BASE; >>> - int boot_mode = readl(&grf->os_reg[0]); >>> - >>> - debug("boot mode %x.\n", boot_mode); >>> - >>> - /* Clear boot mode */ >>> - writel(BOOT_NORMAL, &grf->os_reg[0]); >>> - >>> - switch (boot_mode) { >>> - case BOOT_FASTBOOT: >>> - printf("enter fastboot!\n"); >>> - env_set("preboot", "setenv preboot; fastboot usb0"); >>> - break; >>> - case BOOT_UMS: >>> - printf("enter UMS!\n"); >>> - env_set("preboot", "setenv preboot; ums mmc 0"); >>> - break; >>> - } >>> -} >>> - >>> __weak int rk_board_late_init(void) >>> { >>> return 0; >>> diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c >>> index 278bb40..1c53cca 100644 >>> --- a/arch/arm/mach-rockchip/rk3288-board.c >>> +++ b/arch/arm/mach-rockchip/rk3288-board.c >>> @@ -23,31 +23,6 @@ >>> >>> DECLARE_GLOBAL_DATA_PTR; >>> >>> -#define PMU_BASE 0xff730000 >>> - >>> -static void setup_boot_mode(void) >>> -{ >>> - struct rk3288_pmu *const pmu = (void *)PMU_BASE; >>> - int boot_mode = readl(&pmu->sys_reg[0]); >>> - >>> - debug("boot mode %x.\n", boot_mode); >>> - >>> - /* Clear boot mode */ >>> - writel(BOOT_NORMAL, &pmu->sys_reg[0]); >>> - >>> - switch (boot_mode) { >>> - case BOOT_FASTBOOT: >>> - printf("enter fastboot!\n"); >>> - env_set("preboot", "setenv preboot; fastboot usb0"); >>> - break; >>> - case BOOT_UMS: >>> - printf("enter UMS!\n"); >>> - env_set("preboot", "setenv preboot; if mmc dev 0;" >>> - "then ums mmc 0; else ums mmc 1;fi"); >>> - break; >>> - } >>> -} >>> - >>> __weak int rk_board_late_init(void) >>> { >>> return 0; >>> diff --git a/arch/arm/mach-rockchip/rk3399-board.c b/arch/arm/mach-rockchip/rk3399-board.c >>> new file mode 100644 >>> index 0000000..9293843 >>> --- /dev/null >>> +++ b/arch/arm/mach-rockchip/rk3399-board.c >>> @@ -0,0 +1,14 @@ >>> +/* >>> + * Copyright (c) 2017 Rockchip Electronics Co., Ltd >>> + * >>> + * SPDX-License-Identifier: GPL-2.0+ >>> + */ >>> + >>> +#include <common.h> >>> +#include <asm/arch/boot_mode.h> >>> + >>> +int board_late_init(void) >>> +{ >>> + setup_boot_mode(); >>> + return 0; >>> +} >>> >> >> >> > > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 1/3] rockchip: make boot_mode related codes reused across all platforms 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:50 ` Philipp Tomsich @ 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-21 22:32 UTC (permalink / raw) To: u-boot > setup_boot_mode function use the same logic but different > mode register address across all the rockchip platforms, > so it's better to make this function reused across all the > platforms, and let the mode register address setting from > the config file. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > --- > > Changes in v3: > - add support for rk3188 > > Changes in v2: > - correct the rk322x boot mode register address > - make the help text more clear > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 2 ++ > arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++ > arch/arm/mach-rockchip/Makefile | 6 +++++ > arch/arm/mach-rockchip/boot_mode.c | 33 ++++++++++++++++++++++++++ > arch/arm/mach-rockchip/rk3036-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3188-board.c | 1 + > arch/arm/mach-rockchip/rk322x-board.c | 24 ------------------- > arch/arm/mach-rockchip/rk3288-board.c | 25 ------------------- > arch/arm/mach-rockchip/rk3399-board.c | 14 +++++++++++ > 9 files changed, 71 insertions(+), 73 deletions(-) > create mode 100644 arch/arm/mach-rockchip/boot_mode.c > create mode 100644 arch/arm/mach-rockchip/rk3399-board.c > Applied to u-boot-rockchip, thanks! ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode 2017-10-11 6:59 [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan @ 2017-10-11 7:00 ` Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich ` (2 more replies) 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan 2017-11-17 10:09 ` [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 3 siblings, 3 replies; 19+ messages in thread From: Andy Yan @ 2017-10-11 7:00 UTC (permalink / raw) To: u-boot Rockchip bootrom will enter download mode if it returns from spl/tpl with a non-zero value and couldn't find a valid image in the backup partition. This patch provide a method to instruct the system to back to bootrom download mode by checking the BROM_DOWNLOAD_FLAG register. As the bootrom download function relys on some modules such as interrupts, so we need to back to bootrom as early as possbile before the tpl/spl code override the interrupt configurations. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> --- Changes in v3: - rebase on Dr. Philipp's series Changes in v2: - implement the back to bootrom download mode check in c, thanks for Dr. Philipp Tomsich's suggestion. arch/arm/include/asm/arch-rockchip/boot_mode.h | 4 +++ arch/arm/mach-rockchip/Kconfig | 1 + arch/arm/mach-rockchip/bootrom.c | 47 ++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/arch/arm/include/asm/arch-rockchip/boot_mode.h b/arch/arm/include/asm/arch-rockchip/boot_mode.h index 163b2e7..6b2a610 100644 --- a/arch/arm/include/asm/arch-rockchip/boot_mode.h +++ b/arch/arm/include/asm/arch-rockchip/boot_mode.h @@ -15,7 +15,11 @@ #define BOOT_CHARGING (REBOOT_FLAG + 11) /* enter usb mass storage mode */ #define BOOT_UMS (REBOOT_FLAG + 12) +/* enter bootrom download mode */ +#define BOOT_BROM_DOWNLOAD 0xEF08A53C +#ifndef __ASSEMBLY__ int setup_boot_mode(void); +#endif #endif diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig index 6144057..a26736a 100644 --- a/arch/arm/mach-rockchip/Kconfig +++ b/arch/arm/mach-rockchip/Kconfig @@ -118,6 +118,7 @@ config ROCKCHIP_RK3399 select SPL_DRIVERS_MISC_SUPPORT select DEBUG_UART_BOARD_INIT select BOARD_LATE_INIT + select ROCKCHIP_BROM_HELPER help The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72 and quad-core Cortex-A53. diff --git a/arch/arm/mach-rockchip/bootrom.c b/arch/arm/mach-rockchip/bootrom.c index e369fdc..bef2a90 100644 --- a/arch/arm/mach-rockchip/bootrom.c +++ b/arch/arm/mach-rockchip/bootrom.c @@ -6,6 +6,8 @@ #include <common.h> #include <asm/arch/bootrom.h> +#include <asm/arch/boot_mode.h> +#include <asm/io.h> #include <asm/setjmp.h> #include <asm/system.h> @@ -15,12 +17,45 @@ */ static jmp_buf brom_ctx __section(".data"); +static void _back_to_bootrom(enum rockchip_bootrom_cmd brom_cmd) +{ + longjmp(brom_ctx, brom_cmd); +} + void back_to_bootrom(enum rockchip_bootrom_cmd brom_cmd) { #if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) puts("Returning to boot ROM...\n"); #endif - longjmp(brom_ctx, brom_cmd); + _back_to_bootrom(brom_cmd); +} + +/* + * we back to bootrom download mode if get a + * BOOT_BROM_DOWNLOAD flag in boot mode register + * + * note: the boot mode register is configured by + * application(next stage bootloader, kernel, etc), + * and the bootrom never check this register, so we need + * to check it and back to bootrom at very early bootstage(before + * some basic configurations(such as interrupts) been + * changed by TPL/SPL, as the bootrom download operation + * relys on many default settings(such as interrupts) by + * it's self. + */ +static bool check_back_to_brom_dnl_flag(void) +{ + u32 boot_mode; + + if (CONFIG_ROCKCHIP_BOOT_MODE_REG) { + boot_mode = readl(CONFIG_ROCKCHIP_BOOT_MODE_REG); + if (boot_mode == BOOT_BROM_DOWNLOAD) { + writel(0, CONFIG_ROCKCHIP_BOOT_MODE_REG); + return true; + } + } + + return false; } /* @@ -34,6 +69,8 @@ int save_boot_params(void) switch (ret) { case 0: + if (check_back_to_brom_dnl_flag()) + _back_to_bootrom(BROM_BOOT_ENTER_DNL); /* * This is the initial pass through this function * (i.e. saving the context), setjmp just setup up the @@ -54,7 +91,13 @@ int save_boot_params(void) */ ret = 0; break; - + case BROM_BOOT_ENTER_DNL: + /* + * A non-zero return value will instruct the BROM enter + * download mode. + */ + ret = 1; + break; default: #if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) puts("FATAL: unexpected command to back_to_bootrom()\n"); -- 2.7.4 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 2/3] rockchip: add support for enter to bootrom download mode 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan @ 2017-11-20 14:06 ` Philipp Tomsich 2017-11-20 14:07 ` Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:06 UTC (permalink / raw) To: u-boot > Rockchip bootrom will enter download mode if it returns from > spl/tpl with a non-zero value and couldn't find a valid image > in the backup partition. > This patch provide a method to instruct the system to back to > bootrom download mode by checking the BROM_DOWNLOAD_FLAG register. > As the bootrom download function relys on some modules such as > interrupts, so we need to back to bootrom as early as possbile > before the tpl/spl code override the interrupt configurations. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > --- > > Changes in v3: > - rebase on Dr. Philipp's series > > Changes in v2: > - implement the back to bootrom download mode check in c, > thanks for Dr. Philipp Tomsich's suggestion. > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 4 +++ > arch/arm/mach-rockchip/Kconfig | 1 + > arch/arm/mach-rockchip/bootrom.c | 47 ++++++++++++++++++++++++-- > 3 files changed, 50 insertions(+), 2 deletions(-) > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 2/3] rockchip: add support for enter to bootrom download mode 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich @ 2017-11-20 14:07 ` Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:07 UTC (permalink / raw) To: u-boot > Rockchip bootrom will enter download mode if it returns from > spl/tpl with a non-zero value and couldn't find a valid image > in the backup partition. > This patch provide a method to instruct the system to back to > bootrom download mode by checking the BROM_DOWNLOAD_FLAG register. > As the bootrom download function relys on some modules such as > interrupts, so we need to back to bootrom as early as possbile > before the tpl/spl code override the interrupt configurations. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > --- > > Changes in v3: > - rebase on Dr. Philipp's series > > Changes in v2: > - implement the back to bootrom download mode check in c, > thanks for Dr. Philipp Tomsich's suggestion. > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 4 +++ > arch/arm/mach-rockchip/Kconfig | 1 + > arch/arm/mach-rockchip/bootrom.c | 47 ++++++++++++++++++++++++-- > 3 files changed, 50 insertions(+), 2 deletions(-) > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 2/3] rockchip: add support for enter to bootrom download mode 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:07 ` Philipp Tomsich @ 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-21 22:32 UTC (permalink / raw) To: u-boot > Rockchip bootrom will enter download mode if it returns from > spl/tpl with a non-zero value and couldn't find a valid image > in the backup partition. > This patch provide a method to instruct the system to back to > bootrom download mode by checking the BROM_DOWNLOAD_FLAG register. > As the bootrom download function relys on some modules such as > interrupts, so we need to back to bootrom as early as possbile > before the tpl/spl code override the interrupt configurations. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Kever Yang <kever.yang@rock-chips.com> > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > --- > > Changes in v3: > - rebase on Dr. Philipp's series > > Changes in v2: > - implement the back to bootrom download mode check in c, > thanks for Dr. Philipp Tomsich's suggestion. > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 4 +++ > arch/arm/mach-rockchip/Kconfig | 1 + > arch/arm/mach-rockchip/bootrom.c | 47 ++++++++++++++++++++++++-- > 3 files changed, 50 insertions(+), 2 deletions(-) > Applied to u-boot-rockchip, thanks! ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup 2017-10-11 6:59 [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan @ 2017-10-11 7:01 ` Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich ` (2 more replies) 2017-11-17 10:09 ` [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 3 siblings, 3 replies; 19+ messages in thread From: Andy Yan @ 2017-10-11 7:01 UTC (permalink / raw) To: u-boot Enter download mode if the download key pressed. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> --- Changes in v3: None Changes in v2: - more document - move adc key detect as the default arch/arm/mach-rockchip/boot_mode.c | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c index 4652490..bf0a410 100644 --- a/arch/arm/mach-rockchip/boot_mode.c +++ b/arch/arm/mach-rockchip/boot_mode.c @@ -5,14 +5,57 @@ */ #include <common.h> +#include <adc.h> #include <asm/io.h> #include <asm/arch/boot_mode.h> +void set_back_to_bootrom_dnl_flag(void) +{ + writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG); +} + +/* + * detect download key status by adc, most rockchip + * based boards use adc sample the download key status, + * but there are also some use gpio. So it's better to + * make this a weak function that can be override by + * some special boards. + */ +#define KEY_DOWN_MIN_VAL 0 +#define KEY_DOWN_MAX_VAL 30 + +__weak int rockchip_dnl_key_pressed(void) +{ + unsigned int val; + + if (adc_channel_single_shot("saradc", 1, &val)) { + printf("%s adc_channel_single_shot fail!\n", __func__); + return false; + } + + if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL)) + return true; + else + return false; +} + +void rockchip_dnl_mode_check(void) +{ + if (rockchip_dnl_key_pressed()) { + printf("download key pressed, entering download mode..."); + set_back_to_bootrom_dnl_flag(); + do_reset(NULL, 0, 0, NULL); + } +} + int setup_boot_mode(void) { void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; int boot_mode = readl(reg); + rockchip_dnl_mode_check(); + + boot_mode = readl(reg); debug("boot mode %x.\n", boot_mode); /* Clear boot mode */ -- 2.7.4 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan @ 2017-11-20 14:06 ` Philipp Tomsich 2017-11-20 14:51 ` Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:06 UTC (permalink / raw) To: u-boot > Enter download mode if the download key pressed. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > --- > > Changes in v3: None > Changes in v2: > - more document > - move adc key detect as the default > > arch/arm/mach-rockchip/boot_mode.c | 43 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich @ 2017-11-20 14:51 ` Philipp Tomsich 2017-11-21 1:02 ` Andy Yan 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 1 reply; 19+ messages in thread From: Philipp Tomsich @ 2017-11-20 14:51 UTC (permalink / raw) To: u-boot On Wed, 11 Oct 2017, Andy Yan wrote: > Enter download mode if the download key pressed. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> See below for requested changes. > --- > > Changes in v3: None > Changes in v2: > - more document > - move adc key detect as the default > > arch/arm/mach-rockchip/boot_mode.c | 43 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c > index 4652490..bf0a410 100644 > --- a/arch/arm/mach-rockchip/boot_mode.c > +++ b/arch/arm/mach-rockchip/boot_mode.c > @@ -5,14 +5,57 @@ > */ > > #include <common.h> > +#include <adc.h> > #include <asm/io.h> > #include <asm/arch/boot_mode.h> > > +void set_back_to_bootrom_dnl_flag(void) > +{ > + writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG); > +} > + > +/* > + * detect download key status by adc, most rockchip > + * based boards use adc sample the download key status, > + * but there are also some use gpio. So it's better to > + * make this a weak function that can be override by > + * some special boards. > + */ > +#define KEY_DOWN_MIN_VAL 0 > +#define KEY_DOWN_MAX_VAL 30 > + > +__weak int rockchip_dnl_key_pressed(void) > +{ > + unsigned int val; > + > + if (adc_channel_single_shot("saradc", 1, &val)) { > + printf("%s adc_channel_single_shot fail!\n", __func__); This should be a pr_debug() or pr_err(). Thanks. > + return false; > + } > + > + if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL)) > + return true; > + else > + return false; > +} > + > +void rockchip_dnl_mode_check(void) > +{ > + if (rockchip_dnl_key_pressed()) { > + printf("download key pressed, entering download mode..."); > + set_back_to_bootrom_dnl_flag(); > + do_reset(NULL, 0, 0, NULL); > + } > +} > + > int setup_boot_mode(void) > { > void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; > int boot_mode = readl(reg); > > + rockchip_dnl_mode_check(); > + > + boot_mode = readl(reg); > debug("boot mode %x.\n", boot_mode); > > /* Clear boot mode */ > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup 2017-11-20 14:51 ` Philipp Tomsich @ 2017-11-21 1:02 ` Andy Yan 2017-11-21 12:31 ` Dr. Philipp Tomsich 0 siblings, 1 reply; 19+ messages in thread From: Andy Yan @ 2017-11-21 1:02 UTC (permalink / raw) To: u-boot Hi Philipp: On 2017年11月20日 22:51, Philipp Tomsich wrote: > > > On Wed, 11 Oct 2017, Andy Yan wrote: > >> Enter download mode if the download key pressed. >> >> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > > See below for requested changes. > >> --- >> >> Changes in v3: None >> Changes in v2: >> - more document >> - move adc key detect as the default >> >> arch/arm/mach-rockchip/boot_mode.c | 43 >> ++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 43 insertions(+) >> >> diff --git a/arch/arm/mach-rockchip/boot_mode.c >> b/arch/arm/mach-rockchip/boot_mode.c >> index 4652490..bf0a410 100644 >> --- a/arch/arm/mach-rockchip/boot_mode.c >> +++ b/arch/arm/mach-rockchip/boot_mode.c >> @@ -5,14 +5,57 @@ >> */ >> >> #include <common.h> >> +#include <adc.h> >> #include <asm/io.h> >> #include <asm/arch/boot_mode.h> >> >> +void set_back_to_bootrom_dnl_flag(void) >> +{ >> + writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG); >> +} >> + >> +/* >> + * detect download key status by adc, most rockchip >> + * based boards use adc sample the download key status, >> + * but there are also some use gpio. So it's better to >> + * make this a weak function that can be override by >> + * some special boards. >> + */ >> +#define KEY_DOWN_MIN_VAL 0 >> +#define KEY_DOWN_MAX_VAL 30 >> + >> +__weak int rockchip_dnl_key_pressed(void) >> +{ >> + unsigned int val; >> + >> + if (adc_channel_single_shot("saradc", 1, &val)) { >> + printf("%s adc_channel_single_shot fail!\n", __func__); > > This should be a pr_debug() or pr_err(). Okay, I will update it. > Thanks. > >> + return false; >> + } >> + >> + if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL)) >> + return true; >> + else >> + return false; >> +} >> + >> +void rockchip_dnl_mode_check(void) >> +{ >> + if (rockchip_dnl_key_pressed()) { >> + printf("download key pressed, entering download mode..."); >> + set_back_to_bootrom_dnl_flag(); >> + do_reset(NULL, 0, 0, NULL); >> + } >> +} >> + >> int setup_boot_mode(void) >> { >> void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; >> int boot_mode = readl(reg); >> >> + rockchip_dnl_mode_check(); >> + >> + boot_mode = readl(reg); >> debug("boot mode %x.\n", boot_mode); >> >> /* Clear boot mode */ >> > > > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup 2017-11-21 1:02 ` Andy Yan @ 2017-11-21 12:31 ` Dr. Philipp Tomsich 0 siblings, 0 replies; 19+ messages in thread From: Dr. Philipp Tomsich @ 2017-11-21 12:31 UTC (permalink / raw) To: u-boot Andy, > On 21 Nov 2017, at 02:02, Andy Yan <andy.yan@rock-chips.com> wrote: > > Hi Philipp: > > > On 2017年11月20日 22:51, Philipp Tomsich wrote: >> >> >> On Wed, 11 Oct 2017, Andy Yan wrote: >> >>> Enter download mode if the download key pressed. >>> >>> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >>> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> >> >> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> >> >> See below for requested changes. >> >>> --- >>> >>> Changes in v3: None >>> Changes in v2: >>> - more document >>> - move adc key detect as the default >>> >>> arch/arm/mach-rockchip/boot_mode.c | 43 ++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 43 insertions(+) >>> >>> diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c >>> index 4652490..bf0a410 100644 >>> --- a/arch/arm/mach-rockchip/boot_mode.c >>> +++ b/arch/arm/mach-rockchip/boot_mode.c >>> @@ -5,14 +5,57 @@ >>> */ >>> >>> #include <common.h> >>> +#include <adc.h> >>> #include <asm/io.h> >>> #include <asm/arch/boot_mode.h> >>> >>> +void set_back_to_bootrom_dnl_flag(void) >>> +{ >>> + writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG); >>> +} >>> + >>> +/* >>> + * detect download key status by adc, most rockchip >>> + * based boards use adc sample the download key status, >>> + * but there are also some use gpio. So it's better to >>> + * make this a weak function that can be override by >>> + * some special boards. >>> + */ >>> +#define KEY_DOWN_MIN_VAL 0 >>> +#define KEY_DOWN_MAX_VAL 30 >>> + >>> +__weak int rockchip_dnl_key_pressed(void) >>> +{ >>> + unsigned int val; >>> + >>> + if (adc_channel_single_shot("saradc", 1, &val)) { >>> + printf("%s adc_channel_single_shot fail!\n", __func__); >> >> This should be a pr_debug() or pr_err(). > > Okay, I will update it. Never mind. I’ll change this to a pr_err() when I commit. >> Thanks. >> >>> + return false; >>> + } >>> + >>> + if ((val >= KEY_DOWN_MIN_VAL) && (val <= KEY_DOWN_MAX_VAL)) >>> + return true; >>> + else >>> + return false; >>> +} >>> + >>> +void rockchip_dnl_mode_check(void) >>> +{ >>> + if (rockchip_dnl_key_pressed()) { >>> + printf("download key pressed, entering download mode..."); >>> + set_back_to_bootrom_dnl_flag(); >>> + do_reset(NULL, 0, 0, NULL); >>> + } >>> +} >>> + >>> int setup_boot_mode(void) >>> { >>> void *reg = (void *)CONFIG_ROCKCHIP_BOOT_MODE_REG; >>> int boot_mode = readl(reg); >>> >>> + rockchip_dnl_mode_check(); >>> + >>> + boot_mode = readl(reg); >>> debug("boot mode %x.\n", boot_mode); >>> >>> /* Clear boot mode */ ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [U-Boot, v3, 3/3] rockchip: check download key before bootup 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:51 ` Philipp Tomsich @ 2017-11-21 22:32 ` Philipp Tomsich 2 siblings, 0 replies; 19+ messages in thread From: Philipp Tomsich @ 2017-11-21 22:32 UTC (permalink / raw) To: u-boot > Enter download mode if the download key pressed. > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> > --- > > Changes in v3: None > Changes in v2: > - more document > - move adc key detect as the default > > arch/arm/mach-rockchip/boot_mode.c | 43 ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > Applied to u-boot-rockchip, thanks! ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct 2017-10-11 6:59 [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan ` (2 preceding siblings ...) 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan @ 2017-11-17 10:09 ` Andy Yan 2017-11-17 10:19 ` Dr. Philipp Tomsich 3 siblings, 1 reply; 19+ messages in thread From: Andy Yan @ 2017-11-17 10:09 UTC (permalink / raw) To: u-boot Hi Philipp: Please remember to take this series if they are looks ok for you. And if you have questions about them, please let me know. On 2017年10月11日 14:59, Andy Yan wrote: > the board enter download firmware mode, some boards use a > adc to detect the key status, and some use a gpio. > > This series try to implement all the download mode related > functions on the base of Dr. Philipp's patch[0]. > > [0]https://lists.denx.de/pipermail/u-boot/2017-October/309060.html > > Changes in v3: > - add support for rk3188 > - rebase on Dr. Philipp's series > > Changes in v2: > - correct the rk322x boot mode register address > - make the help text more clear > - implement the back to bootrom download mode check in c, > thanks for Dr. Philipp Tomsich's suggestion. > - more document > - move adc key detect as the default > > Andy Yan (3): > rockchip: make boot_mode related codes reused across all platforms > rockchip: add support for enter to bootrom download mode > rockchip: check download key before bootup > > arch/arm/include/asm/arch-rockchip/boot_mode.h | 6 ++ > arch/arm/mach-rockchip/Kconfig | 16 ++++++ > arch/arm/mach-rockchip/Makefile | 6 ++ > arch/arm/mach-rockchip/boot_mode.c | 76 ++++++++++++++++++++++++++ > arch/arm/mach-rockchip/bootrom.c | 47 +++++++++++++++- > arch/arm/mach-rockchip/rk3036-board.c | 24 -------- > arch/arm/mach-rockchip/rk3188-board.c | 1 + > arch/arm/mach-rockchip/rk322x-board.c | 24 -------- > arch/arm/mach-rockchip/rk3288-board.c | 25 --------- > arch/arm/mach-rockchip/rk3399-board.c | 14 +++++ > 10 files changed, 164 insertions(+), 75 deletions(-) > create mode 100644 arch/arm/mach-rockchip/boot_mode.c > create mode 100644 arch/arm/mach-rockchip/rk3399-board.c > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct 2017-11-17 10:09 ` [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan @ 2017-11-17 10:19 ` Dr. Philipp Tomsich 0 siblings, 0 replies; 19+ messages in thread From: Dr. Philipp Tomsich @ 2017-11-17 10:19 UTC (permalink / raw) To: u-boot Andy, Thanks for the reminder. I had this on my list as one of the next ones to be merged. Cheers, Philipp. > On 17 Nov 2017, at 11:09, Andy Yan <andy.yan@rock-chips.com> wrote: > > Hi Philipp: > > Please remember to take this series if they are looks ok for you. And if you have questions about them, please let me know. > > > On 2017年10月11日 14:59, Andy Yan wrote: >> the board enter download firmware mode, some boards use a >> adc to detect the key status, and some use a gpio. >> >> This series try to implement all the download mode related >> functions on the base of Dr. Philipp's patch[0]. >> >> [0]https://lists.denx.de/pipermail/u-boot/2017-October/309060.html >> >> Changes in v3: >> - add support for rk3188 >> - rebase on Dr. Philipp's series >> >> Changes in v2: >> - correct the rk322x boot mode register address >> - make the help text more clear >> - implement the back to bootrom download mode check in c, >> thanks for Dr. Philipp Tomsich's suggestion. >> - more document >> - move adc key detect as the default >> >> Andy Yan (3): >> rockchip: make boot_mode related codes reused across all platforms >> rockchip: add support for enter to bootrom download mode >> rockchip: check download key before bootup >> >> arch/arm/include/asm/arch-rockchip/boot_mode.h | 6 ++ >> arch/arm/mach-rockchip/Kconfig | 16 ++++++ >> arch/arm/mach-rockchip/Makefile | 6 ++ >> arch/arm/mach-rockchip/boot_mode.c | 76 ++++++++++++++++++++++++++ >> arch/arm/mach-rockchip/bootrom.c | 47 +++++++++++++++- >> arch/arm/mach-rockchip/rk3036-board.c | 24 -------- >> arch/arm/mach-rockchip/rk3188-board.c | 1 + >> arch/arm/mach-rockchip/rk322x-board.c | 24 -------- >> arch/arm/mach-rockchip/rk3288-board.c | 25 --------- >> arch/arm/mach-rockchip/rk3399-board.c | 14 +++++ >> 10 files changed, 164 insertions(+), 75 deletions(-) >> create mode 100644 arch/arm/mach-rockchip/boot_mode.c >> create mode 100644 arch/arm/mach-rockchip/rk3399-board.c >> > > ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2017-11-21 22:32 UTC | newest] Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-10-11 6:59 [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 2017-10-11 7:00 ` [U-Boot] [PATCH v3 1/3] rockchip: make boot_mode related codes reused across all platforms Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:50 ` Philipp Tomsich 2017-11-21 0:48 ` Andy Yan 2017-11-21 8:25 ` Dr. Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2017-10-11 7:00 ` [U-Boot] [PATCH v3 2/3] rockchip: add support for enter to bootrom download mode Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:07 ` Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2017-10-11 7:01 ` [U-Boot] [PATCH v3 3/3] rockchip: check download key before bootup Andy Yan 2017-11-20 14:06 ` [U-Boot] [U-Boot, v3, " Philipp Tomsich 2017-11-20 14:51 ` Philipp Tomsich 2017-11-21 1:02 ` Andy Yan 2017-11-21 12:31 ` Dr. Philipp Tomsich 2017-11-21 22:32 ` Philipp Tomsich 2017-11-17 10:09 ` [U-Boot] [PATCH v3 0/3] Most rockchip platform based boards use a key to instruct Andy Yan 2017-11-17 10:19 ` Dr. Philipp Tomsich
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.