RE: [PATCH] usb: dwc3: gadget: allocate 3 packets for bulk and isoc endpoints

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-owner@xxxxxxxxxxxxxxx] On Behalf Of Felipe Balbi
> Sent: Monday, February 06, 2012 6:26 AM
> 
> Those transfer types are generally high bandwidth, so we
> want to optimize transfers with those endpoints.
> 
> For that, databook suggests allocating 3 * wMaxPacketSize
> of FIFO. Let's do that.
> 
> Signed-off-by: Felipe Balbi <balbi@xxxxxx>
> ---
> 
> This will be sent to v3.4 merge window, unless someone
> has any concerns.

Hi Felipe,

I have concerns :)

>  drivers/usb/dwc3/gadget.c |   20 ++++++++++++++++++--
>  1 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 1f64e7c..0542b96 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -172,6 +172,7 @@ int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc)
>  	for (num = 0; num < DWC3_ENDPOINTS_NUM; num++) {
>  		struct dwc3_ep	*dep = dwc->eps[num];
>  		int		fifo_number = dep->number >> 1;
> +		int		mult = 1;
>  		int		tmp;
> 
>  		if (!(dep->number & 1))
> @@ -180,11 +181,26 @@ int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc)
>  		if (!(dep->flags & DWC3_EP_ENABLED))
>  			continue;
> 
> -		tmp = dep->endpoint.maxpacket;
> -		tmp += mdwidth;
> +		if (usb_endpoint_xfer_bulk(dep->desc)
> +				|| usb_endpoint_xfer_isoc(dep->desc))
> +			mult = 3;
> +
> +		/*
> +		 * REVISIT: the following assumes we will always enough space
> +		 * available on the FIFO RAM for all possible usecases. Make
> +		 * sure that's true somehow and change FIFO allocation
> +		 * accordingly.
> +		 *
> +		 * If we have Bulk or Isochronous endpoints, we want
> +		 * them to be able to be very, very fast. So we're giving
> +		 * those endpoints a fifo_size which is enough for 3 full
> +		 * packets
> +		 */

This breaks the HAPS platform, and any other platform which doesn't have
enough FIFO RAM to support this. I really think you must implement this
properly (checking for enough RAM) before you add it to the driver.

But I really think trying to do things like this automatically in the
driver is misguided. This should be part of platform data or device tree
instead, IMHO.

-- 
Paul

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux