1. 13 Apr, 2011 40 commits
    • Andiry Xu's avatar
      xHCI: Implement AMD PLL quirk · c41136b0
      Andiry Xu authored
      This patch disable the optional PM feature inside the Hudson3 platform under
      the following conditions:
      
      1. If an isochronous device is connected to xHCI port and is active;
      2. Optional PM feature that powers down the internal Bus PLL when the link is
         in low power state is enabled.
      
      The PM feature needs to be disabled to eliminate PLL startup delays when the
      link comes out of low power state. The performance of DMA data transfer could
      be impacted if system delay were encountered and in addition to the PLL start
      up delays. Disabling the PM would leave room for unpredictable system delays
      in order to guarantee uninterrupted data transfer to isochronous audio or
      video stream devices that require time sensitive information. If data in an
      audio/video stream was interrupted then erratic audio or video performance
      may be encountered.
      
      AMD PLL quirk is already implemented in OHCI/EHCI driver. After moving the
      quirk code to pci-quirks.c and export them, xHCI driver can call it directly
      without having the quirk implementation in itself.
      Signed-off-by: default avatarAndiry Xu <andiry.xu@amd.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      c41136b0
    • Sarah Sharp's avatar
      xhci: Tell USB core both roothubs lost power. · fedd383e
      Sarah Sharp authored
      On a resume, when the power is lost during hibernate, the USB core will
      call hub_reset_resume for the xHCI USB 2.0 roothub, but not for the USB
      3.0 roothub:
      
      [  164.748310] usb usb1: root hub lost power or was reset
      [  164.748353] usb usb2: root hub lost power or was reset
      [  164.748487] usb usb3: root hub lost power or was reset
      [  164.748488] xhci_hcd 0000:01:00.0: Stop HCD
      ...
      [  164.870039] hub 4-0:1.0: hub_resume
      ...
      [  164.870054] hub 3-0:1.0: hub_reset_resume
      
      This causes issues later, because the USB core assumes the USB 3.0 hub
      attached to the USB 3.0 roothub is still active.  It attempts to queue a
      control URB for the external hub, which fails because all the device
      slot contexts were released when the USB 3.0 roothub lost power:
      
      [  164.980044] hub 4-1:1.0: hub_resume
      [  164.980047] xhci_hcd 0000:01:00.0: Get port status returned 0x10101
      [  164.980049] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980053] hub 3-0:1.0: port 1: status 0101 change 0001
      [  164.980056] hub 4-1:1.0: hub_port_status failed (err = -22)
      [  164.980060] xhci_hcd 0000:01:00.0: `MEM_WRITE_DWORD(3'b000, 32'hffffc90008948440, 32'h202e1, 4'hf);
      [  164.980062] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980066] xhci_hcd 0000:01:00.0: clear port connect change, actual port 0 status  = 0x2e1
      [  164.980069] hub 4-1:1.0: hub_port_status failed (err = -22)
      [  164.980072] xhci_hcd 0000:01:00.0: get port status, actual port 1 status  = 0x2a0
      [  164.980074] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980077] xhci_hcd 0000:01:00.0: Get port status returned 0x100
      [  164.980079] hub 4-1:1.0: hub_port_status failed (err = -22)
      [  164.980082] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980085] hub 4-1:1.0: hub_port_status failed (err = -22)
      [  164.980088] hub 4-1:1.0: port 4: status 0000 change 0000
      [  164.980091] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980094] hub 4-1:1.0: activate --> -22
      [  164.980113] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980117] hub 4-1:1.0: hub_port_status failed (err = -22)
      [  164.980119] xHCI xhci_urb_enqueue called with unaddressed device
      [  164.980123] hub 4-1:1.0: can't resume port 4, status -22
      [  164.980126] hub 4-1:1.0: port 4 status ffff.ffff after resume, -22
      [  164.980129] usb 4-1.4: can't resume, status -22
      [  164.980131] hub 4-1:1.0: logical disconnect on port 4
      
      This causes issues when a USB 3.0 hard drive is attached to the external
      USB 3.0 hub when the system is hibernated:
      
      [ 6249.849653] sd 8:0:0:0: [sdb] Unhandled error code
      [ 6249.849659] sd 8:0:0:0: [sdb]  Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
      [ 6249.849663] sd 8:0:0:0: [sdb] CDB: Read(10): 28 00 00 00 2a 08 00 00 02 00
      [ 6249.849671] end_request: I/O error, dev sdb, sector 10760
      
      Make sure to inform the USB core that *both* xHCI roothubs lost power.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      fedd383e
    • Andiry Xu's avatar
      usbcore: Bug fix: system can't suspend with USB3.0 device connected to USB3.0 hub · a8f08d86
      Andiry Xu authored
      This patch clear PORT_POWER when suspend a USB3.0 device behind a USB3.0
      external hub, so the system can suspend and resume.
      
      Note USB3.0 device may not work after system resume and this is a temporary
      workaround. The correct fix will be in future patches.
      Signed-off-by: default avatarAndiry Xu <andiry.xu@amd.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      a8f08d86
    • Matthew Wilcox's avatar
      USB: Fix unplug of device with active streams · b214f191
      Matthew Wilcox authored
      If I unplug a device while the UAS driver is loaded, I get an oops
      in usb_free_streams().  This is because usb_unbind_interface() calls
      usb_disable_interface() which calls usb_disable_endpoint() which sets
      ep_out and ep_in to NULL.  Then the UAS driver calls usb_pipe_endpoint()
      which returns a NULL pointer and passes an array of NULL pointers to
      usb_free_streams().
      
      I think the correct fix for this is to check for the NULL pointer
      in usb_free_streams() rather than making the driver check for this
      situation.  My original patch for this checked for dev->state ==
      USB_STATE_NOTATTACHED, but the call to usb_disable_interface() is
      conditional, so not all drivers would want this check.
      
      Note from Sarah Sharp: This patch does avoid a potential dereference,
      but the real fix (which will be implemented later) is to set the
      .soft_unbind flag in the usb_driver structure for the UAS driver, and
      all drivers that allocate streams.  The driver should free any streams
      when it is unbound from the interface.  This avoids leaking stream rings
      in the xHCI driver when usb_disable_interface() is called.
      
      This should be queued for stable trees back to 2.6.35.
      Signed-off-by: default avatarMatthew Wilcox <willy@linux.intel.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@kernel.org
      b214f191
    • Dmitry Torokhov's avatar
      USB: xhci - also free streams when resetting devices · 2dea75d9
      Dmitry Torokhov authored
      Currently, when resetting a device, xHCI driver disables all but one
      endpoints and frees their rings, but leaves alone any streams that
      might have been allocated. Later, when users try to free allocated
      streams, we oops in xhci_setup_no_streams_ep_input_ctx() because
      ep->ring is NULL.
      
      Let's free not only rings but also stream data as well, so that
      calling free_streams() on a device that was reset will be safe.
      
      This should be queued for stable trees back to 2.6.35.
      Reviewed-by: default avatarMicah Elizabeth Scott <micah@vmware.com>
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@kernel.org
      2dea75d9
    • Sarah Sharp's avatar
      xhci: Fix NULL pointer deref in handle_port_status() · 386139d7
      Sarah Sharp authored
      When we get a port status change event, we need to figure out what type of
      port it came from: a USB 3.0 port, or a USB 2.0/1.1 port.  We can't know
      which usb_hcd to use until that point, so hcd will be NULL for part of the
      function.  Unfortunately, if any of the sanity checks fail, we'll jump to
      the cleanup label before hcd is set to a valid pointer, and then we'll
      attempt to tell the USB core to kick the hcd, which is NULL.
      
      Skip kicking the roothub if the sanity checks fail.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      386139d7
    • Dmitry Torokhov's avatar
      USB: xhci - fix math in xhci_get_endpoint_interval() · dfa49c4a
      Dmitry Torokhov authored
      When parsing exponent-expressed intervals we subtract 1 from the
      value and then expect it to match with original + 1, which is
      highly unlikely, and we end with frequent spew:
      
      	usb 3-4: ep 0x83 - rounding interval to 512 microframes
      
      Also, parsing interval for fullspeed isochronous endpoints was
      incorrect - according to USB spec they use exponent-based
      intervals (but xHCI spec claims frame-based intervals). I trust
      USB spec more, especially since USB core agrees with it.
      
      This should be queued for stable kernels back to 2.6.31.
      Reviewed-by: default avatarMicah Elizabeth Scott <micah@vmware.com>
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@kernel.org
      dfa49c4a
    • Dmitry Torokhov's avatar
      USB: xhci: simplify logic of skipping missed isoc TDs · 926008c9
      Dmitry Torokhov authored
      The logic of the handling Missed Service Error Events was pretty
      confusing as we were checking the same condition several times.
      In addition, it caused compiler warning since the compiler could
      not figure out that event_trb is actually unused in case we are
      skipping current TD.
      
      Fix that by rearranging "skip" condition checks, and factor out
      skip_isoc_td() so that it is called explicitly.
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      926008c9
    • Dmitry Torokhov's avatar
      USB: xhci - remove excessive 'inline' markings · 575688e1
      Dmitry Torokhov authored
      Remove 'inline' markings from file-local functions and let compiler
      do its job and inline what makes sense for given architecture.
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      575688e1
    • Dan Carpenter's avatar
      USB: xhci: unsigned char never equals -1 · 22e04870
      Dan Carpenter authored
      There were some places that compared port_speed == -1 where port_speed
      is a u8.  This doesn't work unless we cast the -1 to u8.  Some places
      did it correctly.
      
      Instead of using -1 directly, I've created a DUPLICATE_ENTRY define
      which does the cast and is more descriptive as well.
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      22e04870
    • Dmitry Torokhov's avatar
      USB: xhci - fix unsafe macro definitions · 5a6c2f3f
      Dmitry Torokhov authored
      Macro arguments used in expressions need to be enclosed in parenthesis
      to avoid unpleasant surprises.
      
      This should be queued for kernels back to 2.6.31
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@kernel.org
      5a6c2f3f
    • Dmitry Torokhov's avatar
      USB: fix formatting of SuperSpeed endpoints in /proc/bus/usb/devices · 2868a2b1
      Dmitry Torokhov authored
      Isochronous and interrupt SuperSpeed endpoints use the same mechanisms
      for decoding bInterval values as HighSpeed ones so adjust the code
      accordingly.
      
      Also bandwidth reservation for SuperSpeed matches highspeed, not
      low/full speed.
      Signed-off-by: default avatarDmitry Torokhov <dtor@vmware.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2868a2b1
    • Richard Retanubun's avatar
      USB: isp1760-hcd: move imask clear after pending work is done · 58085446
      Richard Retanubun authored
      This patch moves the HcInterrupt register write to clear the
      pending interrupt to after the isr work is done, doing this removes
      glitches in the irq line.
      Signed-off-by: default avatarRichard Retanubun <richardretanubun@ruggedcom.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      58085446
    • Valentin Longchamp's avatar
      USB: fsl_qe_udc: send ZLP when zero flag and length % maxpacket == 0 · d834508e
      Valentin Longchamp authored
      The driver did not take the zero flag in the USB request. If the
      request length is the same as the endpoint's maxpacket, an additional
      ZLP with no data has to be transmitted.
      
      The method used here is inspired to what is done in fsl_udc_core.c
      (and pxa27x_udc.c and at91_udc.c) where this is supported.
      
      There already was a discussion about this topic with people from
      Keymile, and I propose here a better implementation:
      
      http://thread.gmane.org/gmane.linux.usb.general/38951Signed-off-by: default avatarValentin Longchamp <valentin.longchamp@keymile.com>
      Acked-by: default avatarLi Yang <leoli@freescale.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      d834508e
    • Steven Hardy's avatar
      usb: qcserial add missing errorpath kfrees · cb62d65f
      Steven Hardy authored
      There are two -ENODEV error paths in qcprobe where the allocated private
      data is not freed, this patch adds the two missing kfrees to avoid
      leaking memory on the error path
      Signed-off-by: default avatarSteven Hardy <shardy@redhat.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      cb62d65f
    • Steven Hardy's avatar
      usb: qcserial avoid pointing to freed memory · 99ab3f9e
      Steven Hardy authored
      Rework the qcprobe logic such that serial->private is not set when
      qcprobe exits with -ENODEV, otherwise serial->private will point to freed
      memory on -ENODEV
      Signed-off-by: default avatarSteven Hardy <shardy@redhat.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      99ab3f9e
    • Steven Hardy's avatar
      usb: Fix qcserial memory leak on rmmod · 10c9ab15
      Steven Hardy authored
      qcprobe function allocates serial->private but this is never freed, this
      patch adds a new function qc_release() which frees serial->private, after
      calling usb_wwan_release
      Signed-off-by: default avatarSteven Hardy <shardy@redhat.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      10c9ab15
    • Paul Friedrich's avatar
      USB: ftdi_sio: add ids for Hameg HO720 and HO730 · c53c2fab
      Paul Friedrich authored
      usb serial: ftdi_sio: add two missing USB ID's for Hameg interfaces HO720
      and HO730
      
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      c53c2fab
    • Marius B. Kotsbak's avatar
      USB: option: Added support for Samsung GT-B3730/GT-B3710 LTE USB modem. · 80f9df3e
      Marius B. Kotsbak authored
      Bind only modem AT command endpoint to option.
      Signed-off-by: default avatarMarius B. Kotsbak <marius@kotsbak.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      80f9df3e
    • Dan Carpenter's avatar
      usb: pch_udc: unlock on allocation failure · 48570711
      Dan Carpenter authored
      There was an unlock missing on the error path.
      
      Also I did a small cleanup by changing ep->dev->lock for just dev->lock.
      They're the same lock, but dev->lock is shorter and that's how it is
      used for the spin_unlock_irqrestore() call.
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      48570711
    • Joerg Roedel's avatar
      USB host: Fix lockdep warning in AMD PLL quirk · 9ab7927b
      Joerg Roedel authored
      Booting latest kernel on my test machine produces a lockdep
      warning from the usb_amd_find_chipset_info() function:
      
       WARNING: at /data/lemmy/linux.trees.git/kernel/lockdep.c:2465 lockdep_trace_alloc+0x95/0xc2()
       Hardware name: Snook
       Modules linked in:
       Pid: 959, comm: work_for_cpu Not tainted 2.6.39-rc2+ #22
       Call Trace:
        [<ffffffff8103c0d4>] warn_slowpath_common+0x80/0x98
        [<ffffffff812387e6>] ? T.492+0x24/0x26
        [<ffffffff8103c101>] warn_slowpath_null+0x15/0x17
        [<ffffffff81068667>] lockdep_trace_alloc+0x95/0xc2
        [<ffffffff810ed9ac>] slab_pre_alloc_hook+0x18/0x3b
        [<ffffffff810ef227>] kmem_cache_alloc_trace+0x25/0xba
        [<ffffffff812387e6>] T.492+0x24/0x26
        [<ffffffff81238816>] pci_get_subsys+0x2e/0x73
        [<ffffffff8123886c>] pci_get_device+0x11/0x13
        [<ffffffff814082a9>] usb_amd_find_chipset_info+0x3f/0x18a
      ...
      
      It turns out that this function calls pci_get_device under a spin_lock
      with irqs disabled, but the pci_get_device function is only allowed in
      preemptible context.
      
      This patch fixes the warning by making all data-structure
      modifications on temporal storage and commiting this back
      into the visible structure at the end. While at it, this
      patch also moves the pci_dev_put calls out of the spinlocks
      because this function might sleep too.
      Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      9ab7927b
    • Sebastian Andrzej Siewior's avatar
      usb/gadget: don't leak hs_descriptors · 16a2f970
      Sebastian Andrzej Siewior authored
      We should free both descriptors.
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      16a2f970
    • Yoichi Yuasa's avatar
      USB: ohci-au1xxx: fix warning "__BIG_ENDIAN" is not defined · 0fdf65c3
      Yoichi Yuasa authored
      In file included from drivers/usb/host/ohci-hcd.c:1028:0:
      drivers/usb/host/ohci-au1xxx.c:36:7: warning: "__BIG_ENDIAN" is not defined
      Signed-off-by: default avatarYoichi Yuasa <yuasa@linux-mips.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0fdf65c3
    • Johan Hovold's avatar
      USB: ftdi_sio: add PID for OCT DK201 docking station · 11a31d84
      Johan Hovold authored
      Add PID 0x0103 for serial port of the OCT DK201 docking station.
      Reported-by: default avatarJan Hoogenraad <jan@hoogenraad.net>
      Signed-off-by: default avatarJohan Hovold <jhovold@gmail.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      11a31d84
    • Johan Hovold's avatar
      usb: musb: omap2430: fix build failure · 36a52c00
      Johan Hovold authored
      Fix build failure introduced by commit
      7acc6197 (usb: musb: Idle path retention
      and offmode support for OMAP3) when building without gadget
      support.
      
        CC      drivers/usb/musb/omap2430.o
      drivers/usb/musb/omap2430.c: In function ‘musb_otg_notifications’:
      drivers/usb/musb/omap2430.c:262: error: ‘struct musb’ has no member named ‘gadget_driver’
      Signed-off-by: default avatarJohan Hovold <jhovold@gmail.com>
      Cc: Felipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      36a52c00
    • Alan Stern's avatar
      USB: EHCI: unlink unused QHs when the controller is stopped · 94ae4976
      Alan Stern authored
      This patch (as1458) fixes a problem affecting ultra-reliable systems:
      When hardware failover of an EHCI controller occurs, the data
      structures do not get released correctly.  This is because the routine
      responsible for removing unused QHs from the async schedule assumes
      the controller is running properly (the frame counter is used in
      determining how long the QH has been idle) -- but when a failover
      causes the controller to be electronically disconnected from the PCI
      bus, obviously it stops running.
      
      The solution is simple: Allow scan_async() to remove a QH from the
      async schedule if it has been idle for long enough _or_ if the
      controller is stopped.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Reported-and-Tested-by: default avatarDan Duval <dan.duval@stratus.com>
      CC: <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      94ae4976
    • Yauheni Kaliuta's avatar
      usb: gadget: eem: fix echo command processing · 505d1f69
      Yauheni Kaliuta authored
      During processing of bunch of eem frames if "echo" command is found
      skb is cloned and the cloned version should be used to send reply.
      Unfortunately, the data of the original skb were actually used and
      the cloned skb is never freed.
      
      Using the cloned skb and freeing the skb in the completion callback
      for usb request.
      Signed-off-by: default avatarYauheni Kaliuta <yauheni.kaliuta@nokia.com>
      Reviewed-by: default avatarFelipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      505d1f69
    • Christian Simon's avatar
      USB: ftdi_sio: Added IDs for CTI USB Serial Devices · 5a9443f0
      Christian Simon authored
      I added new ProdutIds for two devices from CTI GmbH Leipzig.
      Signed-off-by: default avatarChristian Simon <simon@swine.de>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      5a9443f0
    • Yoshihiro Shimoda's avatar
      usb: r8a66597-udc: fix spinlock usage · 2c2da179
      Yoshihiro Shimoda authored
      Because the disconnect function in the composite driver will call spin_lock,
      this driver has to call spin_unlock before calling driver->disconnet().
      Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      2c2da179
    • Michal Simek's avatar
      usb: Fix Kconfig unmet dependencies for Microblaze EHCI · 0291303d
      Michal Simek authored
      Disable USB_ARCH_HAS_EHCI in arch Kconfig and enable it in usb Kconfig
      
      Warning log:
      warning: (MICROBLAZE) selects USB_ARCH_HAS_EHCI which has unmet
      direct dependencies (USB_SUPPORT)
      Signed-off-by: default avatarMichal Simek <monstr@monstr.eu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0291303d
    • Alexey Khoroshilov's avatar
      USB: usb-gadget: unlock data->lock mutex on error path in ep_read() · 00cc7a5f
      Alexey Khoroshilov authored
      ep_read() acquires data->lock mutex in get_ready_ep() and releases it on
      all paths except for one: when usb_endpoint_xfer_isoc() failed. The
      patch adds mutex_unlock(&data->lock) at that path.
      
      Found by Linux Driver Verification project (linuxtesting.org).
      Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      00cc7a5f
    • Randy Dunlap's avatar
      usb: fix ips1760-hcd printk format warning · d06847fe
      Randy Dunlap authored
      Fix printk format build warning and grammar typo on same line.
      
      drivers/usb/host/isp1760-hcd.c:300: warning: format '%lu' expects type 'long unsigned int', but argument 4 has type 'size_t'
      Signed-off-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      d06847fe
    • Greg Kroah-Hartman's avatar
      Merge branch 'for-greg' of git://gitorious.org/usb/usb into usb-linus · 86a45a02
      Greg Kroah-Hartman authored
      * 'for-greg' of git://gitorious.org/usb/usb:
        USB: musb: blackfin: work around anomaly 05000450
        usb: musb: Fix the crash issue during reboot
        usb: musb: gadget: check the correct list_head
        usb: musb: temporarily make it bool
        USB: musb: dereferencing an iomem pointer
        USB: musb: silence printk format warning
        USB: musb: using 0 instead of NULL
        USB: musb: add missing unlock in cppi_interrupt()
        usb: musb: ux500: copy dma mask from platform device to musb device
        usb: musb: clear AUTOSET while clearing DMAENAB
      86a45a02
    • Mike Frysinger's avatar
      USB: musb: blackfin: work around anomaly 05000450 · 13254307
      Mike Frysinger authored
      DMA mode 1 data corruption anomaly on Blackfin systems.  This issue is
      specific to the Blackfin silicon as the bug appears to be related to the
      connection of the musb ip to the bus/dma fabric.
      
      Data corruption when using USB DMA mode 1. (Issue manager 17-01-0105)
      DMA mode 1 allows large size transfers to generate a single interrupt
      at the end of the entire transfer.  The transfer is split up in packets
      of length specified in the Maximum Packet Size field for that endpoint.
      If the transfer size is not an integer multiple of the Maximum Packet
      Size, a short packet will be present at the end of the transfer.
      
      Under certain conditions this packet may be corrupted in the USB FIFO.
      
      Workaround:
      Use DMA mode 1 to transfer (n* Maximum Packet Size) and schedule DMA
      mode 0 to transfer the short packet.
      
      As an example if your transfer size is 33168 bytes and Maximum Packet
      Size equals 512, schedule [33168 - (33168 mod 512)] in DMA mode 1 and
      the remainder (33168 mod 512) in DMA mode 0.
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      13254307
    • Hema HK's avatar
      usb: musb: Fix the crash issue during reboot · 4f9edd2d
      Hema HK authored
      Below crash observed with commit 7acc6197
      (usb: musb: Idle path retention and offmode support for OMAP3)
      during board reboot.
      
      The musb clock was disabled when musb_shutdown() was called by
      platform_drv_shutdown in which there are register accesses.
      call pm_runtime_get_sync() and pm_runtime_put_sync() in the
      musb_shutdown function.
      
      / # [  172.368774] Unhandled fault: imprecise external abort (0x1406) at 0x400f0000
      [  172.376190] Internal error: : 1406 [#1] SMP
      [  172.380554] last sysfs file: /sys/devices/platform/omap/omap_i2c.4/i2c-4/i2c-dev/i2c-4/dev
      [  172.389221] Modules linked in:
      [  172.392456] CPU: 0    Tainted: G        W    (2.6.38-06671-geddecbb6 #33)
      [  172.399475] PC is at do_raw_spin_unlock+0x50/0xc0
      [  172.404418] LR is at _raw_spin_unlock_irqrestore+0x24/0x44
      [  172.410186] pc : [<c069bfdc>]    lr : [<c085a7f8>]    psr: 60000093
      [  172.410186] sp : ee993e40  ip : c0d00240  fp : bea9cf14
      [  172.422241] r10: 00000000  r9 : ee992000  r8 : c04b2fa8
      [  172.427703] r7 : 00000000  r6 : c0fa46c0  r5 : ef966124  r4 : ef966124
      [  172.434539] r3 : ef92cbc0  r2 : ef92cbc0  r1 : 00000000  r0 : ef966124
      [  172.441406] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
      [  172.448974] Control: 10c5387d  Table: ae8d804a  DAC: 00000015
      [  172.454986] Process init (pid: 1094, stack limit = 0xee9922f8)
      [  172.461120] Stack: (0xee993e40 to 0xee994000)
      [  172.465667] 3e40: a0000013 c085a7f8 ef966124 a0000013 c0fa46c0 c0761ab4 c0761a70 ef95c008
      [  172.474273] 3e60: ef95c014 c06e2fd0 c06e2fbc c06dea90 00000000 01234567 28121969 c04fccb4
      [  172.482849] 3e80: 00000000 c04fcd04 c0a302bc c04fce44 c0a02600 00000001 00000000 c085cd04
      [  172.491424] 3ea0: 00000000 00000002 c09ea000 c085afc0 ee993f24 00000000 00040001 00000445
      [  172.499999] 3ec0: a8eb9d34 00000027 00000000 00000000 00000000 c0a56a4c 00000000 00000000
      [  172.508575] 3ee0: 00000002 60000093 00000000 c0519aac 00000002 00000080 00000000 c0550420
      [  172.517150] 3f00: 00000000 00000002 ee970000 c0a56a3c c0a56a20 00000002 c0a56a3c 00000000
      [  172.525726] 3f20: c0a56a3c 0000000a c1580e00 c0a56a20 00000002 c0a56a3c c1580e00 c0a56a20
      [  172.534301] 3f40: ef92cbc0 c05173a0 00000001 ef92cbc0 c0576190 c04e3174 20000013 c0517324
      [  172.542877] 3f60: ef815c00 ee90b720 c04e3174 c0576190 00000001 ef92cbc0 c04b2f00 ffffffff
      [  172.551483] 3f80: 00000058 c0517324 00000000 00000000 ffffffff 00000000 00000000 ffffffff
      [  172.560058] 3fa0: 00000058 c04b2de0 00000000 00000000 fee1dead 28121969 01234567 00000000
      [  172.568634] 3fc0: 00000000 00000000 ffffffff 00000058 00000000 00000001 400aa000 bea9cf14
      [  172.577209] 3fe0: 000ea148 bea9c958 000aa750 40225728 60000010 fee1dead 00000000 00000000
      [  172.585784] [<c069bfdc>] (do_raw_spin_unlock+0x50/0xc0) from [<c085a7f8>] (_raw_spin_unlock_irqrestore+0x24/0x44)
      [  172.596588] [<c085a7f8>] (_raw_spin_unlock_irqrestore+0x24/0x44) from [<c0761ab4>] (musb_shutdown+0x44/0x88)
      [  172.606933] [<c0761ab4>] (musb_shutdown+0x44/0x88) from [<c06e2fd0>] (platform_drv_shutdown+0x14/0x18)
      [  172.616699] [<c06e2fd0>] (platform_drv_shutdown+0x14/0x18) from [<c06dea90>] (device_shutdown+0x74/0xb4)
      [  172.626647] [<c06dea90>] (device_shutdown+0x74/0xb4) from [<c04fccb4>] (kernel_restart_prepare+0x24/0x38)
      [  172.636688] [<c04fccb4>] (kernel_restart_prepare+0x24/0x38) from [<c04fcd04>] (kernel_restart+0xc/0x48)
      [  172.646545] [<c04fcd04>] (kernel_restart+0xc/0x48) from [<c04fce44>] (sys_reboot+0xfc/0x1d8)
      [  172.655426] [<c04fce44>] (sys_reboot+0xfc/0x1d8) from [<c04b2de0>] (ret_fast_syscall+0x0/0x3c)
      [  172.664459] Code: e3c3303f e594200c e593300c e1520003 (0a000002)
      [  172.670867] ------------[ cut here ]------------
      Signed-off-by: default avatarHema HK <hemahk@ti.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4f9edd2d
    • Felipe Balbi's avatar
      usb: musb: gadget: check the correct list_head · 3d5ad13e
      Felipe Balbi authored
      We are now using our own list_head, so we should
      be checking against that, not the gadget driver's
      list_head.
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      3d5ad13e
    • Felipe Balbi's avatar
      usb: musb: temporarily make it bool · 7a180e70
      Felipe Balbi authored
      Due to the recent changes to musb's glue layers,
      we can't compile musb-hdrc as a module - compilation
      will break due to undefined symbol musb_debug. In
      order to fix that, we need a big re-work of the
      debug support on the MUSB driver.
      
      Because that would mean a lot of new code coming
      into the -rc series, it's best to defer that to
      next merge window and for now just disable module
      support for MUSB.
      
      Once we get the refactor of the debugging support
      done, we can simply revert this patch and things
      will go back to normal again.
      
      Cc: stable@kernel.org # v2.6.38
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      7a180e70
    • Dan Carpenter's avatar
      USB: musb: dereferencing an iomem pointer · 2e10f5e7
      Dan Carpenter authored
      "tx_ram" points to io memory.  We can't dereference it directly.  Sparse
      complains about this: "drivers/usb/musb/cppi_dma.c:1205:25: warning:
      dereference of noderef expression"
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2e10f5e7
    • Dan Carpenter's avatar
      USB: musb: silence printk format warning · 2fbcf3fa
      Dan Carpenter authored
      Gcc gives the following warnings:
      
      drivers/usb/musb/cppi_dma.c: In function ‘cppi_next_tx_segment’:
      drivers/usb/musb/cppi_dma.c:600: warning: format ‘%x’ expects type ‘unsigned int’, but argument 8 has type ‘dma_addr_t’
      drivers/usb/musb/cppi_dma.c: In function ‘cppi_next_rx_segment’:
      drivers/usb/musb/cppi_dma.c:822: warning: format ‘%x’ expects type ‘unsigned int’, but argument 9 has type ‘dma_addr_t’
      drivers/usb/musb/cppi_dma.c: In function ‘cppi_rx_scan’:
      drivers/usb/musb/cppi_dma.c:1042: warning: format ‘%08x’ expects type ‘unsigned int’, but argument 4 has type ‘dma_addr_t’
      drivers/usb/musb/cppi_dma.c:1114: warning: format ‘%08x’ expects type ‘unsigned int’, but argument 7 has type ‘dma_addr_t’
      
      dma_addr_t is sometimes 32 bit and sometimes 64.  We normally cast them
      to unsigned long long for printk().
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2fbcf3fa
    • Dan Carpenter's avatar
      USB: musb: using 0 instead of NULL · aca7f353
      Dan Carpenter authored
      Sparse complains (and rightly so):
      drivers/usb/musb/cppi_dma.c:1458:33:
      	warning: Using plain integer as NULL pointer
      Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      aca7f353