summaryrefslogtreecommitdiff
path: root/recipes-support/bmode-usb/bmode-usb
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2017-05-01 17:23:13 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-06-09 17:20:21 +0200
commite7fcc273dc0d44145083f131d242424135fe2e53 (patch)
treec7beb97c805be3dae2d496de1545e622f7dc2fce /recipes-support/bmode-usb/bmode-usb
parentd351e11b76c004afbf0f37d5481266bafdb015ee (diff)
bmode-usb: add recipe to set i.mx 6 boot mode
This linux userspace tool does what U-Boot's 'bmode usb noreset' does. On the next reboot the i.MX 6 will boot to recovery aka serial download mode. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Diffstat (limited to 'recipes-support/bmode-usb/bmode-usb')
-rw-r--r--recipes-support/bmode-usb/bmode-usb/bmode_usb.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/recipes-support/bmode-usb/bmode-usb/bmode_usb.c b/recipes-support/bmode-usb/bmode-usb/bmode_usb.c
new file mode 100644
index 0000000..c8ca7e2
--- /dev/null
+++ b/recipes-support/bmode-usb/bmode-usb/bmode_usb.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 Toradex AG.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+/*
+ * Running this will set GPR9/GPR10 to values which will make the module
+ * go to recovery mode on next reboot.
+ * It has the same effect as 'bmode usb noreset' in U-Boot
+ *
+ * $ arm-linux-gnueabihf-gcc -o bmode_usb bmode_usb.c
+ * $ arm-linux-gnueabihf-strip bmode_usb
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+/* valid for i.MX6DL/i.MX6Q */
+#define SRC_BASE_ADDR 0x020D8000
+#define SRC_GPR9_OFF (0x40/4)
+#define SRC_GPR10_OFF (0x44/4)
+
+int main(void)
+{
+ int fd;
+ unsigned reg;
+ unsigned *src;
+
+ fd = open("/dev/mem", O_RDWR);
+ src = (unsigned *)mmap(0, SRC_GPR10_OFF + 4, PROT_READ|PROT_WRITE,
+ MAP_SHARED, fd, 0x020D8000);
+ if(src == NULL) {
+ printf("Failed to mmap register\n");
+ return -1;
+ }
+
+ src[SRC_GPR9_OFF] = 0x10;
+ src[SRC_GPR10_OFF] |= 0x10000000;
+
+ printf("Next reboot (not powercycle!) will boot to recovery mode\n");
+ return 0;
+}