1. 23 10月, 2014 1 次提交
    • F
      usb: dwc3: ep0: fix Data Phase for transfer sizes aligned to wMaxPacketSize · 36f84ffb
      Felipe Balbi 提交于
      According to Section 8.5.3.2 of the USB 2.0 specification,
      a USB device must terminate a Data Phase with either a
      short packet or a ZLP (if the previous transfer was
      a multiple of wMaxPacketSize).
      
      For reference, here's what the USB 2.0 specification, section
      8.5.3.2 says:
      
      "
      8.5.3.2 Variable-length Data Stage
      
      A control pipe may have a variable-length data phase
      in which the host requests more data than is contained
      in the specified data structure. When all of the data
      structure is returned to the host, the function should
      indicate that the Data stage is ended by returning a
      packet that is shorter than the MaxPacketSize for the
      pipe. If the data structure is an exact multiple of
      wMaxPacketSize for the pipe, the function will return
      a zero-length packet to indicate the end of the Data
      stage.
      "
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      36f84ffb
  2. 21 10月, 2014 17 次提交
    • F
      usb: dwc3: ep0: return early on NULL requests · 6856d30c
      Felipe Balbi 提交于
      if our list of requests is empty, return early.
      
      There's really nothing to be done in case our
      request list is empty anyway because the only
      situation where we our list is empty, is when
      we're transferring ZLPs.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      6856d30c
    • A
      usb: dwc3: pci: Add PCI ID for Intel Braswell · 7d643664
      Alan Cox 提交于
      The device controller is the same but it has different PCI ID. Add this new
      ID to the driver's list of supported IDs.
      Signed-off-by: NAlan Cox <alan@linux.intel.com>
      Signed-off-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7d643664
    • F
      usb: gadget: function: f_obex: fix Interface Descriptor Test · 3985f3ab
      Felipe Balbi 提交于
      On USB20CV's Interface Descriptor Test, a series
      of SetInterface/GetInterface requests are issued
      and gadget driver is required to always return
      correct alternate setting.
      
      In one step of the test, g_serial with f_obex
      was returning the wrong value (1 instead of 0).
      
      In order to fix this, we will now hold currently
      selected alternate setting inside our struct f_obex
      and just return that from our ->get_alt()
      implementation.
      
      Note that his also simplifies the code a bit.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      3985f3ab
    • F
      usb: gadget: function: uac2: add a release method · de1e6e79
      Felipe Balbi 提交于
      devices are required to provide a release method. This
      patch fixes the following WARN():
      
      [   42.611159] ------------[ cut here ]------------
      [   42.616025] WARNING: CPU: 0 PID: 1453 at drivers/base/core.c:250 device_release+0x94/0xa0()
      [   42.624820] Device 'snd_uac2.0' does not have a release() function, it is broken and must be fixed.
      [   42.634328] Modules linked in: usb_f_uac2 g_audio(-) libcomposite configfs xhci_hcd snd_soc_davinci_mcasp snd_soc_edma snd_soc_tlv320aic3x snd_soc_omap snd_soc_evm snd_soc_core dwc3 snd_compress omapdrm snd_pcm_dmaengine snd_pcm snd_timer snd fb_sys_fops lis3lv02d_i2c matrix_keypad dwc3_omap lis3lv02d panel_dpi input_polldev soundcore
      [   42.665687] CPU: 0 PID: 1453 Comm: modprobe Tainted: G      D        3.17.0-rc6-00448-g9f3d0ec-dirty #188
      [   42.675756] [<c0017338>] (unwind_backtrace) from [<c0012fdc>] (show_stack+0x20/0x24)
      [   42.683911] [<c0012fdc>] (show_stack) from [<c0647fbc>] (dump_stack+0x8c/0xa4)
      [   42.691526] [<c0647fbc>] (dump_stack) from [<c0049950>] (warn_slowpath_common+0x7c/0xa0)
      [   42.700004] [<c0049950>] (warn_slowpath_common) from [<c00499b4>] (warn_slowpath_fmt+0x40/0x48)
      [   42.709194] [<c00499b4>] (warn_slowpath_fmt) from [<c0405f7c>] (device_release+0x94/0xa0)
      [   42.717794] [<c0405f7c>] (device_release) from [<c032e8e8>] (kobject_cleanup+0x4c/0x7c)
      [   42.726189] [<c032e8e8>] (kobject_cleanup) from [<c032e7c8>] (kobject_put+0x60/0x90)
      [   42.734316] [<c032e7c8>] (kobject_put) from [<c0406320>] (put_device+0x24/0x28)
      [   42.741995] [<c0406320>] (put_device) from [<c040c008>] (platform_device_unregister+0x2c/0x30)
      [   42.751061] [<c040c008>] (platform_device_unregister) from [<bf2b6b70>] (afunc_unbind+0x2c/0x68 [usb_f_uac2])
      [   42.761523] [<bf2b6b70>] (afunc_unbind [usb_f_uac2]) from [<bf29dbec>] (remove_config.isra.8+0xe8/0x100 [libcomposite])
      [   42.772868] [<bf29dbec>] (remove_config.isra.8 [libcomposite]) from [<bf29f9a4>] (__composite_unbind+0x48/0xb0 [libcomposite])
      [   42.784855] [<bf29f9a4>] (__composite_unbind [libcomposite]) from [<bf29fa28>] (composite_unbind+0x1c/0x20 [libcomposite])
      [   42.796446] [<bf29fa28>] (composite_unbind [libcomposite]) from [<c04d229c>] (usb_gadget_remove_driver+0x78/0xb0)
      [   42.807224] [<c04d229c>] (usb_gadget_remove_driver) from [<c04d2348>] (usb_gadget_unregister_driver+0x74/0xb8)
      [   42.817742] [<c04d2348>] (usb_gadget_unregister_driver) from [<bf29db00>] (usb_composite_unregister+0x1c/0x20 [libcomposite])
      [   42.829632] [<bf29db00>] (usb_composite_unregister [libcomposite]) from [<bf2b1084>] (audio_driver_exit+0x14/0x1c [g_audio])
      [   42.841430] [<bf2b1084>] (audio_driver_exit [g_audio]) from [<c00c0fe0>] (SyS_delete_module+0x120/0x1b0)
      [   42.851415] [<c00c0fe0>] (SyS_delete_module) from [<c000ed40>] (ret_fast_syscall+0x0/0x48)
      [   42.860075] ---[ end trace bb22e678d8d6db7b ]---
      root@saruman:~#
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      de1e6e79
    • F
      usb: gadget: function: uac2: prevent double ep disable · f3bb7b29
      Felipe Balbi 提交于
      without this check, f_uac2 would try to disable
      the same endpoint twice. Fix that.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      f3bb7b29
    • F
      usb: gadget: function: uac2: add wMaxPacketSize to ep desc · 703a303c
      Felipe Balbi 提交于
      Endpoint descriptors should pass wMaxPacketSize. Note
      that this also fixes USB20CV Other Speed Endpoint
      Descriptor Tests.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      703a303c
    • F
      usb: gadget: function: uvc: disable endpoints on ->disable() · e3122f5f
      Felipe Balbi 提交于
      when our ->disable() method is called, we must
      make sure to teardown all our resources, including
      endpoints.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      e3122f5f
    • F
      usb: gadget: function: uvc: manage our video control endpoint · 62e37078
      Felipe Balbi 提交于
      just like any other endpoint, we must enable/disable
      our video control endpoint based on calls to our
      ->set_alt() method.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      62e37078
    • F
      usb: gadget: function: acm: make f_acm pass USB20CV Chapter9 · 52ec49a5
      Felipe Balbi 提交于
      During Halt Endpoint Test, our interrupt endpoint
      will be disabled, which will clear out ep->desc
      to NULL. Unless we call config_ep_by_speed() again,
      we will not be able to enable this endpoint which
      will make us fail that test.
      
      Fixes: f9c56cdd (usb: gadget: Clear usb_endpoint_descriptor
      	inside the struct usb_ep on disable)
      Cc: <stable@vger.kernel.org> # v3.4+
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      52ec49a5
    • F
      usb: gadget: function: uvc: return correct alt-setting · e975be28
      Felipe Balbi 提交于
      If our alternate setting has been selected, we must
      return that on a subsequent Get Interface request
      even if we're not streaming.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      e975be28
    • F
      usb: gadget: function: uvc: make sure to balance ep enable/disable · c92bae75
      Felipe Balbi 提交于
      If a set_alt() to the same alternate setting that's
      already selected is received, functions are required
      to reset the interface state, this means we must disable
      all endpoints and reenable them again.
      
      This is also documented on our kdoc for struct usb_function
      
      * @set_alt: (REQUIRED) Reconfigures altsettings; function drivers may
      *	initialize usb_ep.driver data at this time (when it is used).
      *	Note that setting an interface to its current altsetting resets
      *	interface state, and that all interfaces have a disabled state.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      c92bae75
    • F
      usb: gadget: function: uvc: conditionally dequeue · d7577b38
      Felipe Balbi 提交于
      We shouldn't try to dequeue a NULL pointer.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      d7577b38
    • F
      usb: dwc3: gadget: fix set_halt() bug with pending transfers · 7a608559
      Felipe Balbi 提交于
      According to our Gadget Framework API documentation,
      ->set_halt() *must* return -EAGAIN if we have pending
      transfers (on either direction) or FIFO isn't empty (on
      TX endpoints).
      
      Fix this bug so that the mass storage gadget can be used
      without stall=0 parameter.
      
      This patch should be backported to all kernels since v3.2.
      
      Cc: <stable@vger.kernel.org> # v3.2+
      Suggested-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7a608559
    • F
      usb: dwc3: gadget: hold the lock through set_wedge()'s life · 95aa4e8d
      Felipe Balbi 提交于
      Instead of releasing the lock and calling locked
      versions of our set_halt() methods, let's hold
      the lock all the way through and call unlocked
      versions of those functions.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      95aa4e8d
    • F
      usb: dwc3: gadget: move isoc endpoint check to unlocked set_halt · 5ad02fb8
      Felipe Balbi 提交于
      __dwc3_gadget_ep_set_halt() is the function which
      handles the actual halt feature. In order to cope
      with some extra cleanup comming as a follow-up patch
      let's move the isochronous endpoint check there too.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      5ad02fb8
    • F
      usb: dwc3: ep0: hold our lock in dwc3_gadget_ep0_set_halt · 33fb691b
      Felipe Balbi 提交于
      dwc3_gadget_ep0_set_halt() will be called without
      locks held in some cases, so we must hold the lock
      on our own. While at that, also add a version without
      locks to be called in certain conditions.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      33fb691b
    • F
      usb: dwc3: trace: don't dereference pointers · 4ac4fc93
      Felipe Balbi 提交于
      The way trace works is that it won't decode strings
      until we read the actual trace. Because of that, we
      can't make assumptions of pointers still being valid
      at the time we read the trace. In order to avoid that,
      just copy all fields from every struct pointer we need
      for our traces.
      
      Ths patch fixes the following bug:
      
      [ 2940.039229] Unable to handle kernel paging request at virtual address 814efa9e
      [ 2940.046904] pgd = ec3dc000
      [ 2940.049737] [814efa9e] *pgd=00000000
      [ 2940.053552] Internal error: Oops: 5 [#1] SMP ARM
      [ 2940.058379] Modules linked in: usb_f_acm u_serial g_serial usb_f_uac2 libcomposite configfs xhci_hcd dwc3 udc_core matrix_keypad dwc3_omap lis3lv02d_i2c lis3lv02d input_polldev [last unloaded: g_audio]
      [ 2940.077238] CPU: 0 PID: 3020 Comm: tail Tainted: G        W
      3.17.0-rc5-dirty #1097
      [ 2940.085596] task: ed1b1040 ti: ed07c000 task.ti: ed07c000
      [ 2940.091258] PC is at strnlen+0x18/0x68
      [ 2940.095177] LR is at 0xfffffffe
      [ 2940.098454] pc : [<c0356df8>]    lr : [<fffffffe>]    psr: a0000013
      [ 2940.098454] sp : ed07ddb0  ip : ed07ddc0  fp : ed07ddbc
      [ 2940.110445] r10: c070ff70  r9 : ed07de70  r8 : 00000000
      [ 2940.115906] r7 : 814efa9e  r6 : ffffffff  r5 : ed4b6087  r4 : ed4b50c7
      [ 2940.122726] r3 : 00000000  r2 : 814efa9e  r1 : ffffffff  r0 : 814efa9e
      [ 2940.129546] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM Segment user
      [ 2940.137000] Control: 10c5387d  Table: ac3dc059  DAC: 00000015
      [ 2940.143006] Process tail (pid: 3020, stack limit = 0xed07c248)
      [ 2940.149098] Stack: (0xed07ddb0 to 0xed07e000)
      [ 2940.153660] dda0:                                     ed07dde4 ed07ddc0 c0359628 c0356dec
      [ 2940.162203] ddc0: 00000000 ed4b50c7 bf03ae9c ed4b6087 bf03ae9e 00000002 ed07de3c ed07dde8
      [ 2940.170740] dde0: c035ab50 c0359600 ffffffff ffffffff ff0a0000 ffffffff ed07de30 ed4b5088
      [ 2940.179275] de00: ed4b50c7 00000fc0 ff0a0004 ffffffff ed4b5088 ed4b5088 00000000 00001000
      [ 2940.187810] de20: 00001008 00000fc0 ed4b5088 00000000 ed07de68 ed07de40 c00f1e64 c035a9c4
      [ 2940.196341] de40: bf03dae0 ed07de70 ed4b4000 ec25b280 ed4b4000 ec25b280 bf03dae0 ed07de9c
      [ 2940.204886] de60: ed07de78 bf033324 c00f1e0c bf03ae9c 814efa9e ed428bc0 814eca3e 00000000
      [ 2940.213428] de80: 814eba3e ed4b4000 03bd1201 c0c34790 ed07ded4 ed07dea0 c00edc0c bf0332d0
      [ 2940.221994] dea0: 000002c7 ed07df10 ed07decc ed07deb8 ed4b4000 0000209c ec278ac0 00000000
      [ 2940.230536] dec0: 00002000 ec0db340 ed07def4 ed07ded8 c00ee7ec c00eda90 c00ee7b0 ec278ac0
      [ 2940.239075] dee0: ed4b4000 000002d5 ed07df44 ed07def8 c018b8d0 c00ee7bc c0166d3c ec278af0
      [ 2940.247621] df00: 0001f090 ed07df78 000002c7 00000000 000002c8 00000000 00000000 ec0db340
      [ 2940.256173] df20: 0001f090 ed07df78 ec0db340 00002000 0001f090 00000000 ed07df74 ed07df48
      [ 2940.264729] df40: c0166e98 c018b5f4 00000001 c018535c 000168c1 00000000 ec0db340 ec0db340
      [ 2940.273284] df60: 00002000 0001f090 ed07dfa4 ed07df78 c01675c4 c0166e0c 000168c1 00000000
      [ 2940.281829] df80: 00002000 0000000a 0001f090 00000003 c000f064 ed07c000 00000000 ed07dfa8
      [ 2940.290365] dfa0: c000ede0 c0167584 00002000 0000000a 00000003 0001f090 00002000 00000000
      [ 2940.298909] dfc0: 00002000 0000000a 0001f090 00000003 7fffe000 0001e1e0 00002004 0000002f
      [ 2940.307445] dfe0: 00000000 beed38ec 000104c8 b6e6397c 40000010 00000003 00000000 00000000
      [ 2940.315992] [<c0356df8>] (strnlen) from [<c0359628>] (string.isra.8+0x34/0xe8)
      [ 2940.323534] [<c0359628>] (string.isra.8) from [<c035ab50>] (vsnprintf+0x198/0x3fc)
      [ 2940.331461] [<c035ab50>] (vsnprintf) from [<c00f1e64>] (trace_seq_printf+0x68/0x94)
      [ 2940.339494] [<c00f1e64>] (trace_seq_printf) from [<bf033324>] (ftrace_raw_output_dwc3_log_request+0x60/0x78 [dwc3])
      [ 2940.350424] [<bf033324>] (ftrace_raw_output_dwc3_log_request [dwc3]) from [<c00edc0c>] (print_trace_line+0x188/0x418)
      [ 2940.361507] [<c00edc0c>] (print_trace_line) from [<c00ee7ec>] (s_show+0x3c/0x12c)
      [ 2940.369330] [<c00ee7ec>] (s_show) from [<c018b8d0>] (seq_read+0x2e8/0x4a0)
      [ 2940.376519] [<c018b8d0>] (seq_read) from [<c0166e98>] (vfs_read+0x98/0x158)
      [ 2940.383796] [<c0166e98>] (vfs_read) from [<c01675c4>] (SyS_read+0x4c/0xa0)
      [ 2940.390981] [<c01675c4>] (SyS_read) from [<c000ede0>] (ret_fast_syscall+0x0/0x48)
      [ 2940.398792] Code: e24cb004 e3510000 e241e001 0a000011 (e5d01000)
      [ 2940.406980] ---[ end trace d8b38370fbb531f3 ]---
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      4ac4fc93
  3. 09 10月, 2014 2 次提交
  4. 04 10月, 2014 6 次提交
  5. 03 10月, 2014 1 次提交
  6. 29 9月, 2014 8 次提交
  7. 26 9月, 2014 1 次提交
  8. 25 9月, 2014 4 次提交