
Hi Jeffy,
On 12 January 2016 at 18:59, Jeffy Chen jeffy.chen@rock-chips.com 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
Changes in v3: Use rockchip's legacy reboot mode definitions.
Changes in v2: None
board/kylin/kylin_rk3036/kylin_rk3036.c | 46 +++++++++++++++++++++++++++++++++ include/configs/kylin_rk3036.h | 3 +++ 2 files changed, 49 insertions(+)
diff --git a/board/kylin/kylin_rk3036/kylin_rk3036.c b/board/kylin/kylin_rk3036/kylin_rk3036.c index 40d6b52..4fc31b1 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;
Can you make this a local var in board_late_init()? I does not seem to need to be static.
void get_ddr_config(struct rk3036_ddr_config *config) { /* K4B4G1646Q config */ @@ -28,6 +33,47 @@ void get_ddr_config(struct rk3036_ddr_config *config) config->bw = 1; }
+#define FASTBOOT_KEY_GPIO 93
+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);
+}
+enum rockchip_boot_mode {
ROCKCHIP_BOOT_MODE_NORMAL = 0x5242C300,
ROCKCHIP_BOOT_MODE_LOADER,
ROCKCHIP_BOOT_MODE_MASKROM,
ROCKCHIP_BOOT_MODE_RECOVER,
ROCKCHIP_BOOT_MODE_NORECOVER,
ROCKCHIP_BOOT_MODE_SECONDOS,
ROCKCHIP_BOOT_MODE_WIPEDATA,
ROCKCHIP_BOOT_MODE_WIPEALL,
ROCKCHIP_BOOT_MODE_CHECKIMG,
ROCKCHIP_BOOT_MODE_FASTBOOT,
ROCKCHIP_BOOT_MODE_SECUREBOOT_DISABLE,
ROCKCHIP_BOOT_MODE_CHARGING,
ROCKCHIP_BOOT_MODE_MAX,
+};
+int board_late_init(void) +{
int boot_mode = readl(&grf->os_reg[4]);
/* Clear boot mode */
writel(0, &grf->os_reg[4]);
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
2.1.4
Regards, Simon