lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 069/545] usb: dwc3: gadget: refactor dwc3_repare_one_trb
    Date
    From: Michael Grzeschik <m.grzeschik@pengutronix.de>

    commit 23385cec5f354794dadced7f28c31da7ae3eb54c upstream.

    The function __dwc3_prepare_one_trb has many parameters. Since it is
    only used in dwc3_prepare_one_trb there is no point in keeping the
    function. We merge both functions and get rid of the big list of
    parameters.

    Fixes: 40d829fb2ec6 ("usb: dwc3: gadget: Correct ISOC DATA PIDs for short packets")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Link: https://lore.kernel.org/r/20220704141812.1532306-2-m.grzeschik@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/usb/dwc3/gadget.c | 92 ++++++++++++++++++++--------------------------
    1 file changed, 40 insertions(+), 52 deletions(-)

    --- a/drivers/usb/dwc3/gadget.c
    +++ b/drivers/usb/dwc3/gadget.c
    @@ -970,17 +970,49 @@ static u32 dwc3_calc_trbs_left(struct dw
    return trbs_left;
    }

    -static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
    - dma_addr_t dma, unsigned int length, unsigned int chain,
    - unsigned int node, unsigned int stream_id,
    - unsigned int short_not_ok, unsigned int no_interrupt,
    - unsigned int is_last, bool must_interrupt)
    +/**
    + * dwc3_prepare_one_trb - setup one TRB from one request
    + * @dep: endpoint for which this request is prepared
    + * @req: dwc3_request pointer
    + * @trb_length: buffer size of the TRB
    + * @chain: should this TRB be chained to the next?
    + * @node: only for isochronous endpoints. First TRB needs different type.
    + * @use_bounce_buffer: set to use bounce buffer
    + * @must_interrupt: set to interrupt on TRB completion
    + */
    +static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
    + struct dwc3_request *req, unsigned int trb_length,
    + unsigned int chain, unsigned int node, bool use_bounce_buffer,
    + bool must_interrupt)
    {
    + struct dwc3_trb *trb;
    + dma_addr_t dma;
    + unsigned int stream_id = req->request.stream_id;
    + unsigned int short_not_ok = req->request.short_not_ok;
    + unsigned int no_interrupt = req->request.no_interrupt;
    + unsigned int is_last = req->request.is_last;
    struct dwc3 *dwc = dep->dwc;
    struct usb_gadget *gadget = dwc->gadget;
    enum usb_device_speed speed = gadget->speed;

    - trb->size = DWC3_TRB_SIZE_LENGTH(length);
    + if (use_bounce_buffer)
    + dma = dep->dwc->bounce_addr;
    + else if (req->request.num_sgs > 0)
    + dma = sg_dma_address(req->start_sg);
    + else
    + dma = req->request.dma;
    +
    + trb = &dep->trb_pool[dep->trb_enqueue];
    +
    + if (!req->trb) {
    + dwc3_gadget_move_started_request(req);
    + req->trb = trb;
    + req->trb_dma = dwc3_trb_dma_offset(dep, trb);
    + }
    +
    + req->num_trbs++;
    +
    + trb->size = DWC3_TRB_SIZE_LENGTH(trb_length);
    trb->bpl = lower_32_bits(dma);
    trb->bph = upper_32_bits(dma);

    @@ -1020,10 +1052,10 @@ static void __dwc3_prepare_one_trb(struc
    unsigned int mult = 2;
    unsigned int maxp = usb_endpoint_maxp(ep->desc);

    - if (length <= (2 * maxp))
    + if (trb_length <= (2 * maxp))
    mult--;

    - if (length <= maxp)
    + if (trb_length <= maxp)
    mult--;

    trb->size |= DWC3_TRB_SIZE_PCM1(mult);
    @@ -1092,50 +1124,6 @@ static void __dwc3_prepare_one_trb(struc
    trace_dwc3_prepare_trb(dep, trb);
    }

    -/**
    - * dwc3_prepare_one_trb - setup one TRB from one request
    - * @dep: endpoint for which this request is prepared
    - * @req: dwc3_request pointer
    - * @trb_length: buffer size of the TRB
    - * @chain: should this TRB be chained to the next?
    - * @node: only for isochronous endpoints. First TRB needs different type.
    - * @use_bounce_buffer: set to use bounce buffer
    - * @must_interrupt: set to interrupt on TRB completion
    - */
    -static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
    - struct dwc3_request *req, unsigned int trb_length,
    - unsigned int chain, unsigned int node, bool use_bounce_buffer,
    - bool must_interrupt)
    -{
    - struct dwc3_trb *trb;
    - dma_addr_t dma;
    - unsigned int stream_id = req->request.stream_id;
    - unsigned int short_not_ok = req->request.short_not_ok;
    - unsigned int no_interrupt = req->request.no_interrupt;
    - unsigned int is_last = req->request.is_last;
    -
    - if (use_bounce_buffer)
    - dma = dep->dwc->bounce_addr;
    - else if (req->request.num_sgs > 0)
    - dma = sg_dma_address(req->start_sg);
    - else
    - dma = req->request.dma;
    -
    - trb = &dep->trb_pool[dep->trb_enqueue];
    -
    - if (!req->trb) {
    - dwc3_gadget_move_started_request(req);
    - req->trb = trb;
    - req->trb_dma = dwc3_trb_dma_offset(dep, trb);
    - }
    -
    - req->num_trbs++;
    -
    - __dwc3_prepare_one_trb(dep, trb, dma, trb_length, chain, node,
    - stream_id, short_not_ok, no_interrupt, is_last,
    - must_interrupt);
    -}
    -
    static bool dwc3_needs_extra_trb(struct dwc3_ep *dep, struct dwc3_request *req)
    {
    unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc);

    \
     
     \ /
      Last update: 2022-08-19 17:55    [W:4.038 / U:0.804 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site