1. 17 12月, 2010 4 次提交
    • A
      USB: gadget: ci13xxx: don't assume that PAGE_SIZE is 4096 · 0a313c4d
      Artem Leonenko 提交于
      Page size for transaction descriptors for CI13XXX has nothing
      common with page size from MM. Using platform and configuration
      specific PAGE_SIZE is wrong.
      Signed-off-by: NArtem Leonenko <tikkeri@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      0a313c4d
    • A
      USB: gadget: ci13xxx: fix complete() callback for no_interrupt rq's · 7c25a826
      Artem Leonenko 提交于
      CI13xxx UDC driver doesn't call complete() callback for requests
      with flag no_interrupt set. Thus gadget drivers (like g_ether) are
      never notifed about successfully (or not) transmitted requests. As
      a result in case of g_ether and queued request with no_interrupt=1
      fields g_ether is never notifed about sent packets and TX stalls.
      
      Solution: treat no_interrupt flag like all other UDC drivers do and
      call complete() callback for all requests.
      Signed-off-by: NArtem Leonenko <tikkeri@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      7c25a826
    • A
      USB: gadget: update ci13xxx to work with g_ether · d9bb9c18
      Artem Leonenko 提交于
      There is one nasty scenario when CI13xxx driver fails:
             a) two or more rx requests are queued (g_ether does that)
             b) rx request completed, interrupt fires and ci13xxx dequeues rq
             c) request complete() callback gets called and in turn it calls ep_queue()
                     c1) in ep_queue() request gets added to the TAIL of the rx queue list
             d) ep gets primed with rq from (b)
             e) interrupt fires
             f) request gets popped from queue head for hw dequeue
             G) requets from queue head wasn't enqueued
                     g1)  isr_tr_complete_low() doesn't
                     enqueue more requests and it doesn't prime EP,
                     rx traffic stalls
      
      Solution:
             a) enque queued requests ASAP, i.e. before calling complete() callback.
             b) don't HW enqueue and prime endpoint with recently added request and
             use the oldest request in the queue.
      
      Fixed issues:
             a) ep_queue() may return an error code despite request was successfully
             added to the queue (if _hardware_enqueue() fails)
             b) Added requests are always processed in LIFO order, even if they are
             added in complete() callback
             c) Finally more than two and more queued requests are processed consistently,
             even if they were added in complete() callback
      
      The fix was successfully tested on MIPS based SoC with 4KEc CPU core and
      CI13612 USB core. Board successfully boots with NFS root using g_ether
      on ci13xxx udc.
      Signed-off-by: NArtem Leonenko <tikkeri@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      d9bb9c18
    • A
      USB: gadgets: ci13xxx: fix probing of compiled-in gadget drivers · 6549e8b7
      Artem Leonenko 提交于
      Built-in gadget drivers have NULL-ifed unbind() function. Checking
      whether unbind() is NULL will never let any compiled into kernel
      driver attach.
      Signed-off-by: NArtem Leonenko <tikkeri@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6549e8b7
  2. 11 12月, 2010 14 次提交
  3. 10 12月, 2010 1 次提交
  4. 04 12月, 2010 1 次提交
    • R
      usb: g_audio: Fix crash at driver removal · df4fedea
      Richard Röjfors 提交于
      If g_audio fails to open the sound control device, it crashes at removal:
      
      Insertion:
      [ 4143.836536] g_audio gadget: unable to open sound control device file: /dev/snd/controlC0
      [ 4143.836543] g_audio gadget: we need at least one control device
      [ 4143.836551] g_audio gadget: Linux USB Audio Gadget, version: Dec 18, 2008
      [ 4143.836558] g_audio gadget: g_audio ready
      
      Removal:
      [ 4146.802643] BUG: unable to handle kernel paging request at 00023018
      [ 4146.802655] IP: [<c10af9f5>] filp_close+0xa/0x5b
      [ 4146.802674] *pdpt = 0000000015426001 *pde = 0000000000000000
      [ 4146.802684] Oops: 0000 [#1] PREEMPT SMP
      [ 4146.802692] last sysfs file: /sys/power/state
      [ 4146.802701] Modules linked in: g_audio(-) ioh_udc fuse asix usbnet [last unloaded: g_audio]
      [ 4146.802719]
      [ 4146.802728] Pid: 1394, comm: rmmod Not tainted 2.6.33.5-26.1-ivi #1 To be filled by O.E.M./To be filled by O.E.M.
      [ 4146.802738] EIP: 0060:[<c10af9f5>] EFLAGS: 00010206 CPU: 0
      [ 4146.802746] EIP is at filp_close+0xa/0x5b
      [ 4146.802753] EAX: 00023000 EBX: 00023000 ECX: 00000046 EDX: df842680
      [ 4146.802760] ESI: e071cd4c EDI: df842680 EBP: ddbbbef0 ESP: ddbbbee4
      [ 4146.802768]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      [ 4146.802776] Process rmmod (pid: 1394, ti=ddbba000 task=dd95a4f0 task.ti=ddbba000)
      [ 4146.802782] Stack:
      [ 4146.802787]  d540c280 e071cd4c df2bc000 ddbbbefc e071b82c df11e440 ddbbbf04 e071c622
      [ 4146.802804] <0> ddbbbf28 e071c47f 00000008 e071cd74 df11e464 df2bc01c df2bc000 e071ce68
      [ 4146.802822] <0> 00000880 ddbbbf38 e07fd1b8 e071cef0 00000000 ddbbbf40 e071b9f4 ddbbbf48
      [ 4146.802842] Call Trace:
      [ 4146.802857]  [<e071b82c>] ? gaudio_cleanup+0x87/0xe0 [g_audio]
      [ 4146.802869]  [<e071c622>] ? audio_unbind+0x8/0xc [g_audio]
      [ 4146.802881]  [<e071c47f>] ? composite_unbind+0x8d/0xcb [g_audio]
      [ 4146.802895]  [<e07fd1b8>] ? usb_gadget_unregister_driver+0x7b/0xc0 [ioh_udc]
      [ 4146.802908]  [<e071b9f4>] ? usb_composite_unregister+0x15/0x17 [g_audio]
      [ 4146.802920]  [<e071c633>] ? cleanup+0xd/0xf [g_audio]
      [ 4146.802932]  [<c105a938>] ? sys_delete_module+0x185/0x1dd
      [ 4146.802944]  [<c101c3ea>] ? do_page_fault+0x248/0x276
      [ 4146.802956]  [<c10027d0>] ? sysenter_do_call+0x12/0x26
      [ 4146.802962] Code: 12 5f 3a 00 8b 43 04 8b 40 0c 0f b3 30 3b 73 44 73 03 89 73 44 89 f8 e8 f1 61 3a 00 5b 5e 5f 5d c3 55 89 e5 57 89 d7 56 53 89 c3 <8b> 40 18 85 c0 75 0f 68 32 15 5e c1 31 f6 e8 52 39 3a 00 5a eb
      [ 4146.803058] EIP: [<c10af9f5>] filp_close+0xa/0x5b SS:ESP 0068:ddbbbee4
      [ 4146.803071] CR2: 0000000000023018
      [ 4146.803112] ---[ end trace 0989a7e023da0434 ]---
      
      This patch makes sure not to assign the_card if gaudio_open_snd_dev fails,
      since the parent function will deallocate the card.
      
      Also make sure all filp's in gaudio_open_snd_dev is assigned NULL upon error
      and gaudio_close_snd_dev only cleanups when the filp's are non-NULL.
      Signed-off-by: NRichard Röjfors <richard.rojfors@pelagicore.com>
      Cc: David Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      df4fedea
  5. 01 12月, 2010 3 次提交
  6. 18 11月, 2010 2 次提交
  7. 17 11月, 2010 5 次提交
  8. 11 11月, 2010 10 次提交