<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/10360">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">USB: increase USB reset time<br><br>USB reset can be signaled by pulling low USB D+ for at least 10 ms,<br>according to the USB specification. This force a re-enumeration.<br>This time is increased to 20 ms to work with more USB HUBs.<br><br>Some SAM3S based board have external D+ pull-up mechanism (such as<br>SIMtrace) which needs to be used to pull D+ low.<br>This is a legacy mechanism from SAM7S history.<br>This mechanism is not required anymore on the SAM3S, and the qmod<br>does not use it. When the USB HAL is suspended, the transceiver is<br>disabled, causing D+ and D- to be pulled low. Then the HAL is activated<br>again. This is particularly required when DFU is started (and<br>enumerated), and after flashing the SAM3S switched to the main<br>application (without reset), so it can properly re-enumerate.<br><br>This board difference is now defined on the board header.<br><br>Change-Id: I9b58d8101c2fcf5595026b675728826af26127a3<br>---<br>M firmware/apps/dfu/main.c<br>M firmware/libboard/common/include/board_common.h<br>M firmware/libboard/simtrace/include/board.h<br>M firmware/libcommon/source/usb.c<br>4 files changed, 23 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/apps/dfu/main.c b/firmware/apps/dfu/main.c</span><br><span>index 74268ad..7f8fbfc 100644</span><br><span>--- a/firmware/apps/dfu/main.c</span><br><span>+++ b/firmware/apps/dfu/main.c</span><br><span>@@ -22,6 +22,7 @@</span><br><span> #include "usb/device/dfu/dfu.h"</span><br><span> #include "usb/common/dfu/usb_dfu.h"</span><br><span> #include "manifest.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "USBD_HAL.h"</span><br><span> </span><br><span> #include <osmocom/core/timer.h></span><br><span> </span><br><span>@@ -294,11 +295,18 @@</span><br><span> </span><br><span>       TRACE_INFO("USB init...\n\r");</span><br><span>     /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>  const Pin usb_dp_pullup = PIN_USB_PULLUP;</span><br><span>    PIO_Configure(&usb_dp_pullup, 1);</span><br><span>        PIO_Set(&usb_dp_pullup);</span><br><span style="color: hsl(0, 100%, 40%);">-    mdelay(15);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+   USBD_HAL_Suspend();</span><br><span style="color: hsl(120, 100%, 40%);">+   mdelay(20);</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>   PIO_Clear(&usb_dp_pullup);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+        USBD_HAL_Activate();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       USBDFU_Initialize(&dfu_descriptors);</span><br><span> </span><br><span>         while (USBD_GetState() < USBD_STATE_CONFIGURED) {</span><br><span>diff --git a/firmware/libboard/common/include/board_common.h b/firmware/libboard/common/include/board_common.h</span><br><span>index 06d3d6a..1b29680 100644</span><br><span>--- a/firmware/libboard/common/include/board_common.h</span><br><span>+++ b/firmware/libboard/common/include/board_common.h</span><br><span>@@ -114,15 +114,8 @@</span><br><span> #define SIM_PWEN        PIO_PA5</span><br><span> #define VCC_FWD         PIO_PA26</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/** Pin configuration to control USB pull-up on D+</span><br><span style="color: hsl(0, 100%, 40%);">- *  @details the USB pull-up on D+ is enable by default on the board but can be disabled by setting PA16 high</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PIN_USB_PULLUP  {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> // Board has UDP controller</span><br><span> #define BOARD_USB_UDP</span><br><span style="color: hsl(0, 100%, 40%);">-// D+ has external pull-up</span><br><span style="color: hsl(0, 100%, 40%);">-#define BOARD_USB_PULLUP_EXTERNAL</span><br><span> </span><br><span> #define BOARD_USB_DFU</span><br><span> #define BOARD_DFU_BOOT_SIZE    (16 * 1024)</span><br><span>diff --git a/firmware/libboard/simtrace/include/board.h b/firmware/libboard/simtrace/include/board.h</span><br><span>index db3a925..6751863 100644</span><br><span>--- a/firmware/libboard/simtrace/include/board.h</span><br><span>+++ b/firmware/libboard/simtrace/include/board.h</span><br><span>@@ -117,6 +117,11 @@</span><br><span> /* SPI flash write protect pin (active low, pulled low) */</span><br><span> #define PIN_SPI_WP    {PA15, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** Pin configuration to control USB pull-up on D+</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @details the USB pull-up on D+ is enable by default on the board but can be disabled by setting PA16 high</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_USB_PULLUP  {PIO_PA16, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /** USB definitions */</span><br><span> /* OpenMoko SIMtrace 2 USB vendor ID */</span><br><span> #define BOARD_USB_VENDOR_ID USB_VENDOR_OPENMOKO</span><br><span>diff --git a/firmware/libcommon/source/usb.c b/firmware/libcommon/source/usb.c</span><br><span>index e929a05..43c7bb2 100644</span><br><span>--- a/firmware/libcommon/source/usb.c</span><br><span>+++ b/firmware/libcommon/source/usb.c</span><br><span>@@ -2,6 +2,7 @@</span><br><span>  *         ATMEL Microcontroller Software Support</span><br><span>  * ----------------------------------------------------------------------------</span><br><span>  * Copyright (c) 2009, Atmel Corporation</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (c) 2018, sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span>  *</span><br><span>  * All rights reserved.</span><br><span>  *</span><br><span>@@ -35,6 +36,7 @@</span><br><span> #include "simtrace.h"</span><br><span> #include "simtrace_usb.h"</span><br><span> #include "utils.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "USBD_HAL.h"</span><br><span> </span><br><span> #include <cciddriverdescriptors.h></span><br><span> #include <usb/common/dfu/usb_dfu.h></span><br><span>@@ -576,11 +578,17 @@</span><br><span> {</span><br><span> </span><br><span>       /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>  const Pin usb_dp_pullup = PIN_USB_PULLUP;</span><br><span>    PIO_Configure(&usb_dp_pullup, 1);</span><br><span>        PIO_Set(&usb_dp_pullup);</span><br><span style="color: hsl(0, 100%, 40%);">-    mdelay(15);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+   USBD_HAL_Suspend();</span><br><span style="color: hsl(120, 100%, 40%);">+   mdelay(20);</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USB_PULLUP</span><br><span>   PIO_Clear(&usb_dp_pullup);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+        USBD_HAL_Activate();</span><br><span> </span><br><span>     // Get std USB driver</span><br><span>        USBDDriver *pUsbd = USBD_GetDriver();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10360">change 10360</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10360"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I9b58d8101c2fcf5595026b675728826af26127a3 </div>
<div style="display:none"> Gerrit-Change-Number: 10360 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>