mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 18:21:49 +00:00
usb: dwc3: ep0: Add chained TRB support
Add chained TRB support to ep0. Now TRB's can be chained just by invoking _dwc3_ep0_start_trans_ with 'chain' parameter set to true. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
368ca113ca
commit
2abd9d5fa6
@ -70,7 +70,10 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
|
||||
return 0;
|
||||
}
|
||||
|
||||
trb = dwc->ep0_trb;
|
||||
trb = &dwc->ep0_trb[dep->free_slot];
|
||||
|
||||
if (chain)
|
||||
dep->free_slot++;
|
||||
|
||||
trb->bpl = lower_32_bits(buf_dma);
|
||||
trb->bph = upper_32_bits(buf_dma);
|
||||
@ -78,10 +81,17 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
|
||||
trb->ctrl = type;
|
||||
|
||||
trb->ctrl |= (DWC3_TRB_CTRL_HWO
|
||||
| DWC3_TRB_CTRL_LST
|
||||
| DWC3_TRB_CTRL_IOC
|
||||
| DWC3_TRB_CTRL_ISP_IMI);
|
||||
|
||||
if (chain)
|
||||
trb->ctrl |= DWC3_TRB_CTRL_CHN;
|
||||
else
|
||||
trb->ctrl |= (DWC3_TRB_CTRL_IOC
|
||||
| DWC3_TRB_CTRL_LST);
|
||||
|
||||
if (chain)
|
||||
return 0;
|
||||
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
params.param0 = upper_32_bits(dwc->ep0_trb_addr);
|
||||
params.param1 = lower_32_bits(dwc->ep0_trb_addr);
|
||||
|
@ -2687,7 +2687,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
||||
goto err0;
|
||||
}
|
||||
|
||||
dwc->ep0_trb = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ep0_trb),
|
||||
dwc->ep0_trb = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ep0_trb) * 2,
|
||||
&dwc->ep0_trb_addr, GFP_KERNEL);
|
||||
if (!dwc->ep0_trb) {
|
||||
dev_err(dwc->dev, "failed to allocate ep0 trb\n");
|
||||
|
Loading…
Reference in New Issue
Block a user