1. 04 5月, 2012 15 次提交
  2. 20 4月, 2012 1 次提交
  3. 19 4月, 2012 6 次提交
    • S
      USB: ehci-tegra: don't call set_irq_flags(IRQF_VALID) · 8034761c
      Stephen Warren 提交于
      This call is not needed; the IRQ controller should (and does) set up
      interrupts correctly. set_irq_flags() isn't exported to modules, to
      this also fixes compilation of ehci-tegra.c as a module.
      Signed-off-by: NStephen Warren <swarren@nvidia.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8034761c
    • T
      USB: yurex: Fix missing URB_NO_TRANSFER_DMA_MAP flag in urb · 532f17b5
      Tomoki Sekiyama 提交于
      Current probing code is setting URB_NO_TRANSFER_DMA_MAP flag into a wrong urb
      structure, and this causes BUG_ON with some USB host implementations.
      This patch fixes the issue.
      Signed-off-by: NTomoki Sekiyama <tomoki.sekiyama@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      532f17b5
    • T
      USB: yurex: Remove allocation of coherent buffer for setup-packet buffer · 523fc5c1
      Tomoki Sekiyama 提交于
      Removes allocation of coherent buffer for the control-request setup-packet
      buffer from the yurex driver. Using coherent buffers for setup-packet is
      obsolete and does not work with some USB host implementations.
      Signed-off-by: NTomoki Sekiyama <tomoki.sekiyama@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      523fc5c1
    • J
      drivers/usb/misc/usbtest.c: add kfrees · f4a728d0
      Julia Lawall 提交于
      Free the two previously allocated buffers before exiting the function in an
      error case.
      Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f4a728d0
    • A
      USB: ehci-fsl: Fix kernel crash on mpc5121e · f941f692
      Anatolij Gustschin 提交于
      Since commit 28c56ea1
      (powerpc/usb: fix bug of kernel hang when initializing usb)
      the kernel crashes on mpc5121e. mpc5121e doesn't have system interface
      registers, accessing this register address space cause the machine check
      exception and a kernel crash:
      ...
      [    1.294596] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
      [    1.316491] fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller
      [    1.337334] fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1
      [    1.358548] Machine check in kernel mode.
      [    1.375917] Caused by (from SRR1=49030): Transfer error ack signal
      [    1.395505] Oops: Machine check, sig: 7 [#1]
      [    1.413113] MPC5121 ADS
      [    1.428718] Modules linked in:
      [    1.444841] NIP: c026efc4 LR: c0278b50 CTR: 00000000
      [    1.463342] REGS: df837ba0 TRAP: 0200   Not tainted  (3.3.0-08839-gb5174fa3)
      [    1.484083] MSR: 00049030 <EE,ME,IR,DR>  CR: 42042022  XER: 20000000
      [    1.504099] TASK = df834000[1] 'swapper' THREAD: df836000
      [    1.509667] GPR00: 1c000000 df837c50 df834000 df9d74e0 00000003 00000010 00000000 00000000
      [    1.531650] GPR08: 00000020 00000000 c037cdd8 e1088000 22042028 1001a69c 00000000 00000000
      [    1.553762] GPR16: 1ffbce70 00000000 1fef5b28 1fef3e08 00000000 00000000 1ffcbc7c c045b264
      [    1.575824] GPR24: 0000008b 00000002 c04a7dd0 e1088000 df33c960 df9d74e0 00000000 df9d7400
      [    1.612295] NIP [c026efc4] ehci_fsl_setup_phy+0x110/0x124
      [    1.632454] LR [c0278b50] ehci_fsl_setup+0x29c/0x304
      [    1.652065] Call Trace:
      [    1.668923] [df837c50] [c0278a40] ehci_fsl_setup+0x18c/0x304 (unreliable)
      [    1.690332] [df837c70] [c025cba4] usb_add_hcd+0x1f0/0x66c
      [    1.710377] [df837cb0] [c0277ab8] ehci_fsl_drv_probe+0x180/0x308
      [    1.731322] [df837ce0] [c01fc7a8] platform_drv_probe+0x20/0x30
      [    1.752202] [df837cf0] [c01fb0ac] driver_probe_device+0x8c/0x214
      [    1.773491] [df837d10] [c01f956c] bus_for_each_drv+0x6c/0xa8
      [    1.794279] [df837d40] [c01fafdc] device_attach+0xb4/0xd8
      [    1.814574] [df837d60] [c01fa44c] bus_probe_device+0xa4/0xb4
      [    1.835343] [df837d80] [c01f87a8] device_add+0x52c/0x5dc
      [    1.855462] [df837dd0] [c01fcd58] platform_device_add+0x124/0x1d0
      [    1.876558] [df837df0] [c036dcec] fsl_usb2_device_register+0xa0/0xd4
      [    1.897512] [df837e10] [c036df28] fsl_usb2_mph_dr_of_probe+0x208/0x264
      [    1.918253] [df837e90] [c01fc7a8] platform_drv_probe+0x20/0x30
      [    1.938300] [df837ea0] [c01fb0ac] driver_probe_device+0x8c/0x214
      [    1.958511] [df837ec0] [c01fb2f0] __driver_attach+0xbc/0xc0
      [    1.978088] [df837ee0] [c01f9608] bus_for_each_dev+0x60/0x9c
      [    1.997589] [df837f10] [c01fab88] driver_attach+0x24/0x34
      [    2.016757] [df837f20] [c01fa744] bus_add_driver+0x1ac/0x274
      [    2.036339] [df837f50] [c01fb898] driver_register+0x88/0x150
      [    2.056052] [df837f70] [c01fcabc] platform_driver_register+0x68/0x78
      [    2.076650] [df837f80] [c0446500] fsl_usb2_mph_dr_driver_init+0x18/0x28
      [    2.097734] [df837f90] [c0003988] do_one_initcall+0x148/0x1b0
      [    2.117934] [df837fc0] [c042d89c] kernel_init+0xfc/0x190
      [    2.137667] [df837ff0] [c000d2c4] kernel_thread+0x4c/0x68
      [    2.157240] Instruction dump:
      [    2.174119] 90050004 4e800020 2f840003 419e0014 2f840004 409eff64 6400c000 4bffff5c
      [    2.196000] 64001000 7c0004ac 812b0500 0c090000 <4c00012c> 61290200 7c0004ac 912b0500
      [    2.218100] ---[ end trace 21659aedb84ad816 ]---
      [    2.237089]
      [    3.232940] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000007
      [    3.232954]
      [    3.271575] Rebooting in 1 seconds..
      
      Check pdata->have_sysif_regs flag before accessing system interface
      registers.
      Signed-off-by: NAnatolij Gustschin <agust@denx.de>
      Cc: Shengzhou Liu <Shengzhou.Liu@freescale.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f941f692
    • A
      EHCI: always clear the STS_FLR status bit · 2fbe2bf1
      Alan Stern 提交于
      This patch (as1544) fixes a problem affecting some EHCI controllers.
      They can generate interrupts whenever the STS_FLR status bit is turned
      on, even though that bit is masked out in the Interrupt Enable
      register.
      
      Since the driver doesn't use STS_FLR anyway, the patch changes the
      interrupt routine to clear that bit whenever it is set, rather than
      leaving it alone.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Reported-and-tested-by: NTomoya MORINAGA <tomoya.rohm@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2fbe2bf1
  4. 18 4月, 2012 5 次提交
    • A
      EHCI: fix criterion for resuming the root hub · dc75ce9d
      Alan Stern 提交于
      This patch (as1542) changes the criterion ehci-hcd uses to tell when
      it needs to resume the controller's root hub.  A resume is needed when
      a port status change is detected, obviously, but only if the root hub
      is currently suspended.
      
      Right now the driver tests whether the root hub is running, and that
      is not the correct test.  In particular, if the controller has died
      then the root hub should not be restarted.  In addition, some buggy
      hardware occasionally requires the root hub to be running and
      sending out SOF packets even while it is nominally supposed to be
      suspended.
      
      In the end, the test needs to be changed.  Rather than checking whether
      the root hub is currently running, the driver will now check whether
      the root hub is currently suspended.  This will yield the correct
      behavior in all cases.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: Peter Chen <B29397@freescale.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dc75ce9d
    • B
      USB: sierra: avoid QMI/wwan interface on MC77xx · 749541d1
      Bjørn Mork 提交于
      These devices have a number of non serial interfaces as well.  Use
      the existing "Direct IP" blacklist to prevent binding to interfaces
      which are handled by other drivers.
      
      We also extend the "Direct IP" blacklist with with interfaces only
      seen in "QMI" mode, assuming that these devices use the same
      interface numbers for serial interfaces both in "Direct IP" and in
      "QMI" mode.
      Signed-off-by: NBjørn Mork <bjorn@mork.no>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      749541d1
    • X
      usb: usbtest: avoid integer overflow in alloc_sglist() · 8bde9a62
      Xi Wang 提交于
      A large `nents' from userspace could overflow the allocation size,
      leading to memory corruption.
      
      | alloc_sglist()
      | usbtest_ioctl()
      
      Use kmalloc_array() to avoid the overflow.
      Signed-off-by: NXi Wang <xi.wang@gmail.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8bde9a62
    • X
      usb: usbtest: avoid integer overflow in test_ctrl_queue() · e65cdfae
      Xi Wang 提交于
      Avoid overflowing context.count = param->sglen * param->iterations,
      where both `sglen' and `iterations' are from userspace.
      
      | test_ctrl_queue()
      | usbtest_ioctl()
      
      Keep -EOPNOTSUPP for error code.
      Signed-off-by: NXi Wang <xi.wang@gmail.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e65cdfae
    • A
      USB: fix deadlock in bConfigurationValue attribute method · 8963c487
      Alan Stern 提交于
      This patch (as154) fixes a self-deadlock that occurs when userspace
      writes to the bConfigurationValue sysfs attribute for a hub with
      children.  The task tries to lock the bandwidth_mutex at a time when
      it already owns the lock:
      
      	The attribute's method calls usb_set_configuration(),
      	which calls usb_disable_device() with the bandwidth_mutex
      	held.
      
      	usb_disable_device() unregisters the existing interfaces,
      	which causes the hub driver to be unbound.
      
      	The hub_disconnect() routine calls hub_quiesce(), which
      	calls usb_disconnect() for each of the hub's children.
      
      	usb_disconnect() attempts to acquire the bandwidth_mutex
      	around a call to usb_disable_device().
      
      The solution is to make usb_disable_device() acquire the mutex for
      itself instead of requiring the caller to hold it.  Then the mutex can
      cover only the bandwidth deallocation operation and not the region
      where the interfaces are unregistered.
      
      This has the potential to change system behavior slightly when a
      config change races with another config or altsetting change.  Some of
      the bandwidth released from the old config might get claimed by the
      other config or altsetting, make it impossible to restore the old
      config in case of a failure.  But since we don't try to recover from
      config-change failures anyway, this doesn't matter.
      
      [This should be marked for stable kernels that contain the commit
      fccf4e86 "USB: Free bandwidth when
      usb_disable_device is called."
      That commit was marked for stable kernels as old as 2.6.32.]
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8963c487
  5. 17 4月, 2012 3 次提交
  6. 11 4月, 2012 10 次提交
    • A
      xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI · 95018a53
      Alex He 提交于
      Re-define XHCI_LEGACY_DISABLE_SMI and used it in right way. All SMI enable
      bits will be cleared to zero and flag bits 29:31 are also cleared to zero.
      Other bits should be presvered as Table 146.
      
      This patch should be backported to kernels as old as 2.6.31.
      Signed-off-by: NAlex He <alex.he@amd.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      95018a53
    • D
      xHCI: use gfp flags from caller instead of GFP_ATOMIC · 3fc8206d
      Dan Carpenter 提交于
      The caller is allowed to specify the GFP flags for these functions.
      We should prefer their flags unless we have good reason.  For
      example, if we take a spin_lock ourselves we'd need to use
      GFP_ATOMIC.  But in this case it's safe to use the callers GFP
      flags.
      
      The callers all pass GFP_ATOMIC here, so this change doesn't affect
      how the kernel behaves but we may add other callers later and this
      is a cleanup.
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      3fc8206d
    • E
      xHCI: add XHCI_RESET_ON_RESUME quirk for VIA xHCI host · 457a4f61
      Elric Fu 提交于
      The suspend operation of VIA xHCI host have some issues and
      hibernate operation works fine, so The XHCI_RESET_ON_RESUME
      quirk is added for it.
      
      This patch should base on "xHCI: Don't write zeroed pointer
      to xHC registers" that is released by Sarah. Otherwise, the
      host system error will ocurr in the hibernate operation
      process.
      
      This should be backported to stable kernels as old as 2.6.37,
      that contain the commit c877b3b2
      "xhci: Add reset on resume quirk for asrock p67 host".
      Signed-off-by: NElric Fu <elricfu1@gmail.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      457a4f61
    • E
      USB: fix bug of device descriptor got from superspeed device · d8aec3db
      Elric Fu 提交于
      When the Seagate Goflex USB3.0 device is attached to VIA xHCI
      host, sometimes the device will downgrade mode to high speed.
      By the USB analyzer, I found the device finished the link
      training process and worked at superspeed mode. But the device
      descriptor got from the device shows the device works at 2.1.
      It is very strange and seems like the device controller of
      Seagate Goflex has a little confusion.
      
      The first 8 bytes of device descriptor should be:
      12 01 00 03 00 00 00 09
      
      But the first 8 bytes of wrong device descriptor are:
      12 01 10 02 00 00 00 40
      
      The wrong device descriptor caused the initialization of mass
      storage failed. After a while, the device would be recognized
      as a high speed device and works fine.
      
      This patch will warm reset the device to fix the issue after
      finding the bcdUSB field of device descriptor isn't 0x0300
      but the speed mode of device is superspeed.
      
      This patch should be backported to kernels as old as 3.2, or ones that
      contain the commit 75d7cf72 "usbcore:
      refine warm reset logic".
      Signed-off-by: NElric Fu <elricfu1@gmail.com>
      Acked-by: NAndiry Xu <Andiry.Xu@amd.com>
      Acked-by: NSergei Shtylyov <sshtylyov@mvista.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      d8aec3db
    • S
      xhci: Fix register save/restore order. · c7713e73
      Sarah Sharp 提交于
      The xHCI 1.0 spec errata released on June 13, 2011, changes the ordering
      that the xHCI registers are saved and restored in.  It moves the
      interrupt pending (IMAN) and interrupt control (IMOD) registers to be
      saved and restored last.  I believe that's because the host controller
      may attempt to fetch the event ring table when interrupts are
      re-enabled.  Therefore we need to restore the event ring registers
      before we re-enable interrupts.
      
      This should be backported to kernels as old as 2.6.37, that contain the
      commit 5535b1d5 "USB: xHCI: PCI power
      management implementation"
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Tested-by: NElric Fu <elricfu1@gmail.com>
      Cc: Andiry Xu <andiry.xu@amd.com>
      Cc: stable@vger.kernel.org
      c7713e73
    • S
      xhci: Restore event ring dequeue pointer on resume. · fb3d85bc
      Sarah Sharp 提交于
      The xhci_save_registers() function saved the event ring dequeue pointer
      in the s3 register structure, but xhci_restore_registers() never
      restored it.  No other code in the xHCI successful resume path would
      ever restore it either.  Fix that.
      
      This should be backported to kernels as old as 2.6.37, that contain the
      commit 5535b1d5 "USB: xHCI: PCI power
      management implementation".
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Tested-by: NElric Fu <elricfu1@gmail.com>
      Cc: Andiry Xu <andiry.xu@amd.com>
      Cc: stable@vger.kernel.org
      fb3d85bc
    • S
      xhci: Don't write zeroed pointers to xHC registers. · 159e1fcc
      Sarah Sharp 提交于
      When xhci_mem_cleanup() is called, we can't be sure if the xHC is
      actually halted.  We can ask the xHC to halt by writing to the RUN bit
      in the command register, but that might timeout due to a HW hang.
      
      If the host controller is still running, we should not write zeroed
      values to the event ring dequeue pointers or base tables, the DCBAA
      pointers, or the command ring pointers.  Eric Fu reports his VIA VL800
      host accesses the event ring pointers after a failed register restore on
      resume from suspend.  The hypothesis is that the host never actually
      halted before the register write to change the event ring pointer to
      zero.
      
      Remove all writes of zeroed values to pointer registers in
      xhci_mem_cleanup().  Instead, make all callers of the function reset the
      host controller first, which will reset those registers to zero.
      xhci_mem_init() is the only caller that doesn't first halt and reset the
      host controller before calling xhci_mem_cleanup().
      
      This should be backported to kernels as old as 2.6.32.
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Tested-by: NElric Fu <elricfu1@gmail.com>
      Cc: stable@vger.kernel.org
      159e1fcc
    • S
      xhci: Warn when hosts don't halt. · 5af98bb0
      Sarah Sharp 提交于
      Eric Fu reports a problem with his VIA host controller fetching a zeroed
      event ring pointer on resume from suspend.  The host should have been
      halted, but we can't be sure because that code ignores the return value
      from xhci_halt().  Print a warning when the host controller refuses to
      halt within XHCI_MAX_HALT_USEC (currently 16 seconds).
      
      (Update: it turns out that the VIA host controller is reporting a halted
      state when it fetches the zeroed event ring pointer.  However, we still
      need this warning for other host controllers.)
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      5af98bb0
    • F
      xhci: don't re-enable IE constantly · 4e833c0b
      Felipe Balbi 提交于
      While we're at that, define IMAN bitfield to aid readability.
      
      The interrupt enable bit should be set once on driver init, and we
      shouldn't need to continually re-enable it.  Commit c21599a3 introduced
      a read of the irq_pending register, and that allows us to preserve the
      state of the IE bit.  Before that commit, we were blindly writing 0x3 to
      the register.
      
      This patch should be backported to kernels as old as 2.6.36, or ones
      that contain the commit c21599a3 "USB:
      xhci: Reduce reads and writes of interrupter registers".
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      4e833c0b
    • G
      usb: xhci: fix section mismatch in linux-next · a46c46a1
      Gerard Snitselaar 提交于
      xhci_unregister_pci() is called in xhci_hcd_init().
      Signed-off-by: NGerard Snitselaar <dev@snitselaar.org>
      Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
      a46c46a1