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: 40d829fb2e
("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>
This commit is contained in:
parent
5ea5746dfa
commit
23385cec5f
|
@ -1183,17 +1183,49 @@ static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep)
|
||||||
return trbs_left;
|
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,
|
* dwc3_prepare_one_trb - setup one TRB from one request
|
||||||
unsigned int node, unsigned int stream_id,
|
* @dep: endpoint for which this request is prepared
|
||||||
unsigned int short_not_ok, unsigned int no_interrupt,
|
* @req: dwc3_request pointer
|
||||||
unsigned int is_last, bool must_interrupt)
|
* @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 dwc3 *dwc = dep->dwc;
|
||||||
struct usb_gadget *gadget = dwc->gadget;
|
struct usb_gadget *gadget = dwc->gadget;
|
||||||
enum usb_device_speed speed = gadget->speed;
|
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->bpl = lower_32_bits(dma);
|
||||||
trb->bph = upper_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 mult = 2;
|
||||||
unsigned int maxp = usb_endpoint_maxp(ep->desc);
|
unsigned int maxp = usb_endpoint_maxp(ep->desc);
|
||||||
|
|
||||||
if (length <= (2 * maxp))
|
if (trb_length <= (2 * maxp))
|
||||||
mult--;
|
mult--;
|
||||||
|
|
||||||
if (length <= maxp)
|
if (trb_length <= maxp)
|
||||||
mult--;
|
mult--;
|
||||||
|
|
||||||
trb->size |= DWC3_TRB_SIZE_PCM1(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);
|
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)
|
static bool dwc3_needs_extra_trb(struct dwc3_ep *dep, struct dwc3_request *req)
|
||||||
{
|
{
|
||||||
unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc);
|
unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc);
|
||||||
|
|
Loading…
Reference in New Issue