1. 02 Sep, 2019 1 commit
    • Greg Kroah-Hartman's avatar
      Merge tag 'usb-for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next · 96e46dcf
      Greg Kroah-Hartman authored
      Felipe writes:
      
      USB: Changes for v5.4 merge window
      
      With only 45 non-merge commits, we have a small merge window from the
      Gadget perspective.
      
      The biggest change here is the addition of the Cadence USB3 DRD
      Driver. All other changes are small, non-critical fixes or smaller new
      features like the improvement to BESL handling in dwc3.
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      
      * tag 'usb-for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb: (45 commits)
        usb: gadget: net2280: Add workaround for AB chip Errata 11
        usb: gadget: net2280: Move all "ll" registers in one structure
        usb: dwc3: gadget: Workaround Mirosoft's BESL check
        usb:cdns3 Fix for stuck packets in on-chip OUT buffer.
        usb: cdns3: Add Cadence USB3 DRD Driver
        usb: common: Simplify usb_decode_get_set_descriptor function.
        usb: common: Patch simplify usb_decode_set_clear_feature function.
        usb: common: Separated decoding functions from dwc3 driver.
        dt-bindings: add binding for USBSS-DRD controller.
        usb: gadget: composite: Set recommended BESL values
        usb: dwc3: gadget: Set BESL config parameter
        usb: dwc3: Separate field holding multiple properties
        usb: gadget: Export recommended BESL values
        usb: phy: phy-fsl-usb: Make structure fsl_otg_initdata constant
        usb: udc: lpc32xx: silence fall-through warning
        usb: dwc3: meson-g12a: fix suspend resume regulator unbalanced disables
        usb: udc: lpc32xx: remove set but not used 3 variables
        usb: gadget: udc: core: Fix segfault if udc_bind_to_driver() for pending driver fails
        usb: dwc3: st: Add of_dev_put() in probe function
        usb: dwc3: st: Add of_node_put() before return in probe function
        ...
      96e46dcf
  2. 30 Aug, 2019 3 commits
    • Benjamin Herrenschmidt's avatar
      usb: gadget: net2280: Add workaround for AB chip Errata 11 · 18a93cd3
      Benjamin Herrenschmidt authored
      The errata description is:
      
      Workaround for Default Duration of LFPS Handshake Signaling for
      Device-Initiated U1 Exit is too short.
      
      The default duration of the LFPS handshake generated by USB3380 for a device-initiated U1-exit may not be
      long enough for certain SuperSpeed downstream ports (SuperSpeed hubs/hosts) to recognize. This could lead
      to USB3380 entering the recovery state pre-maturely and ending up in the SS.Inactive state.
      
      I have observed various enumeration failures, seemingly related to
      lost transactions or SETUP status phases on modern hosts (typically
      thunderbolt capable systems) without this workaround.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      18a93cd3
    • Benjamin Herrenschmidt's avatar
      usb: gadget: net2280: Move all "ll" registers in one structure · ec8ca8a3
      Benjamin Herrenschmidt authored
      The split into multiple structures of the "ll" register bank is
      impractical. It makes it hard to add ll_lfps_timers_2 which is
      at offset 0x794, which is outside of the existing "lfps" structure
      and would require us to add yet another one.
      
      Instead, move all the "ll" registers into a single usb338x_ll_regs
      structure, and add ll_lfps_timers_2 while at it. It will be used
      in a subsequent patch.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      ec8ca8a3
    • Thinh Nguyen's avatar
      usb: dwc3: gadget: Workaround Mirosoft's BESL check · 17b63704
      Thinh Nguyen authored
      While testing our host system using Microsoft's usb stack against our
      gadget for various BESL values, we found an issue with their usb stack
      when the recommended baseline BESL value is 0 (125us) or when the deep
      BESL is 1 or less. The Windows host will issue a usb reset immediately
      after it receives the extended BOS descriptor and the enumeration will
      fail after a few attempts.
      
      To keep compatibility with Microsoft's host usb stack, let's workaround
      this issue by using the recommended baseline BESL of 1 (or 150us)
      and clamp the deep BESL value within 2 to 15.
      
      This was tested against Windows 10 build 18956.
      Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      17b63704
  3. 29 Aug, 2019 6 commits
  4. 28 Aug, 2019 14 commits
    • Chunfeng Yun's avatar
      usb: xhci-mtk: add an optional xhci_ck clock · b2fcb285
      Chunfeng Yun authored
      Some SoCs may have an optional clock xhci_ck (125M or 200M), it
      usually uses the same PLL as sys_ck, so support it.
      Signed-off-by: default avatarChunfeng Yun <chunfeng.yun@mediatek.com>
      Acked-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Reviewed-by: default avatarMatthias Brugger <matthias.bgg@gmail.com>
      Link: https://lore.kernel.org/r/1566542425-20082-2-git-send-email-chunfeng.yun@mediatek.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2fcb285
    • Chunfeng Yun's avatar
    • Thinh Nguyen's avatar
      usb: gadget: composite: Set recommended BESL values · cca38540
      Thinh Nguyen authored
      Set the recommended BESL deep and baseline values based on the gadget's
      configuration parameters to the extended BOS descriptor. This feature
      helps to optimize power savings by maximizing the opportunity for longer
      L1 residency time.
      Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      cca38540
    • Thinh Nguyen's avatar
      usb: dwc3: gadget: Set BESL config parameter · 54fb5ba6
      Thinh Nguyen authored
      When operating with LPM signals, the controller asserts the deep
      low-power signal (utmi_l1_suspend_n) to the phy when the BESL value of
      the LPM token is equal to or greater than DCTL.HIRD_Thres[3:0] (and
      with DCTL.HIRD_Thres[4] set). Otherwise, the shallow low-power signal
      (utmi_sleep_n) is asserted. Set the recommended deep BESL equal to the
      controller's DCTL.HIRD_Thres[3:0] setting, and set the baseline BESL
      to 0 for the shallow low-power signal. This maximizes the opportunity
      for L1 residency and optimizes power savings.
      Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      54fb5ba6
    • Thinh Nguyen's avatar
      usb: dwc3: Separate field holding multiple properties · 16fe4f30
      Thinh Nguyen authored
      dwc->hird_threshold field should store "snps,hird_threshold" property
      only and not a combination of multiple properties. Remove the value of
      "snps,is-utmi-l1-suspend" property from the field dwc->hird_threshold.
      Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      16fe4f30
    • Thinh Nguyen's avatar
      usb: gadget: Export recommended BESL values · 05f0b20b
      Thinh Nguyen authored
      Currently there's no option for the controller driver to report the
      recommended Best Effort Service Latency (BESL) when operating with LPM
      support. Add new fields in usb_dcd_config_params to export the
      recommended baseline and deep BESL values for the function drivers to
      set the proper BESL value in the BOS descriptor.
      Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      05f0b20b
    • Nishka Dasgupta's avatar
      usb: phy: phy-fsl-usb: Make structure fsl_otg_initdata constant · f1b19006
      Nishka Dasgupta authored
      Static structure fsl_otg_initdata, of type fsl_otg_config, is used only
      once, when the value of its field otg_port is assigned to another
      variable. As fsl_otg_initdata.otg_port is of type u8, any changes to
      its copy do not affect the original, and fsl_otg_initdata itself is
      never modified. Hence make fsl_otg_initdata constant to protect it from
      unintended modification.
      Issue found with Coccinelle.
      Signed-off-by: default avatarNishka Dasgupta <nishkadg.linux@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      f1b19006
    • Gustavo A. R. Silva's avatar
      usb: udc: lpc32xx: silence fall-through warning · c33f1416
      Gustavo A. R. Silva authored
      Silence the following fall-through warning by adding a break statement:
      
      drivers/usb/gadget/udc/lpc32xx_udc.c:2230:3: warning: this statement may
      fall through [-Wimplicit-fallthrough=]
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      c33f1416
    • Neil Armstrong's avatar
      usb: dwc3: meson-g12a: fix suspend resume regulator unbalanced disables · 1cf084d1
      Neil Armstrong authored
      When going in suspend, in Device mode, then resuming back leads
      to the following:
      
      unbalanced disables for USB_PWR_EN
      WARNING: CPU: 0 PID: 163 at ../drivers/regulator/core.c:2590 _regulator_disable+0x104/0x180
      Hardware name: Amlogic Meson G12A U200 Development Board (DT)
      [...]
      pc : _regulator_disable+0x104/0x180
      lr : _regulator_disable+0x104/0x180
      [...]
      Call trace:
       _regulator_disable+0x104/0x180
       regulator_disable+0x40/0x78
       dwc3_meson_g12a_otg_mode_set+0x84/0xb0
       dwc3_meson_g12a_irq_thread+0x58/0xb8
       irq_thread_fn+0x28/0x80
       irq_thread+0x118/0x1b8
       kthread+0xf4/0x120
       ret_from_fork+0x10/0x18
      
      This disables the regulator if enabled on suspend, and the reverse on
      resume.
      
      Fixes: c9999337 ("usb: dwc3: Add Amlogic G12A DWC3 glue")
      Tested-by: default avatarKevin Hilman <khilman@baylibre.com>
      Reported-by: default avatarKevin Hilman <khilman@baylibre.com>
      Signed-off-by: default avatarNeil Armstrong <narmstrong@baylibre.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      1cf084d1
    • Mao Wenan's avatar
      usb: udc: lpc32xx: remove set but not used 3 variables · 566aacaf
      Mao Wenan authored
      Fixes gcc '-Wunused-but-set-variable' warning:
      drivers/usb/gadget/udc/lpc32xx_udc.c: In function ‘udc_protocol_cmd_r’:
      drivers/usb/gadget/udc/lpc32xx_udc.c:744:6: warning: variable ‘tmp’ set but not used [-Wunused-but-set-variable]
      
      drivers/usb/gadget/udc/lpc32xx_udc.c: In function ‘udc_handle_dma_ep’:
      drivers/usb/gadget/udc/lpc32xx_udc.c:1994:14: warning: variable ‘epstatus’ set but not used [-Wunused-but-set-variable]
      
      drivers/usb/gadget/udc/lpc32xx_udc.c: In function ‘udc_handle_ep0_setup’:
      drivers/usb/gadget/udc/lpc32xx_udc.c:2200:22: warning: variable ‘wLength’ set but not used [-Wunused-but-set-variable]
      
      It is not used since commit 90fccb52 ("usb: gadget: Gadget directory cleanup - group UDC drivers")
      Signed-off-by: default avatarMao Wenan <maowenan@huawei.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      566aacaf
    • Roger Quadros's avatar
      usb: gadget: udc: core: Fix segfault if udc_bind_to_driver() for pending driver fails · 163be6ff
      Roger Quadros authored
      If a gadget driver is in the pending drivers list, a UDC
      becomes available and udc_bind_to_driver() fails, then it
      gets deleted from the pending list.
      i.e. list_del(&driver->pending) in check_pending_gadget_drivers().
      
      Then if that gadget driver is unregistered,
      usb_gadget_unregister_driver() does a list_del(&driver->pending)
      again thus causing a page fault as that list entry has been poisoned
      by the previous list_del().
      
      Fix this by using list_del_init() instead of list_del() in
      check_pending_gadget_drivers().
      
      Test case:
      
      - Make sure no UDC is available
      - modprobe g_mass_storage file=wrongfile
      - Load UDC driver so it becomes available
      	lun0: unable to open backing file: wrongfile
      - modprobe -r g_mass_storage
      
      [   60.900431] Unable to handle kernel paging request at virtual address dead000000000108
      [   60.908346] Mem abort info:
      [   60.911145]   ESR = 0x96000044
      [   60.914227]   Exception class = DABT (current EL), IL = 32 bits
      [   60.920162]   SET = 0, FnV = 0
      [   60.923217]   EA = 0, S1PTW = 0
      [   60.926354] Data abort info:
      [   60.929228]   ISV = 0, ISS = 0x00000044
      [   60.933058]   CM = 0, WnR = 1
      [   60.936011] [dead000000000108] address between user and kernel address ranges
      [   60.943136] Internal error: Oops: 96000044 [#1] PREEMPT SMP
      [   60.948691] Modules linked in: g_mass_storage(-) usb_f_mass_storage libcomposite xhci_plat_hcd xhci_hcd usbcore ti_am335x_adc kfifo_buf omap_rng cdns3 rng_core udc_core crc32_ce xfrm_user crct10dif_ce snd_so6
      [   60.993995] Process modprobe (pid: 834, stack limit = 0x00000000c2aebc69)
      [   61.000765] CPU: 0 PID: 834 Comm: modprobe Not tainted 4.19.59-01963-g065f42a60499 #92
      [   61.008658] Hardware name: Texas Instruments SoC (DT)
      [   61.014472] pstate: 60000005 (nZCv daif -PAN -UAO)
      [   61.019253] pc : usb_gadget_unregister_driver+0x7c/0x108 [udc_core]
      [   61.025503] lr : usb_gadget_unregister_driver+0x30/0x108 [udc_core]
      [   61.031750] sp : ffff00001338fda0
      [   61.035049] x29: ffff00001338fda0 x28: ffff800846d40000
      [   61.040346] x27: 0000000000000000 x26: 0000000000000000
      [   61.045642] x25: 0000000056000000 x24: 0000000000000800
      [   61.050938] x23: ffff000008d7b0d0 x22: ffff0000088b07c8
      [   61.056234] x21: ffff000001100000 x20: ffff000002020260
      [   61.061530] x19: ffff0000010ffd28 x18: 0000000000000000
      [   61.066825] x17: 0000000000000000 x16: 0000000000000000
      [   61.072121] x15: 0000000000000000 x14: 0000000000000000
      [   61.077417] x13: ffff000000000000 x12: ffffffffffffffff
      [   61.082712] x11: 0000000000000030 x10: 7f7f7f7f7f7f7f7f
      [   61.088008] x9 : fefefefefefefeff x8 : 0000000000000000
      [   61.093304] x7 : ffffffffffffffff x6 : 000000000000ffff
      [   61.098599] x5 : 8080000000000000 x4 : 0000000000000000
      [   61.103895] x3 : ffff000001100020 x2 : ffff800846d40000
      [   61.109190] x1 : dead000000000100 x0 : dead000000000200
      [   61.114486] Call trace:
      [   61.116922]  usb_gadget_unregister_driver+0x7c/0x108 [udc_core]
      [   61.122828]  usb_composite_unregister+0x10/0x18 [libcomposite]
      [   61.128643]  msg_cleanup+0x18/0xfce0 [g_mass_storage]
      [   61.133682]  __arm64_sys_delete_module+0x17c/0x1f0
      [   61.138458]  el0_svc_common+0x90/0x158
      [   61.142192]  el0_svc_handler+0x2c/0x80
      [   61.145926]  el0_svc+0x8/0xc
      [   61.148794] Code: eb03003f d10be033 54ffff21 a94d0281 (f9000420)
      [   61.154869] ---[ end trace afb22e9b637bd9a7 ]---
      Segmentation fault
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      163be6ff
    • Nishka Dasgupta's avatar
      usb: dwc3: st: Add of_dev_put() in probe function · bceb418b
      Nishka Dasgupta authored
      In function st_dwc3_probe, variable child_pdev takes the value returned
      by of_find_device_by_node, which gets a device pointer but does not put
      it. If child_pdev is not put before the probe function returns, it may
      cause a reference leak. Hence put child_pdev after its last usage.
      Issue found with Coccinelle.
      Reviewed-by: default avatarPatrice Chotard <patrice.chotard@st.com>
      Signed-off-by: default avatarNishka Dasgupta <nishkadg.linux@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      bceb418b
    • Nishka Dasgupta's avatar
      usb: dwc3: st: Add of_node_put() before return in probe function · e36721b9
      Nishka Dasgupta authored
      The local variable child in the function st_dwc3_probe takes the return
      value of of_get_child_by_name, which gets a node and does not put it. If
      the function returns without releasing child, this could cause a memory
      error. Hence put child as soon as there is no more use for it. Also
      create a new label, err_node_put, just before label undo_softreset; so
      that err_node_put puts child. In between initialisation of child and its
      first put, modify all statements that go to undo_softreset to now go to
      err_node_put instead, from where they can fall through to
      undo_softreset.
      Issue found with Coccinelle.
      Reviewed-by: default avatarPatrice Chotard <patrice.chotard@st.com>
      Signed-off-by: default avatarNishka Dasgupta <nishkadg.linux@gmail.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      e36721b9
    • Roger Quadros's avatar
      usb: dwc3: don't set gadget->is_otg flag · c09b73cf
      Roger Quadros authored
      This reverts
      commit 6a4290cc ("usb: dwc3: gadget: set the OTG flag in dwc3 gadget driver.")
      
      We don't yet support any of the OTG mechanisms (HNP/SRP/ADP)
      and are not setting gadget->otg_caps, so don't set gadget->is_otg
      flag.
      
      If we do then we end up publishing a OTG1.0 descriptor in
      the gadget descriptor which causes device enumeration to fail
      if we are connected to a host with CONFIG_USB_OTG enabled.
      
      Host side log without this patch
      
      [   96.720453] usb 1-1: new high-speed USB device number 2 using xhci-hcd
      [   96.901391] usb 1-1: Dual-Role OTG device on non-HNP port
      [   96.907552] usb 1-1: set a_alt_hnp_support failed: -32
      [   97.060447] usb 1-1: new high-speed USB device number 3 using xhci-hcd
      [   97.241378] usb 1-1: Dual-Role OTG device on non-HNP port
      [   97.247536] usb 1-1: set a_alt_hnp_support failed: -32
      [   97.253606] usb usb1-port1: attempt power cycle
      [   97.960449] usb 1-1: new high-speed USB device number 4 using xhci-hcd
      [   98.141383] usb 1-1: Dual-Role OTG device on non-HNP port
      [   98.147540] usb 1-1: set a_alt_hnp_support failed: -32
      [   98.300453] usb 1-1: new high-speed USB device number 5 using xhci-hcd
      [   98.481391] usb 1-1: Dual-Role OTG device on non-HNP port
      [   98.487545] usb 1-1: set a_alt_hnp_support failed: -32
      [   98.493532] usb usb1-port1: unable to enumerate USB device
      Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
      Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
      c09b73cf
  5. 22 Aug, 2019 1 commit
  6. 21 Aug, 2019 6 commits
  7. 19 Aug, 2019 1 commit
  8. 18 Aug, 2019 8 commits