1. 28 Aug, 2019 11 commits
    • 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
  2. 12 Aug, 2019 10 commits
  3. 09 Aug, 2019 14 commits
  4. 05 Aug, 2019 1 commit
  5. 04 Aug, 2019 4 commits