summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recipes-support/bmode-usb/bmode-usb/bmode_usb.c45
-rw-r--r--recipes-support/bmode-usb/bmode-usb_1.0.bb15
2 files changed, 60 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;
+}
diff --git a/recipes-support/bmode-usb/bmode-usb_1.0.bb b/recipes-support/bmode-usb/bmode-usb_1.0.bb
new file mode 100644
index 0000000..f33f531
--- /dev/null
+++ b/recipes-support/bmode-usb/bmode-usb_1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Sets i.MX boot mode on next reboot to recovery, aka serial download"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://bmode_usb.c;endline=5;md5=4c9010cb42fb7648a460c35e6b5c685c"
+
+SRC_URI = "file://bmode_usb.c"
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} -o bmode_usb bmode_usb.c ${CFLAGS} ${LDFLAGS}
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install bmode_usb ${D}${bindir}
+}