1. 03 Sep, 2012 4 commits
  2. 31 Aug, 2012 12 commits
  3. 23 Aug, 2012 13 commits
    • Shimoda, Yoshihiro's avatar
      usb: renesas_usbhs: modify the irq handler for sharing irq · 4e177260
      Shimoda, Yoshihiro authored
      When IORESOURCE_IRQ_SHAREABLE is set, the irq handler may be called
      even if the interupt of the USB module doesn't happen. So, it may
      clear the interrupt flags by mistake. This patch fixes it.
      Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4e177260
    • Andy Shevchenko's avatar
      usb: gadget: use %pm to print mac addresses · 8c7ca992
      Andy Shevchenko authored
      %pm already provides pretty print for mac addresses, let's
      use that and drop homebrew mac address printing.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      8c7ca992
    • Kevin Cernekee's avatar
      usb: gadget: udc-core: Race between disconnect/unbind and setup · 974e9323
      Kevin Cernekee authored
      usb_gadget_remove_driver() runs through a four-step sequence to shut down
      the gadget driver.  For the case of a composite gadget + at91 UDC, this
      would look like:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          usb_gadget_disconnect(udc->gadget);            // at91_pullup(gadget, 0)
          udc->driver->unbind(udc->gadget);              // composite_unbind()
          usb_gadget_udc_stop(udc->gadget, udc->driver); // at91_stop()
      
      The UDC driver can receive SETUP packets from the host up until the
      point when usb_gadget_disconnect() returns.  On rare occasions, the
      gadget driver may see this sequence:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          udc->driver->setup(udc->gadget, &ctrl);        // composite_setup()
          udc->driver->unbind(udc->gadget);              // composite_unbind()
      
      Some gadget drivers, such as composite, assume this will never happen
      and crash as a result.
      
      The fix is to quiesce the UDC hardware (via usb_gadget_disconnect)
      before running the gadget driver through the disconnect/unbind sequence.
      Reviewed-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarKevin Cernekee <cernekee@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      974e9323
    • Andy Shevchenko's avatar
    • Du, Changbin's avatar
      usb: gadget: s3c-hsotg: fix core reset timeout failure · 2868fea2
      Du, Changbin authored
      The timeout values were 1000 and timeout issue occured many times on my
      s3c6410 Soc based board (mostly when booting whith USB cable not
      connected). This patch increase the values to 10000 to guarantee the
      success of reset.
      
      Having set timeout to 10000, I printed the remained timeout values
      which could cause timeout issue before this change (tested several
      times).
      the first timeout value remained:
      	timeout = 8079
      	timeout = 8079
      	timeout = 8078
      	timeout = 8081
      the second timeout value remained:
      	timeout = 7940
      	timeout = 7945
      	timeout = 7940
      	timeout = 7938
      Seeing from above values, I think the value 10000 is big enough.
      Signed-off-by: default avatarDu, Changbin <changbin.du@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      2868fea2
    • Michael Grzeschik's avatar
      usb composite: fix locking in usb_function_activate · 4fefe9f6
      Michael Grzeschik authored
      The lockdep hunter mentions a non consistent usage of spin_lock and
      spin_lock_irqsafe in the composite_disconnect and usb_function_activate
      function:
      
      [   15.700897] =================================
      [   15.705255] [ INFO: inconsistent lock state ]
      [   15.709617] 3.5.0-rc5+ #413 Not tainted
      [   15.713453] ---------------------------------
      [   15.717812] inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
      [   15.723822] uvc-gadget/116 [HC1[1]:SC0[0]:HE0:SE1] takes:
      [   15.729222]  (&(&cdev->lock)->rlock){?.+...}, at: [<7f0049e8>] composite_disconnect+0x2c/0x74 [g_webcam]
      [   15.738797] {HARDIRQ-ON-W} state was registered at:
      [   15.743677]   [<8006de3c>] mark_lock+0x148/0x688
      [   15.748325]   [<8006ecb0>] __lock_acquire+0x934/0x1b74
      [   15.753481]   [<8007047c>] lock_acquire+0x98/0x138
      [   15.758288]   [<804c776c>] _raw_spin_lock+0x4c/0x84
      [   15.763188]   [<7f006ae4>] usb_function_activate+0x28/0x94 [g_webcam]
      [   15.769652]   [<7f00820c>] usb_ep_autoconfig_reset+0x78/0x98 [g_webcam]
      [   15.776287]   [<7f0082a4>] uvc_v4l2_open+0x78/0x94 [g_webcam]
      [   15.782054]   [<80366a38>] v4l2_open+0x104/0x130
      [   15.786697]   [<800efd30>] chrdev_open+0xa0/0x170
      [   15.791423]   [<800e9718>] do_dentry_open.isra.13+0x1e8/0x264
      [   15.797186]   [<800ea5d4>] nameidata_to_filp+0x58/0x94
      [   15.802340]   [<800fa29c>] do_last.isra.31+0x2a0/0x808
      [   15.807497]   [<800faa40>] path_openat+0xc8/0x3e8
      [   15.812216]   [<800fae90>] do_filp_open+0x3c/0x90
      [   15.816936]   [<800ea6fc>] do_sys_open+0xec/0x184
      [   15.821655]   [<800ea7c4>] sys_open+0x30/0x34
      [   15.826027]   [<8000e5c0>] ret_fast_syscall+0x0/0x48
      [   15.831015] irq event stamp: 6048
      [   15.834330] hardirqs last  enabled at (6047): [<804c81b8>] _raw_spin_unlock_irqrestore+0x40/0x54
      [   15.843132] hardirqs last disabled at (6048): [<8000e174>] __irq_svc+0x34/0x60
      [   15.850370] softirqs last  enabled at (5940): [<80028380>] __do_softirq+0x188/0x270
      [   15.858043] softirqs last disabled at (5935): [<80028944>] irq_exit+0xa0/0xa8
      [   15.865195]
      [   15.865195] other info that might help us debug this:
      [   15.871724]  Possible unsafe locking scenario:
      [   15.871724]
      [   15.877645]        CPU0
      [   15.880091]        ----
      [   15.882537]   lock(&(&cdev->lock)->rlock);
      [   15.886659]   <Interrupt>
      [   15.889278]     lock(&(&cdev->lock)->rlock);
      [   15.893573]
      [   15.893573]  *** DEADLOCK ***
      [   15.893573]
      [   15.899496] no locks held by uvc-gadget/116.
      [   15.903765]
      [   15.903765] stack backtrace:
      [   15.908125] Backtrace:
      [   15.910604] [<80012038>] (dump_backtrace+0x0/0x114) from [<804bf8a4>] (dump_stack+0x20/0x24)
      [   15.919043]  r6:dfb8e6f0 r5:dfb8e400 r4:809717ec r3:60000193
      [   15.924766] [<804bf884>] (dump_stack+0x0/0x24) from [<804c0c0c>] (print_usage_bug+0x258/0x2c0)
      [   15.933388] [<804c09b4>] (print_usage_bug+0x0/0x2c0) from [<8006e240>] (mark_lock+0x54c/0x688)
      [   15.942006] [<8006dcf4>] (mark_lock+0x0/0x688) from [<8006edb8>] (__lock_acquire+0xa3c/0x1b74)
      [   15.950625] [<8006e37c>] (__lock_acquire+0x0/0x1b74) from [<8007047c>] (lock_acquire+0x98/0x138)
      [   15.959418] [<800703e4>] (lock_acquire+0x0/0x138) from [<804c78fc>] (_raw_spin_lock_irqsave+0x58/0x94)
      [   15.968736] [<804c78a4>] (_raw_spin_lock_irqsave+0x0/0x94) from [<7f0049e8>] (composite_disconnect+0x2c/0x74 [g_webcam])
      [   15.979605]  r7:00000012 r6:df82b0c4 r5:ded755bc r4:ded75580
      [   15.985331] [<7f0049bc>] (composite_disconnect+0x0/0x74 [g_webcam]) from [<8033c170>] (_gadget_stop_activity+0xc4/0x120)
      [   15.996200]  r6:df82b0c4 r5:df82b0c8 r4:df82b0d0 r3:7f0049bc
      [   16.001919] [<8033c0ac>] (_gadget_stop_activity+0x0/0x120) from [<8033e390>] (udc_irq+0x724/0xcb8)
      [   16.010877]  r6:df82b010 r5:00000000 r4:df82b010 r3:00000000
      [   16.016595] [<8033dc6c>] (udc_irq+0x0/0xcb8) from [<8033baec>] (ci_irq+0x64/0xdc)
      [   16.024086] [<8033ba88>] (ci_irq+0x0/0xdc) from [<80086538>] (handle_irq_event_percpu+0x74/0x298)
      [   16.032958]  r5:807fd414 r4:df38fdc0
      [   16.036566] [<800864c4>] (handle_irq_event_percpu+0x0/0x298) from [<800867a8>] (handle_irq_event+0x4c/0x6c)
      [   16.046315] [<8008675c>] (handle_irq_event+0x0/0x6c) from [<80089318>] (handle_level_irq+0xbc/0x11c)
      [   16.055447]  r6:def04000 r5:807fd414 r4:807fd3c0 r3:00020000
      [   16.061166] [<8008925c>] (handle_level_irq+0x0/0x11c) from [<80085cc8>] (generic_handle_irq+0x38/0x4c)
      [   16.070472]  r5:807f7f64 r4:8081e9f8
      [   16.074082] [<80085c90>] (generic_handle_irq+0x0/0x4c) from [<8000ef98>] (handle_IRQ+0x5c/0xbc)
      [   16.082788] [<8000ef3c>] (handle_IRQ+0x0/0xbc) from [<800085cc>] (tzic_handle_irq+0x6c/0x9c)
      [   16.091225]  r8:00000000 r7:def059b0 r6:00000001 r5:00000000 r4:00000000
      r3:00000012
      [   16.099141] [<80008560>] (tzic_handle_irq+0x0/0x9c) from [<8000e184>] (__irq_svc+0x44/0x60)
      [   16.107494] Exception stack(0xdef059b0 to 0xdef059f8)
      [   16.112550] 59a0:                                     00000001 00000001 00000000 dfb8e400
      [   16.120732] 59c0: 40000013 81a2e500 00000000 81a2e500 00000000 00000000 80862418 def05a0c
      [   16.128912] 59e0: def059c8 def059f8 80070e24 804c81bc 20000013 ffffffff
      [   16.135542] [<804c8178>] (_raw_spin_unlock_irqrestore+0x0/0x54) from [<8003d0ec>] (__queue_work+0x108/0x470)
      [   16.145369]  r5:dfb1a30c r4:81b93c00
      [   16.148978] [<8003cfe4>] (__queue_work+0x0/0x470) from [<8003d4e0>] (queue_work_on+0x4c/0x54)
      [   16.157511] [<8003d494>] (queue_work_on+0x0/0x54) from [<8003d544>] (queue_work+0x30/0x34)
      [   16.165774]  r6:df2e6900 r5:80e0c2f8 r4:dfb1a2c8 r3:def04000
      [   16.171495] [<8003d514>] (queue_work+0x0/0x34) from [<80493284>] (rpc_make_runnable+0x9c/0xac)
      [   16.180113] [<804931e8>] (rpc_make_runnable+0x0/0xac) from [<80493c88>] (rpc_execute+0x40/0xa8)
      [   16.188811]  r5:def05ad4 r4:dfb1a2c8
      [   16.192426] [<80493c48>] (rpc_execute+0x0/0xa8) from [<8048c734>] (rpc_run_task+0xa8/0xb4)
      [   16.200690]  r8:00000001 r7:df74f520 r6:ded75700 r5:def05ad4 r4:dfb1a2c8
      r3:00000002
      [   16.208618] [<8048c68c>] (rpc_run_task+0x0/0xb4) from [<801f1608>] (nfs_initiate_read+0xb4/0xd4)
      [   16.217403]  r5:df3e86c0 r4:00000000
      [   16.221015] [<801f1554>] (nfs_initiate_read+0x0/0xd4) from [<801f1c64>] (nfs_generic_pg_readpages+0x9c/0x114)
      [   16.230937] [<801f1bc8>] (nfs_generic_pg_readpages+0x0/0x114) from [<801f0744>] (__nfs_pageio_add_request+0xe8/0x214)
      [   16.241545]  r8:000bf000 r7:00000000 r6:00000000 r5:deef4640 r4:def05c1c
      r3:801f1bc8
      [   16.249463] [<801f065c>] (__nfs_pageio_add_request+0x0/0x214) from [<801f0e3c>] (nfs_pageio_add_request+0x28/0x54)
      [   16.259818] [<801f0e14>] (nfs_pageio_add_request+0x0/0x54) from [<801f1394>] (readpage_async_filler+0x114/0x170)
      [   16.269992]  r5:def05c58 r4:80fd7300
      [   16.273607] [<801f1280>] (readpage_async_filler+0x0/0x170) from [<800bb418>] (read_cache_pages+0xa0/0x108)
      [   16.283259]  r8:00200200 r7:00100100 r6:df74f654 r5:def05cd0 r4:80fd7300
      [   16.290034] [<800bb378>] (read_cache_pages+0x0/0x108) from [<801f218c>] (nfs_readpages+0xc4/0x168)
      [   16.298999] [<801f20c8>] (nfs_readpages+0x0/0x168) from [<800bb1d0>] (__do_page_cache_readahead+0x254/0x354)
      [   16.308833] [<800baf7c>] (__do_page_cache_readahead+0x0/0x354) from [<800bb5d0>] (ra_submit+0x38/0x40)
      [   16.318145] [<800bb598>] (ra_submit+0x0/0x40) from [<800bb6b0>] (ondemand_readahead+0xd8/0x3b0)
      [   16.326851] [<800bb5d8>] (ondemand_readahead+0x0/0x3b0) from [<800bba20>] (page_cache_async_readahead+0x98/0xa8)
      [   16.337043] [<800bb988>] (page_cache_async_readahead+0x0/0xa8) from [<800b2118>] (generic_file_aio_read+0x5b4/0x7c4)
      [   16.347565]  r6:00000000 r5:df74f654 r4:80fd70a0
      [   16.352231] [<800b1b64>] (generic_file_aio_read+0x0/0x7c4) from [<801e82c0>] (nfs_file_read+0x7c/0xcc)
      [   16.361544] [<801e8244>] (nfs_file_read+0x0/0xcc) from [<800eab80>] (do_sync_read+0xb4/0xf4)
      [   16.369981]  r9:00000000 r8:def05f70 r7:00000000 r6:00000000 r5:dec34900
      r4:fffffdee
      [   16.377896] [<800eaacc>] (do_sync_read+0x0/0xf4) from [<800eb548>] (vfs_read+0xb4/0x144)
      [   16.385987]  r8:00000000 r7:def05f70 r6:76a95008 r5:003e3dd6 r4:dec34900
      [   16.392761] [<800eb494>] (vfs_read+0x0/0x144) from [<800eb624>] (sys_read+0x4c/0x78)
      [   16.400504]  r8:00000000 r7:00000003 r6:003e3dd6 r5:76a95008 r4:dec34900
      [   16.407279] [<800eb5d8>] (sys_read+0x0/0x78) from [<8000e5c0>] (ret_fast_syscall+0x0/0x48)
      [   16.415543]  r9:def04000 r8:8000e864 r6:000086b4 r5:00000000 r4:00000000
      [   20.872729]  gadget: high-speed config #1: Video
      [   20.877368]  gadget: uvc_function_set_alt(0, 0)
      [   20.881908]  gadget: uvc_function_set_alt(1, 0)
      [   20.891464]  gadget: uvc_function_set_alt(1, 0)
      Signed-off-by: default avatarMichael Grzeschik <m.grzeschik@pengutronix.de>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      4fefe9f6
    • Neil Zhang's avatar
      usb: gadget: mv_udc: fix boot up hang · 11c37c8b
      Neil Zhang authored
      Fix boot up hang when enable udc without otg enabled.
      The root cause is that the clock will be shut down when probe routine is
      finished because of clock gating. When a gadget driver is registered at
      this time, it will call mv_udc_start which in turn will call
      mv_udc_vbus_session. If there is no cable attached at the boot up time,
      the vbus is low, so it will call stop_activity path without clock
      enabled which will cause system hang then.
      Actually, we need't go this path when clock is disabled, what we need to
      do is just jump out.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      11c37c8b
    • Yunfan Zhang's avatar
      usb: gadget: mv_udc: fix hang when shutdown · 1dcaa252
      Yunfan Zhang authored
      Fix system hang in udc shutdown routine which caused by accessing usb
      register when clock is disabled. So enable usb clock before access
      register.
      Signed-off-by: default avatarYunfan Zhang <yfzhang@marvell.com>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      1dcaa252
    • Chao Xie's avatar
      usb: gadget: mv_udc: add iso support · 60326ce3
      Chao Xie authored
      In order to support iso, we need do the following things:
      1. fix length for one dtd
      2. allow req contains multiple packets for a ISO transfer
      Signed-off-by: default avatarChao Xie <chao.xie@marvell.com>
      Signed-off-by: default avatarYu Xu <yuxu@marvell.com>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      60326ce3
    • Neil Zhang's avatar
      usb: gadget: mv_udc: enable stream mode · 583a7263
      Neil Zhang authored
      According to ChipIdea's reference manual in section 8.5.2
      "Non-streaming operational mode in device mode", we'd better enable stream
      mode, especially that ISO endpoints are not supported when the SDIS bit
      is set.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      583a7263
    • Neil Zhang's avatar
      usb: gadget: mv_udc: avoid sleeping on spinlock · 0344606b
      Neil Zhang authored
      build_dtd() can be called when hold a spinlock, but GFP_KERNEL may cause
      dma_pool_alloc() sleep, So we need use GFP_ATOMIC instead of GFP_KERNEL.
      But using GFP_ATOMIC may cause failure when allocating memory, add error
      handler to handle it.
      Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      0344606b
    • Neil Zhang's avatar
      usb: gadget: mv_udc: remove unused code · a07bc24e
      Neil Zhang authored
      Clean unused code for mv_udc driver.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      a07bc24e
    • Neil Zhang's avatar
      usb: gadget: mv_udc: reduce the delay interval · 9b2035a0
      Neil Zhang authored
      There are several places use udelay(LOOPS_USEC) to wait the status to be
      changed, but the delay interval is a bit too long, so reduce it to
      enhance the performance.
      Signed-off-by: default avatarNeil Zhang <zhangwm@marvell.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      9b2035a0
  4. 16 Aug, 2012 11 commits