usb: dwc3: gadget: Let GSI ep ops allocate TRBs for GSI eps

The TRBs for GSI endpoints are allocated by the GSI ep ops.
The TRB pool allocated in the alloc_trb_pool is never used
and never freed leading to a dangling mapping in the IOMMU.
Fix this by freeing up the allocated TRB pool as part of
endpoint initialization.

Change-Id: Ia0f7b8725f5206c3c52db8017770b855361b0751
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
This commit is contained in:
Sriharsha Allenki 2020-03-03 14:14:01 +05:30 • committed by Gerrit - the friendly Code Review server
commit 92f0211c73

View file

@ -2623,7 +2623,6 @@ static const struct usb_gadget_ops dwc3_gadget_ops = {
#define NUM_GSI_OUT_EPS 1
#define NUM_GSI_IN_EPS 2
static int dwc3_gadget_init_control_endpoint(struct dwc3_ep *dep)
{
struct dwc3 *dwc = dep->dwc;
@ -2727,12 +2726,16 @@ static int dwc3_gadget_init_endpoints(struct dwc3 *dwc, u8 total)
/* Reserve EPs at the end for GSI */
if (!dep->direction && num >
out_count - NUM_GSI_OUT_EPS - 1) {
/* Allocation of TRBs are handled by GSI EP ops. */
dwc3_free_trb_pool(dep);
idx = num - (out_count - NUM_GSI_OUT_EPS - 1);
snprintf(dep->name, sizeof(dep->name), "gsi-epout%d",
idx);
dep->gsi = true;
} else if (dep->direction && num >
in_count - NUM_GSI_IN_EPS - 1) {
/* Allocation of TRBs are handled by GSI EP ops. */
dwc3_free_trb_pool(dep);
idx = num - (in_count - NUM_GSI_IN_EPS - 1);
snprintf(dep->name, sizeof(dep->name), "gsi-epin%d",
idx);