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

Commit 8df9b9d5 authored by Ajay Agarwal's avatar Ajay Agarwal Committed by Mayank Rana
Browse files

USB: dwc3: gadget: Fix TxFIFO resizing logic



The TxFIFO RAM start address for some USB controller
might be non-zero. The current FIFO resizing logic in
place always considers that this start address is 0x0000
and writes the RAM start address for subsequent TxFIFOs
with the last FIFO depth only, leading to the controller
not functioning properly.

To make the controller work, start address of GTXFIFOSIZ(#n)
should be written with the start address of GTXFIFOSIZ(0)
+ last FIFO depth. Fix the resizing logic accordingly.

Change-Id: Ia83edef7165b980828f2a43832493be2349ae0dc
Signed-off-by: default avatarAjay Agarwal <ajaya@codeaurora.org>
parent 6628ed00
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -230,7 +230,8 @@ int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc, struct dwc3_ep *dep)
	tmp = ((max_packet + mdwidth) * mult) + mdwidth;
	fifo_size = DIV_ROUND_UP(tmp, mdwidth);
	dep->fifo_depth = fifo_size;
	fifo_size |= (dwc->last_fifo_depth << 16);
	fifo_size |= (dwc3_readl(dwc->regs, DWC3_GTXFIFOSIZ(0)) & 0xffff0000)
						+ (dwc->last_fifo_depth << 16);
	dwc->last_fifo_depth += (fifo_size & 0xffff);

	dev_dbg(dwc->dev, "%s ep_num:%d last_fifo_depth:%04x fifo_depth:%d\n",