All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
To: Felipe Balbi <balbi@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	Bryan O'Donoghue <pure.logic@nexus-software.ie>
Cc: John Youn <John.Youn@synopsys.com>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: Re: [PATCH] usb: dwc3: gadget: Init only available HW eps
Date: Fri, 8 Jan 2021 03:54:43 +0000	[thread overview]
Message-ID: <19b685a9-0c25-9b6c-ecaf-ffca4069182b@synopsys.com> (raw)
In-Reply-To: <cacf58e7-e131-2caa-5fb3-1af7db8270b4@synopsys.com>

Thinh Nguyen wrote:
> Hi,
>
> Felipe Balbi wrote:
>> Hi,
>>
>> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>>>>> @@ -3863,7 +3868,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
>>>>>  	 * sure we're starting from a well known location.
>>>>>  	 */
>>>>>  
>>>>> -	ret = dwc3_gadget_init_endpoints(dwc, dwc->num_eps);
>>>>> +	ret = dwc3_gadget_init_endpoints(dwc);
>>>>>  	if (ret)
>>>>>  		goto err4;
>>>> heh, looking at original commit, we used to have num_in_eps and
>>>> num_out_eps. In fact, this commit will reintroduce another problem that
>>>> Bryan tried to solve. num_eps - num_in_eps is not necessarily
>>>> num_out_eps.
>>>>
>>> From my understanding, that's not what Bryan's saying. Here's the
>>> snippet of the commit message:
>>>
>>> "
>>>     It's possible to configure RTL such that DWC_USB3_NUM_EPS is equal to
>>>     DWC_USB3_NUM_IN_EPS.
>>>
>>>     dwc3-core calculates the number of OUT endpoints as DWC_USB3_NUM minus
>>>     DWC_USB3_NUM_IN_EPS. If RTL has been configured with DWC_USB3_NUM_IN_EPS
>>>     equal to DWC_USB3_NUM then dwc3-core will calculate the number of OUT
>>>     endpoints as zero.
>>>
>>>     For example a from dwc3_core_num_eps() shows:
>>>     [    1.565000]  /usb0@f01d0000: found 8 IN and 0 OUT endpoints
>>> "
>>>
>>> He just stated that you can configure to have num_eps equals to
>>> num_in_eps. Basically it means there's no OUT physical endpoint. Not
>> no, that's not what it means. I don't have access to DWC3 documentation
>> anymore, but from what I remember every physical endpoint _can_ be
>> configured as bidirectional. In other words, DWC3_USB3_NUM_EPS ==
>> DWC3_USB3_NUM_IN_EPS could mean that every endpoint in the system is
>> bidirectional.
>>
>>> sure why you would ever want to do that because that will prevent any
>>> device from working. The reason we have DWC_USB3x_NUM_IN_EPS and
>>> DWC_USB3x_NUM_EPS exposed in the global HW param so that the driver know
>>> how many endpoints are available for each direction. If for some reason
>>> this mechanism fails, there's something fundamentally wrong in the HW
>>> configuration. We have not seen this problem, and I don't think Bryan
>>> did from his commit statement either.
>> Please confirm this internally. That was my original assumption too,
>> until Bryan pointed me to a particular section of the
>> specification. Unfortunately it's far too long ago and I can't even
>> verify documentation :-)
>>
>>>> How have you verified this patch? Did you read Bryan's commit log? This
>>>> is likely to reintroduce the problem raised by Bryan.
>>>>
>>> We verified with our FPGA HAPS with various number of endpoints. No
>>> issue is seen.
>> That's cool. Could you please make sure our understanding of this is
>> sound and won't interfere with any designs? If we modify this part of
>> the code again, I'd like to see a clear reference to a specific section
>> of the databook detailing the expected behavior :-)
>>
>> cheers
>>
> Hm... I didn't consider bidirection endpoint other than control endpoint.
>
> DWC3_USB3x_NUM_EPS specifies the number of device mode for single
> directional endpoints. A bidirectional endpoint needs 2 single
> directional endpoints, 1 IN and 1 OUT. So, if your setup uses 3
> bidirection endpoints and only those, DWC3_USB3x_NUM_EPS should be 6.
> DWC3_USB3x_NUM_IN_EPS specifies the maximum number of IN endpoint active
> at any time.
>
> However, I will have to double check and confirm internally regarding
> how to determine many endpoint would be available if bidirection
> endpoints come into play.
>
> Thanks for pointing this out. Will get back on this.
>
> Thinh
>

Ok. Just had some discussion internally. So, like you said, any endpoint
can be configured in either direction. However, we are limited to
configuring up to DWC_USB3x_NUM_IN_EPS because each IN endpoint has its
own TxFIFO while for OUT, they share the same RxFIFO. So we could have
up to DWC_USB3x_NUM_EPS number of OUT endpoints. So, the issue Bryan
attempted to address is still there.

However, the current code still has some assumption on the number of IN
and OUT endpoints, I need to think of a better solution.

Thanks,
Thinh

  reply	other threads:[~2021-01-08  3:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-05 17:20 [PATCH] usb: dwc3: gadget: Init only available HW eps Thinh Nguyen
2021-01-06  7:51 ` Felipe Balbi
2021-01-06  9:29   ` Thinh Nguyen
2021-01-07  9:33     ` Felipe Balbi
2021-01-08  2:32       ` Thinh Nguyen
2021-01-08  3:54         ` Thinh Nguyen [this message]
2021-01-08 12:23           ` Felipe Balbi
2021-01-29  0:58             ` Bryan O'Donoghue

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=19b685a9-0c25-9b6c-ecaf-ffca4069182b@synopsys.com \
    --to=thinh.nguyen@synopsys.com \
    --cc=John.Youn@synopsys.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=pure.logic@nexus-software.ie \
    --cc=stable@vger.kernel.org \
    /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.