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.c...@rock-chips.com>
Acked-by: Simon Glass <s...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to