Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92f0211c authored by Sriharsha Allenki's avatar Sriharsha Allenki Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarSriharsha Allenki <sallenki@codeaurora.org>
parent a5cc1057
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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);