Signed-off-by: Angela Stegmaier <angelaba...@ti.com>
Signed-off-by: Dileep Katta <dileep.ka...@linaro.org>
---
 board/ti/dra7xx/Makefile             |  1 +
 board/ti/dra7xx/fastboot.c           | 45 ++++++++++++++++++++++++++++++++++++
 common/cmd_bootm.c                   |  5 ++++
 drivers/usb/gadget/f_fastboot.c      |  5 ++++
 include/configs/dra7xx_evm_android.h | 14 +++++++++++
 5 files changed, 70 insertions(+)
 create mode 100644 board/ti/dra7xx/fastboot.c

diff --git a/board/ti/dra7xx/Makefile b/board/ti/dra7xx/Makefile
index 434e8d1..ae730ae 100644
--- a/board/ti/dra7xx/Makefile
+++ b/board/ti/dra7xx/Makefile
@@ -6,3 +6,4 @@
 #
 
 obj-y  := evm.o
+obj-$(CONFIG_CMD_FASTBOOT) += fastboot.o
diff --git a/board/ti/dra7xx/fastboot.c b/board/ti/dra7xx/fastboot.c
new file mode 100644
index 0000000..e05010d
--- /dev/null
+++ b/board/ti/dra7xx/fastboot.c
@@ -0,0 +1,45 @@
+/*
+ * (C) Copyright 2013
+ * Texas Instruments Incorporated, <www.ti.com>
+ *
+ * Lokesh Vutla <lokeshvu...@ti.com>
+ *
+ * Based on previous work by:
+ * Aneesh V       <ane...@ti.com>
+ * Steve Sakoman  <st...@sakoman.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#include <common.h>
+#include <asm/io.h>
+#include <asm-generic/gpio.h>
+#include <config.h>
+
+
+int fb_set_reboot_flag(void)
+{
+       /* clear all reset events */
+       __raw_writel(DRA7XX_PRM_RSTST_CLR, PRM_RSTST);
+       strncpy((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE, "bootloader",
+               DRA7XX_REBOOT_REASON_SIZE - 1);
+       *(((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE) +
+                               DRA7XX_REBOOT_REASON_SIZE - 1) = '\0';
+       /* trigger warm reset */
+       __raw_writel(DRA7XX_PRM_RSTCTRL_RESET_WARM_BIT, DRA7XX_PRM_RSTCTRL);
+
+       return 0;
+}
+
+int fb_check_reboot_flag(void)
+{
+       /* Check if we are coming from a warm reset */
+       if (__raw_readl(DRA7XX_PRM_RSTST) & DRA7XX_PRM_RSTST_RESET_WARM_BIT)
+               if (!strncmp((const char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE,
+                               "bootloader", DRA7XX_REBOOT_REASON_SIZE)) {
+                       strncpy((char *)DRA7XX_PUBLIC_SAR_RAM_1_FREE, "",
+                               DRA7XX_REBOOT_REASON_SIZE);
+                       return 0;
+               }
+
+       return 1;
+}
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 48199bf..00791be 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -729,6 +729,11 @@ int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
 {
        int ret;
 
+#if defined(CONFIG_CMD_FASTBOOT)
+       if (!fb_check_reboot_flag())
+               do_fastboot(cmdtp, flag, argc, argv);
+#endif
+
        /* Consume 'booti' */
        argc--; argv++;
 
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 206b6d1..a450357 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -332,6 +332,11 @@ int __weak fb_set_reboot_flag(void)
        return -ENOSYS;
 }
 
+int __weak fb_check_reboot_flag(void)
+{
+       return -ENOSYS;
+}
+
 static void cb_reboot(struct usb_ep *ep, struct usb_request *req)
 {
        char *cmd = req->buf;
diff --git a/include/configs/dra7xx_evm_android.h 
b/include/configs/dra7xx_evm_android.h
index 68e7eec..2038e00 100644
--- a/include/configs/dra7xx_evm_android.h
+++ b/include/configs/dra7xx_evm_android.h
@@ -310,4 +310,18 @@
 #endif
 #endif  /* NOR support */
 
+#define DRA7XX_PUBLIC_SAR_RAM_1_FREE           (0x4AE26000 + 0xFE0)
+#define DRA7XX_PRM_RSTCTRL_RESET_WARM_BIT      (1<<0)
+#define DRA7XX_PRM_RSTST_RESET_WARM_BIT        (1<<1)
+#define DRA7XX_PRM_RSTST                       0x4AE07D04
+#define DRA7XX_PRM_RSTCTRL                     0x4AE07D00
+#define DRA7XX_PRM_RSTST_CLR                   0xfff
+#define DRA7XX_REBOOT_REASON_SIZE              0xf
+
+#define CONFIG_BOARD_MACH_TYPE                  4070
+#define MEMORY_BASE                             0x80000000
+#define CONFIG_ADDR_ATAGS                       (MEMORY_BASE + 0x100)
+#define CONFIG_ADDR_DOWNLOAD                    (MEMORY_BASE + 0x02000000)
+#define DEVICE_TREE                             0x82f80000
+
 #endif /* __CONFIG_DRA7XX_EVM_ANDROID_H */
-- 
1.8.3.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to