boot: zephyr: Add fallback to USB DFU

Allow bootloader to fallback to USB DFU if no application is present,
that can be booted from. Similar to config BOOT_SERIAL_NO_APPLICATION.

Signed-off-by: Fabian Pflug <fabian.pflug@gumulka.eu>
diff --git a/boot/zephyr/Kconfig b/boot/zephyr/Kconfig
index 64e23ac..9ec442d 100644
--- a/boot/zephyr/Kconfig
+++ b/boot/zephyr/Kconfig
@@ -573,6 +573,12 @@
 
 endif # BOOT_USB_DFU_GPIO
 
+config BOOT_USB_DFU_NO_APPLICATION
+	bool "Stay in bootloader if no application"
+	help
+	  Allows for entering USB DFU recovery mode if there is no bootable
+	  application that the bootloader can jump to.
+
 config BOOT_USE_BENCH
         bool "Enable benchmark code"
         default n
diff --git a/boot/zephyr/main.c b/boot/zephyr/main.c
index ccabc28..fe0016c 100644
--- a/boot/zephyr/main.c
+++ b/boot/zephyr/main.c
@@ -531,6 +531,14 @@
          * recovery mode
          */
         boot_serial_enter();
+#elif defined(CONFIG_BOOT_USB_DFU_NO_APPLICATION)
+        rc = usb_enable(NULL);
+        if (rc && rc != -EALREADY) {
+            BOOT_LOG_ERR("Cannot enable USB");
+        } else {
+            BOOT_LOG_INF("Waiting for USB DFU");
+            wait_for_usb_dfu(K_FOREVER);
+        }
 #endif
 
         FIH_PANIC;