From 3ae029fbe7015be45f501ebf02f219a6e0cc932d Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 12 Apr 2014 09:33:52 -0600 Subject: [PATCH] STM32 OTGFS Host: Fix a logic error introduced in the last check-in --- arch/arm/src/stm32/Make.defs | 4 +-- arch/arm/src/stm32/stm32_otgfshost.c | 53 +++++++++++++++------------- arch/arm/src/stm32/stm32_usbhost.h | 12 +++---- drivers/usbhost/usbhost_enumerate.c | 8 ++--- drivers/usbhost/usbhost_trace.c | 2 -- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/arch/arm/src/stm32/Make.defs b/arch/arm/src/stm32/Make.defs index 41a22a6072..68a856c78b 100644 --- a/arch/arm/src/stm32/Make.defs +++ b/arch/arm/src/stm32/Make.defs @@ -34,7 +34,7 @@ ############################################################################ ifeq ($(CONFIG_ARMV7M_CMNVECTOR),y) -HEAD_ASRC = +HEAD_ASRC = else HEAD_ASRC = stm32_vectors.S endif @@ -90,7 +90,7 @@ CMN_CSRCS += up_copyarmstate.c endif endif -CHIP_ASRCS = +CHIP_ASRCS = CHIP_CSRCS = stm32_allocateheap.c stm32_start.c stm32_rcc.c stm32_lse.c CHIP_CSRCS += stm32_lsi.c stm32_gpio.c stm32_exti_gpio.c stm32_flash.c stm32_irq.c diff --git a/arch/arm/src/stm32/stm32_otgfshost.c b/arch/arm/src/stm32/stm32_otgfshost.c index 0f70a521ef..3614a7b022 100644 --- a/arch/arm/src/stm32/stm32_otgfshost.c +++ b/arch/arm/src/stm32/stm32_otgfshost.c @@ -98,7 +98,7 @@ * packets. Depends on CONFIG_DEBUG. */ -/* Pre-requistites (partial) */ +/* Pre-requisites (partial) */ #ifndef CONFIG_STM32_SYSCFG # error "CONFIG_STM32_SYSCFG is required" @@ -135,6 +135,11 @@ # undef CONFIG_STM32_USBHOST_PKTDUMP #endif +#undef HAVE_USB_TRACE 1 +#if defined(CONFIG_USBHOST_TRACE) || (defined(CONFIG_DEBUG) && defined(CONFIG_DEBUG_USB)) +# define HAVE_USB_TRACE 1 +#endif + /* HCD Setup *******************************************************************/ /* Hardware capabilities */ @@ -719,22 +724,26 @@ static void stm32_chan_configure(FAR struct stm32_usbhost_s *priv, int chidx) switch (priv->chan[chidx].eptype) { case OTGFS_EPTYPE_CTRL: + case OTGFS_EPTYPE_BULK: { - if (priv->chan[chidx].in) +#ifdef HAVE_USB_TRACE + uint16_t intrace; + uint16_t outtrace; + + /* Determine the definitive trace ID to use below */ + + if (priv->chan[chidx].eptype == OTGFS_EPTYPE_CTRL) { - usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_CTRL_IN, chidx, - priv->chan[chidx].epno); + intrace = OTGFS_VTRACE2_CHANCONF_CTRL_IN; + outtrace = OTGFS_VTRACE2_CHANCONF_CTRL_OUT; } else { - usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_CTRL_OUT, chidx, - priv->chan[chidx].epno); + intrace = OTGFS_VTRACE2_CHANCONF_BULK_IN; + outtrace = OTGFS_VTRACE2_CHANCONF_BULK_OUT; } - } - break; +#endif - case OTGFS_EPTYPE_BULK: - { /* Interrupts required for CTRL and BULK endpoints */ regval |= (OTGFS_HCINT_XFRC | OTGFS_HCINT_STALL | OTGFS_HCINT_NAK | @@ -744,14 +753,12 @@ static void stm32_chan_configure(FAR struct stm32_usbhost_s *priv, int chidx) if (priv->chan[chidx].in) { - usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_BULK_IN, chidx, - priv->chan[chidx].epno); + usbhost_vtrace2(intrace, chidx, priv->chan[chidx].epno); regval |= OTGFS_HCINT_BBERR; } else { - usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_BULK_OUT, chidx, - priv->chan[chidx].epno); + usbhost_vtrace2(outtrace, chidx, priv->chan[chidx].epno); regval |= OTGFS_HCINT_NYET; } } @@ -772,11 +779,13 @@ static void stm32_chan_configure(FAR struct stm32_usbhost_s *priv, int chidx) priv->chan[chidx].epno); regval |= OTGFS_HCINT_BBERR; } +#ifdef HAVE_USB_TRACE else { usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_INTR_OUT, chidx, priv->chan[chidx].epno); } +#endif } break; @@ -794,11 +803,13 @@ static void stm32_chan_configure(FAR struct stm32_usbhost_s *priv, int chidx) priv->chan[chidx].epno); regval |= (OTGFS_HCINT_TXERR | OTGFS_HCINT_BBERR); } +#ifdef HAVE_USB_TRACE else { usbhost_vtrace2(OTGFS_VTRACE2_CHANCONF_ISOC_OUT, chidx, priv->chan[chidx].epno); } +#endif } break; } @@ -1044,16 +1055,9 @@ static void stm32_chan_wakeup(FAR struct stm32_usbhost_s *priv, if (chan->result != EBUSY && chan->waiter) { - if (chan->in) - { - usbhost_vtrace2(OTGFS_VTRACE2_CHANWAKEUP_IN, chan->epno, - chan->result); - } - else - { - usbhost_vtrace2(OTGFS_VTRACE2_CHANWAKEUP_OUT, chan->epno, - chan->result); - } + usbhost_vtrace2(chan->in ? OTGFS_VTRACE2_CHANWAKEUP_IN : + OTGFS_VTRACE2_CHANWAKEUP_OUT, + chan->epno, chan->result); stm32_givesem(&chan->waitsem); chan->waiter = false; @@ -1112,7 +1116,6 @@ static void stm32_transfer_start(FAR struct stm32_usbhost_s *priv, int chidx) { npackets = STM32_MAX_PKTCOUNT; chan->buflen = STM32_MAX_PKTCOUNT * maxpacket; - usbhost_trace2(OTGFS_TRACE2_CLIP, chidx, chan->buflen); } } diff --git a/arch/arm/src/stm32/stm32_usbhost.h b/arch/arm/src/stm32/stm32_usbhost.h index b3a68cbeff..553a0d3ba7 100644 --- a/arch/arm/src/stm32/stm32_usbhost.h +++ b/arch/arm/src/stm32/stm32_usbhost.h @@ -172,14 +172,14 @@ extern "C" { * Enable/disable driving of VBUS 5V output. This function must be provided be * each platform that implements the STM32 OTG FS host interface * - * "On-chip 5 V VBUS generation is not supported. For this reason, a charge pump - * or, if 5 V are available on the application board, a basic power switch, must - * be added externally to drive the 5 V VBUS line. The external charge pump can - * be driven by any GPIO output. When the application decides to power on VBUS - * using the chosen GPIO, it must also set the port power bit in the host port + * "On-chip 5 V VBUS generation is not supported. For this reason, a charge pump + * or, if 5 V are available on the application board, a basic power switch, must + * be added externally to drive the 5 V VBUS line. The external charge pump can + * be driven by any GPIO output. When the application decides to power on VBUS + * using the chosen GPIO, it must also set the port power bit in the host port * control and status register (PPWR bit in OTG_FS_HPRT). * - * "The application uses this field to control power to this port, and the core + * "The application uses this field to control power to this port, and the core * clears this bit on an overcurrent condition." * * Input Parameters: diff --git a/drivers/usbhost/usbhost_enumerate.c b/drivers/usbhost/usbhost_enumerate.c index 96ff066aad..1857499ed2 100644 --- a/drivers/usbhost/usbhost_enumerate.c +++ b/drivers/usbhost/usbhost_enumerate.c @@ -145,7 +145,7 @@ static inline int usbhost_devdesc(FAR const struct usb_devdesc_s *devdesc, id->base, id->subclass, id->proto, id->vid, id->pid); return OK; } - + /******************************************************************************* * Name: usbhost_configdesc * @@ -193,7 +193,7 @@ static inline int usbhost_configdesc(const uint8_t *configdesc, int cfglen, * Typically these values are zero meaning that the "real" ID * information resides in the device descriptor. */ - + DEBUGASSERT(remaining >= sizeof(struct usb_ifdesc_s)); id->base = ifdesc->classid; id->subclass = ifdesc->subclass; @@ -204,7 +204,7 @@ static inline int usbhost_configdesc(const uint8_t *configdesc, int cfglen, } /* Increment the address of the next descriptor */ - + configdesc += ifdesc->len; remaining -= ifdesc->len; } @@ -510,7 +510,7 @@ int usbhost_enumerate(FAR struct usbhost_driver_s *drvr, uint8_t funcaddr, * It is not needed further here but it may be needed by the class driver * during its connection operations. */ - + DRVR_FREE(drvr, (uint8_t*)ctrlreq); ctrlreq = NULL; diff --git a/drivers/usbhost/usbhost_trace.c b/drivers/usbhost/usbhost_trace.c index 92dc2c5703..d6d1f4dd40 100644 --- a/drivers/usbhost/usbhost_trace.c +++ b/drivers/usbhost/usbhost_trace.c @@ -301,5 +301,3 @@ int usbhost_trdump(void) return usbhost_trenumerate(usbhost_trsyslog, NULL); } #endif /* CONFIG_USBHOST_TRACE */ - -