lkml.org 
[lkml]   [2017]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 136/370] usb: dwc3: ep0: explicitly call dwc3_ep0_prepare_one_trb()
    3.16.42-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: Felipe Balbi <felipe.balbi@linux.intel.com>

    commit 19ec31230eb3084431bc2e565fd085f79f564274 upstream.

    Let's call dwc3_ep0_prepare_one_trb() explicitly
    because there are occasions where we will need more
    than one TRB to handle an EP0 transfer.

    A follow-up patch will fix one bug related to
    multiple-TRB Data Phases when it comes to
    mapping/unmapping requests for DMA.

    Reported-by: Janusz Dziedzic <januszx.dziedzic@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16:
    - dwc3_ep0_prepare_one_trb() and dwc3_ep0_start_trans() don't take a
    'chain' parameter
    - Some of the call sites don't exist here
    - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/usb/dwc3/ep0.c | 28 +++++++++++++++-------------
    1 file changed, 15 insertions(+), 13 deletions(-)

    --- a/drivers/usb/dwc3/ep0.c
    +++ b/drivers/usb/dwc3/ep0.c
    @@ -75,8 +75,7 @@ static void dwc3_ep0_prepare_one_trb(str
    | DWC3_TRB_CTRL_ISP_IMI);
    }

    -static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
    - u32 len, u32 type)
    +static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum)
    {
    struct dwc3_gadget_ep_cmd_params params;
    struct dwc3_ep *dep;
    @@ -86,8 +85,6 @@ static int dwc3_ep0_start_trans(struct d
    if (dep->flags & DWC3_EP_BUSY)
    return 0;

    - dwc3_ep0_prepare_one_trb(dwc, epnum, buf_dma, len, type);
    -
    memset(&params, 0, sizeof(params));
    params.param0 = upper_32_bits(dwc->ep0_trb_addr);
    params.param1 = lower_32_bits(dwc->ep0_trb_addr);
    @@ -287,8 +284,9 @@ void dwc3_ep0_out_start(struct dwc3 *dwc
    {
    int ret;

    - ret = dwc3_ep0_start_trans(dwc, 0, dwc->ctrl_req_addr, 8,
    + dwc3_ep0_prepare_one_trb(dwc, 0, dwc->ctrl_req_addr, 8,
    DWC3_TRBCTL_CONTROL_SETUP);
    + ret = dwc3_ep0_start_trans(dwc, 0);
    WARN_ON(ret < 0);
    }

    @@ -897,9 +895,10 @@ static void __dwc3_ep0_do_control_data(s
    req->direction = !!dep->number;

    if (req->request.length == 0) {
    - ret = dwc3_ep0_start_trans(dwc, dep->number,
    + dwc3_ep0_prepare_one_trb(dwc, dep->number,
    dwc->ctrl_req_addr, 0,
    DWC3_TRBCTL_CONTROL_DATA);
    + ret = dwc3_ep0_start_trans(dwc, dep->number);
    } else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket)
    && (dep->number == 0)) {
    u32 transfer_size;
    @@ -927,9 +926,10 @@ static void __dwc3_ep0_do_control_data(s
    * DWC3_EP0_BOUNCE_SIZE we will need two chained
    * TRBs to handle the transfer.
    */
    - ret = dwc3_ep0_start_trans(dwc, dep->number,
    + dwc3_ep0_prepare_one_trb(dwc, dep->number,
    dwc->ep0_bounce_addr, transfer_size,
    DWC3_TRBCTL_CONTROL_DATA);
    + ret = dwc3_ep0_start_trans(dwc, dep->number);
    } else {
    ret = usb_gadget_map_request(&dwc->gadget, &req->request,
    dep->number);
    @@ -938,8 +938,9 @@ static void __dwc3_ep0_do_control_data(s
    return;
    }

    - ret = dwc3_ep0_start_trans(dwc, dep->number, req->request.dma,
    + dwc3_ep0_prepare_one_trb(dwc, dep->number, req->request.dma,
    req->request.length, DWC3_TRBCTL_CONTROL_DATA);
    + ret = dwc3_ep0_start_trans(dwc, dep->number);
    }

    WARN_ON(ret < 0);
    @@ -953,8 +954,9 @@ static int dwc3_ep0_start_control_status
    type = dwc->three_stage_setup ? DWC3_TRBCTL_CONTROL_STATUS3
    : DWC3_TRBCTL_CONTROL_STATUS2;

    - return dwc3_ep0_start_trans(dwc, dep->number,
    + dwc3_ep0_prepare_one_trb(dwc, dep->number,
    dwc->ctrl_req_addr, 0, type);
    + return dwc3_ep0_start_trans(dwc, dep->number);
    }

    static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
    \
     
     \ /
      Last update: 2017-03-10 14:57    [W:4.114 / U:0.312 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site