usb: dwc3: core: make sure evt->lpos is correctly initialized
authorPaul Zimmerman <Paul.Zimmerman@synopsys.com>
Fri, 27 Apr 2012 11:28:02 +0000 (14:28 +0300)
committerFelipe Balbi <balbi@ti.com>
Sun, 3 Jun 2012 20:08:24 +0000 (23:08 +0300)
The same event buffers will be reused when coming
out of hibernation, so we must reinitialize them
properly to avoid any mistakes.

While at that, also take dwc3_event_buffers_setup()
out of __devinit section.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/core.c

index 1040bdb8dc885656f74cfc566960a18d851bc9f8..49c060205c9abc7c78fd6e20bb437484eb809cb1 100644 (file)
@@ -255,7 +255,7 @@ static int __devinit dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
  *
  * Returns 0 on success otherwise negative errno.
  */
-static int __devinit dwc3_event_buffers_setup(struct dwc3 *dwc)
+static int dwc3_event_buffers_setup(struct dwc3 *dwc)
 {
        struct dwc3_event_buffer        *evt;
        int                             n;
@@ -266,6 +266,8 @@ static int __devinit dwc3_event_buffers_setup(struct dwc3 *dwc)
                                evt->buf, (unsigned long long) evt->dma,
                                evt->length);
 
+               evt->lpos = 0;
+
                dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(n),
                                lower_32_bits(evt->dma));
                dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(n),
@@ -285,6 +287,9 @@ static void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
 
        for (n = 0; n < dwc->num_event_buffers; n++) {
                evt = dwc->ev_buffs[n];
+
+               evt->lpos = 0;
+
                dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(n), 0);
                dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(n), 0);
                dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(n), 0);