Message ID | 1452249212-25183-7-git-send-email-jeffy.chen@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Simon, Just know our guys are upstreaming our reboot mode support with our legacy reboot mode definitions(in our legacy loader & kernel): https://lkml.org/lkml/2015/12/21/161 and that serial seems close to get accepted, so i think maybe i should use that definitions too... On 2016-1-8 18:33, Jeffy Chen wrote: > We will save boot mode flag in grf's os_reg[0], if fastboot > requested or fastboot key pressed, try to enter fastboot mode > at preboot stage. > > Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> > Acked-by: Simon Glass <sjg@chromium.org> > --- > > Changes in v2: None > > board/kylin/kylin_rk3036/kylin_rk3036.c | 32 ++++++++++++++++++++++++++++++++ > include/configs/kylin_rk3036.h | 3 +++ > 2 files changed, 35 insertions(+) > > diff --git a/board/kylin/kylin_rk3036/kylin_rk3036.c b/board/kylin/kylin_rk3036/kylin_rk3036.c > index 40d6b52..df2c123 100644 > --- a/board/kylin/kylin_rk3036/kylin_rk3036.c > +++ b/board/kylin/kylin_rk3036/kylin_rk3036.c > @@ -8,10 +8,15 @@ > #include <dm.h> > #include <asm/io.h> > #include <asm/arch/uart.h> > +#include <asm/arch-rockchip/grf_rk3036.h> > #include <asm/arch/sdram_rk3036.h> > +#include <asm/gpio.h> > > DECLARE_GLOBAL_DATA_PTR; > > +#define GRF_BASE 0x20008000 > +static struct rk3036_grf * const grf = (void *)GRF_BASE; > + > void get_ddr_config(struct rk3036_ddr_config *config) > { > /* K4B4G1646Q config */ > @@ -28,6 +33,33 @@ void get_ddr_config(struct rk3036_ddr_config *config) > config->bw = 1; > } > > +#define FASTBOOT_KEY_GPIO 93 > +#define ROCKCHIP_BOOT_MODE_NORMAL 0 > +#define ROCKCHIP_BOOT_MODE_FASTBOOT 1 > + > +int fastboot_key_pressed(void) > +{ > + gpio_request(FASTBOOT_KEY_GPIO, "fastboot_key"); > + gpio_direction_input(FASTBOOT_KEY_GPIO); > + return !gpio_get_value(FASTBOOT_KEY_GPIO); > +} > + > +int board_late_init(void) > +{ > + int boot_mode = readl(&grf->os_reg[0]); > + > + /* Clear boot mode */ > + writel(ROCKCHIP_BOOT_MODE_NORMAL, &grf->os_reg[0]); > + > + if (boot_mode == ROCKCHIP_BOOT_MODE_FASTBOOT || > + fastboot_key_pressed()) { > + printf("enter fastboot!\n"); > + setenv("preboot", "setenv preboot; fastboot usb0"); > + } > + > + return 0; > +} > + > int board_init(void) > { > return 0; > diff --git a/include/configs/kylin_rk3036.h b/include/configs/kylin_rk3036.h > index 49997ec..424e81b 100644 > --- a/include/configs/kylin_rk3036.h > +++ b/include/configs/kylin_rk3036.h > @@ -39,6 +39,9 @@ > "mmcpart=5\0" \ > "loadaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \ > > +#define CONFIG_BOARD_LATE_INIT > +#define CONFIG_PREBOOT > + > #define CONFIG_ANDROID_BOOT_IMAGE > #define CONFIG_SYS_BOOT_RAMDISK_HIGH > #define CONFIG_SYS_HUSH_PARSER
diff --git a/board/kylin/kylin_rk3036/kylin_rk3036.c b/board/kylin/kylin_rk3036/kylin_rk3036.c index 40d6b52..df2c123 100644 --- a/board/kylin/kylin_rk3036/kylin_rk3036.c +++ b/board/kylin/kylin_rk3036/kylin_rk3036.c @@ -8,10 +8,15 @@ #include <dm.h> #include <asm/io.h> #include <asm/arch/uart.h> +#include <asm/arch-rockchip/grf_rk3036.h> #include <asm/arch/sdram_rk3036.h> +#include <asm/gpio.h> DECLARE_GLOBAL_DATA_PTR; +#define GRF_BASE 0x20008000 +static struct rk3036_grf * const grf = (void *)GRF_BASE; + void get_ddr_config(struct rk3036_ddr_config *config) { /* K4B4G1646Q config */ @@ -28,6 +33,33 @@ void get_ddr_config(struct rk3036_ddr_config *config) config->bw = 1; } +#define FASTBOOT_KEY_GPIO 93 +#define ROCKCHIP_BOOT_MODE_NORMAL 0 +#define ROCKCHIP_BOOT_MODE_FASTBOOT 1 + +int fastboot_key_pressed(void) +{ + gpio_request(FASTBOOT_KEY_GPIO, "fastboot_key"); + gpio_direction_input(FASTBOOT_KEY_GPIO); + return !gpio_get_value(FASTBOOT_KEY_GPIO); +} + +int board_late_init(void) +{ + int boot_mode = readl(&grf->os_reg[0]); + + /* Clear boot mode */ + writel(ROCKCHIP_BOOT_MODE_NORMAL, &grf->os_reg[0]); + + if (boot_mode == ROCKCHIP_BOOT_MODE_FASTBOOT || + fastboot_key_pressed()) { + printf("enter fastboot!\n"); + setenv("preboot", "setenv preboot; fastboot usb0"); + } + + return 0; +} + int board_init(void) { return 0; diff --git a/include/configs/kylin_rk3036.h b/include/configs/kylin_rk3036.h index 49997ec..424e81b 100644 --- a/include/configs/kylin_rk3036.h +++ b/include/configs/kylin_rk3036.h @@ -39,6 +39,9 @@ "mmcpart=5\0" \ "loadaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \ +#define CONFIG_BOARD_LATE_INIT +#define CONFIG_PREBOOT + #define CONFIG_ANDROID_BOOT_IMAGE #define CONFIG_SYS_BOOT_RAMDISK_HIGH #define CONFIG_SYS_HUSH_PARSER