diff mbox

[v1,4/4] ARM: DRA7: fastboot: Implement reboot-bootloader command - Implemented fb_set_reboot_flag() for DRA7 - Defined a weak function, fb_check_reboot_flag() - Implemented for DRA7

Message ID 1425381044-19460-4-git-send-email-dileep.katta@linaro.org
State New
Headers show

Commit Message

Dileep Katta March 3, 2015, 11:10 a.m. UTC
Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
Signed-off-by: Dileep Katta <dileep.katta@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 mbox

Patch

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 <lokeshvutla@ti.com>
+ *
+ * Based on previous work by:
+ * Aneesh V       <aneesh@ti.com>
+ * Steve Sakoman  <steve@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 */