mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3] usb: dwc3: gadget: Refine the logic for resizing Tx FIFOs
@ 2024-09-17 10:13 Akash Kumar
  2024-09-17 22:40 ` Thinh Nguyen
  0 siblings, 1 reply; 5+ messages in thread
From: Akash Kumar @ 2024-09-17 10:13 UTC (permalink / raw)
  To: Thinh Nguyen, Greg Kroah-Hartman, Jing Leng, Felipe Balbi,
	Jack Pham, kernel, Wesley Cheng, Laurent Pinchart, Daniel Scally
  Cc: Vijayavardhan Vennapusa, Krishna Kurapati, linux-usb,
	linux-kernel, Akash Kumar

The current logic is rigid, setting num_fifos to fixed values:

3 for any maxburst greater than 1.
tx_fifo_resize_max_num for maxburst greater than 6.
Additionally, it did not differentiate much between bulk and
isochronous transfers, applying similar logic to both.

The new logic is more dynamic and tailored to the specific needs of
bulk and isochronous transfers:

Bulk Transfers: Ensures that num_fifos is optimized by considering
both the maxburst value and the maximum allowed number of FIFOs
based on the DT property tx_fifo_resize_max_num and the maximum
packet multiplier for HS.

Isochronous Transfers: Ensures that num_fifos is sufficient by
considering the maximum packet multiplier for HS and maxburst for SS,
along with a constraint with the DT property tx_fifo_resize_max_num.

This change aims to optimize the allocation of Tx FIFOs for both bulk
and isochronous endpoints, potentially improving data transfer
efficiency and overall performance. It also enhances support for all
use cases, which can be tweaked with DT parameters and the
endpoint’s maxburst and maxpacket

Signed-off-by: Akash Kumar <quic_akakum@quicinc.com>
---
 Changes for v3:
 Redefine logic for resizing tx fifos,added check based on
 operating speed and used maxp for HS and maxburst for SS
 and defined max allocation based on dt property.

 Changes for v2:
 Redefine logic for resizing tx fifos, handled fifo based on
 minimum of maxp and maxburts.

 Changes for v1:
 Added additional condition to allocate tx fifo for hs isoc
 eps, keeping the other resize logic same.
---
 drivers/usb/dwc3/gadget.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 89fc690fdf34..7557bd0053a7 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -778,15 +778,19 @@ static int dwc3_gadget_resize_tx_fifos(struct dwc3_ep *dep)
 
 	ram1_depth = DWC3_RAM1_DEPTH(dwc->hwparams.hwparams7);
 
-	if ((dep->endpoint.maxburst > 1 &&
-	     usb_endpoint_xfer_bulk(dep->endpoint.desc)) ||
-	    usb_endpoint_xfer_isoc(dep->endpoint.desc))
-		num_fifos = 3;
+	if (dwc->gadget->speed <= USB_SPEED_HIGH &&
+	    (usb_endpoint_xfer_bulk(dep->endpoint.desc) ||
+	     usb_endpoint_xfer_isoc(dep->endpoint.desc)))
+		num_fifos = min_t(unsigned int,
+				  usb_endpoint_maxp_mult(dep->endpoint.desc) + 1,
+				  dwc->tx_fifo_resize_max_num);
 
-	if (dep->endpoint.maxburst > 6 &&
+	if (dwc->gadget->speed > USB_SPEED_HIGH &&
 	    (usb_endpoint_xfer_bulk(dep->endpoint.desc) ||
-	     usb_endpoint_xfer_isoc(dep->endpoint.desc)) && DWC3_IP_IS(DWC31))
-		num_fifos = dwc->tx_fifo_resize_max_num;
+	     usb_endpoint_xfer_isoc(dep->endpoint.desc)))
+		num_fifos = min_t(unsigned int,
+				  dep->endpoint.maxburst,
+				  dwc->tx_fifo_resize_max_num);
 
 	/* FIFO size for a single buffer */
 	fifo = dwc3_gadget_calc_tx_fifo_size(dwc, 1);
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-09-27 15:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-17 10:13 [PATCH v3] usb: dwc3: gadget: Refine the logic for resizing Tx FIFOs Akash Kumar
2024-09-17 22:40 ` Thinh Nguyen
2024-09-18  9:43   ` AKASH KUMAR
2024-09-26 22:16     ` Thinh Nguyen
2024-09-27 15:25       ` AKASH KUMAR

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®