lkml.org 
[lkml]   [2017]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 002/164] usb: gadget: core: Fix ->udc_set_speed() speed handling
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Roger Quadros <rogerq@ti.com>

    commit a4f0927ef588cf62bb864707261482c874352942 upstream.

    Currently UDC core calls ->udc_set_speed() with the speed parameter
    containing the maximum speed supported by the gadget function
    driver. This might very well be more than that supported by the
    UDC controller driver.

    Select the lesser of the 2 speeds so both UDC and gadget function
    driver are operating within limits.

    This fixes PHY Erratic errors and 2 second enumeration delay on
    TI's AM437x platforms.

    Fixes: 6099eca796ae ("usb: gadget: core: introduce ->udc_set_speed() method")
    Reported-by: Dylan Howey <Dylan.Howey@tennantco.com>
    Signed-off-by: Roger Quadros <rogerq@ti.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/gadget/udc/core.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    --- a/drivers/usb/gadget/udc/core.c
    +++ b/drivers/usb/gadget/udc/core.c
    @@ -1080,8 +1080,12 @@ static inline void usb_gadget_udc_stop(s
    static inline void usb_gadget_udc_set_speed(struct usb_udc *udc,
    enum usb_device_speed speed)
    {
    - if (udc->gadget->ops->udc_set_speed)
    - udc->gadget->ops->udc_set_speed(udc->gadget, speed);
    + if (udc->gadget->ops->udc_set_speed) {
    + enum usb_device_speed s;
    +
    + s = min(speed, udc->gadget->max_speed);
    + udc->gadget->ops->udc_set_speed(udc->gadget, s);
    + }
    }

    /**

    \
     
     \ /
      Last update: 2017-12-12 15:10    [W:3.341 / U:1.536 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site