From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
To: Akash Kumar <quic_akakum@quicinc.com>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jing Leng <jleng@ambarella.com>, Felipe Balbi <balbi@kernel.org>,
Jack Pham <quic_jackp@quicinc.com>,
"kernel@quicinc.com" <kernel@quicinc.com>,
Wesley Cheng <quic_wcheng@quicinc.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Daniel Scally <dan.scally@ideasonboard.com>,
Vijayavardhan Vennapusa <quic_vvreddy@quicinc.com>,
Krishna Kurapati <quic_kriskura@quicinc.com>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6] usb: dwc3: gadget: Refine the logic for resizing Tx FIFOs
Date: Thu, 17 Oct 2024 01:21:10 +0000 [thread overview]
Message-ID: <20241017012104.cfk2drajdc52tp47@synopsys.com> (raw)
In-Reply-To: <20241016111904.11375-1-quic_akakum@quicinc.com>
On Wed, Oct 16, 2024, Akash Kumar wrote:
> 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 updated logic is more flexible and specifically designed to meet
> the unique requirements of both bulk and isochronous transfers. We
> have made every effort to satisfy all needs and requirements, verified
> on our specific platform and application.
>
> Bulk Transfers: Ensures that num_fifos is optimized by considering both
> the maxburst and DT property "tx-fifo-max-num" for super speed and
> above. For high-speed and below bulk endpoints, a 2K TxFIFO allocation
> is used to meet efficient data transfer needs, considering
> FIFO-constrained platforms.
>
> Isochronous Transfers: Ensures that num_fifos is sufficient by
> considering the maximum packet multiplier for HS and below and maxburst
> for Super-speed and above eps, along with a constraint with the DT
> property "tx-fifo-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. This structured approach ensures that the appropriate number
> of FIFOs is allocated based on the endpoint type and USB speed.
>
> Signed-off-by: Akash Kumar <quic_akakum@quicinc.com>
> ---
> Changes for v6:
> The code has been refactored to replace multiple if checks with a
> switch-case structure based on the USB speed. This change improves
> readability and maintainability by clearly defining behavior for
> different USB speeds. This structured approach ensures that the
> appropriate number of FIFOs is allocated based on the endpoint type
> and USB speed.
>
> Changes for v5:
> Update Calculation for HS and below bulk and isoc eps based on
> suggestion and fixed at 2k for bulk eps considering fifo constrained
> platforms.
>
> Changes for v4:
> Updated commit message as per review comments to clarify that it has
> been tested on specific platforms only and tried best to match all
> expectations.
>
> 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 | 31 +++++++++++++++++++++++--------
> 1 file changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 10178e5eda5a..dc62d0626e53 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -771,15 +771,30 @@ 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)) ||
> + switch (dwc->gadget->speed) {
> + case USB_SPEED_SUPER_PLUS:
> + case USB_SPEED_SUPER:
Can you fix the indentations?
Should be something like this:
switch (speed) {
case SSP:
case SS:
if (...)
xxx;
break;
case HS:
if (...)
...;
default:
break;
}
Thanks,
Thinh
> + if (usb_endpoint_xfer_bulk(dep->endpoint.desc) ||
> usb_endpoint_xfer_isoc(dep->endpoint.desc))
> - num_fifos = 3;
> -
> - if (dep->endpoint.maxburst > 6 &&
> - (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;
> + num_fifos = min_t(unsigned int,
> + dep->endpoint.maxburst,
> + dwc->tx_fifo_resize_max_num);
> + break;
> + case USB_SPEED_HIGH:
> + if (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);
> + break;
> + }
> + fallthrough;
> + case USB_SPEED_FULL:
> + if (usb_endpoint_xfer_bulk(dep->endpoint.desc))
> + num_fifos = 2;
> + break;
> + default:
> + break;
> + }
>
> /* FIFO size for a single buffer */
> fifo = dwc3_gadget_calc_tx_fifo_size(dwc, 1);
> --
> 2.17.1
>
next prev parent reply other threads:[~2024-10-17 1:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 11:19 [PATCH v6] usb: dwc3: gadget: Refine the logic for resizing Tx FIFOs Akash Kumar
2024-10-17 1:21 ` Thinh Nguyen [this message]
2024-10-17 3:39 ` kernel test robot
2024-10-17 3:50 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241017012104.cfk2drajdc52tp47@synopsys.com \
--to=thinh.nguyen@synopsys.com \
--cc=balbi@kernel.org \
--cc=dan.scally@ideasonboard.com \
--cc=gregkh@linuxfoundation.org \
--cc=jleng@ambarella.com \
--cc=kernel@quicinc.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=quic_akakum@quicinc.com \
--cc=quic_jackp@quicinc.com \
--cc=quic_kriskura@quicinc.com \
--cc=quic_vvreddy@quicinc.com \
--cc=quic_wcheng@quicinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.