aboutsummaryrefslogtreecommitdiffstats
path: root/src/samd21/usbserial.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/samd21/usbserial.c')
-rw-r--r--src/samd21/usbserial.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/samd21/usbserial.c b/src/samd21/usbserial.c
index a574b31c..0864a4c5 100644
--- a/src/samd21/usbserial.c
+++ b/src/samd21/usbserial.c
@@ -5,7 +5,9 @@
// This file may be distributed under the terms of the GNU GPLv3 license.
#include <string.h> // memcpy
+#include "autoconf.h" // CONFIG_FLASH_START
#include "board/io.h" // readl
+#include "board/irq.h" // irq_disable
#include "board/usb_cdc.h" // usb_notify_ep0
#include "board/usb_cdc_ep.h" // USB_CDC_EP_BULK_IN
#include "internal.h" // enable_pclock
@@ -171,6 +173,12 @@ usb_set_configure(void)
void
usb_request_bootloader(void)
{
+ if (CONFIG_FLASH_START) {
+ // Arduino Zero bootloader hack
+ irq_disable();
+ writel((void*)0x20007FFC, 0x07738135);
+ NVIC_SystemReset();
+ }
}
void