usb: dwc3: gadget: refactor dwc3_repare_one_trb
authorMichael Grzeschik <m.grzeschik@pengutronix.de>
Mon, 4 Jul 2022 14:18:11 +0000 (16:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:22:59 +0000 (14:22 +0200)
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

index e534b98..65aa092 100644 (file)
@@ -1169,17 +1169,49 @@ static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep)
        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);
 
@@ -1219,10 +1251,10 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
                                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);
@@ -1291,50 +1323,6 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
        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);