FAILED: patch "[PATCH] usb: dwc3: gadget: refactor dwc3_repare_one_trb" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 23385cec5f354794dadced7f28c31da7ae3eb54c Mon Sep 17 00:00:00 2001
From: Michael Grzeschik <[email protected]>
Date: Mon, 4 Jul 2022 16:18:11 +0200
Subject: [PATCH] usb: dwc3: gadget: refactor dwc3_repare_one_trb
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 <[email protected]>
Signed-off-by Michael Grzeschik <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
drivers/usb/dwc3/gadget.c +40 -52
@@ -1183,17 +1183,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);
@@ -1233,10 +1265,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);
@@ -1310,50 +1342,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);