From: Felipe Balbi <balbi@kernel.org>
To: Andy Shevchenko <andy.shevchenko@gmail.com>,
Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Cc: USB <linux-usb@vger.kernel.org>, John Youn <John.Youn@synopsys.com>
Subject: usb: dwc3: Set default mode for dwc_usb31
Date: Fri, 27 Jul 2018 13:14:55 +0300 [thread overview]
Message-ID: <87tvolx9wg.fsf@linux.intel.com> (raw)
Hi,
Andy Shevchenko <andy.shevchenko@gmail.com> writes:
> On Fri, Jul 27, 2018 at 2:02 AM, Thinh Nguyen <Thinh.Nguyen@synopsys.com> wrote:
>> On 7/26/2018 2:59 PM, Thinh Nguyen wrote:
>>> On 7/26/2018 2:32 PM, Andy Shevchenko wrote:
>>>> On Thu, Jul 26, 2018 at 11:52 PM, Thinh Nguyen
>>>> <Thinh.Nguyen@synopsys.com> wrote:
>>>>> dwc_usb31 does not support OTG mode. If the controller supports DRD but
>>>>> the dr_mode is not specified or set to OTG, then set the mode to
>>>>> peripheral.
>>>>>
>>>>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>>>>> ---
>>>>> drivers/usb/dwc3/core.c | 8 ++++++++
>>>>> 1 file changed, 8 insertions(+)
>>>>>
>>>>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>>>>> index 21e4931d0cc0..64ba664d467c 100644
>>>>> --- a/drivers/usb/dwc3/core.c
>>>>> +++ b/drivers/usb/dwc3/core.c
>>>>> @@ -78,6 +78,14 @@ static int dwc3_get_dr_mode(struct dwc3 *dwc)
>>>>> mode = USB_DR_MODE_HOST;
>>>>> else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
>>>>> mode = USB_DR_MODE_PERIPHERAL;
>>>>> +
>>>>> + /*
>>>>> + * dwc_usb31 does not support OTG mode. If the controller
>>>>> + * supports DRD but the dr_mode is not specified or set to OTG,
>>>>> + * then set the mode to peripheral.
>>>>> + */
>>>>> + if (mode == USB_DR_MODE_OTG && dwc3_is_usb31(dwc))
>>>> shouldn't be simple
>>>>
>>>> else if (dwc3_is_usb31(...))
>>>>
>>>> ?
>>
>> Actually, no. We want to set the mode to peripheral _only_ when dr_mode
>> was not specified or set to OTG. Just checking for dwc3_is_usb31(...) is
>> not enough.
>
> How come?
>
> If I read the code correctly...
>
> When you go to default case in this switch it's possible if and only
> if you have mode _exactly_ OTG. You can't have mode unknown here
> either.
> The check is redundant and absence of else adds additional burden on
> the all the rest cases.
Look a little closer
> mode = dwc->dr_mode;
> hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
>
> switch (hw_mode) {
^^^^^^^
Switching on hw_mode, not mode.
> case DWC3_GHWPARAMS0_MODE_GADGET:
> if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) {
> dev_err(dev,
> "Controller does not support host mode.\n");
> return -EINVAL;
> }
> mode = USB_DR_MODE_PERIPHERAL;
> break;
> case DWC3_GHWPARAMS0_MODE_HOST:
> if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
> dev_err(dev,
> "Controller does not support device mode.\n");
> return -EINVAL;
> }
> mode = USB_DR_MODE_HOST;
> break;
> default:
> if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
> mode = USB_DR_MODE_HOST;
> else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
> mode = USB_DR_MODE_PERIPHERAL;
both of these are checking for Kconfig choices.
> /*
> * dwc_usb31 does not support OTG mode. If the controller
> * supports DRD but the dr_mode is not specified or set to OTG,
> * then set the mode to peripheral.
> */
> if (mode == USB_DR_MODE_OTG && dwc3_is_usb31(dwc))
^^^^^^^^^^^^^^^^^^^^^^^
making sure device_property "dr_mode" is OTG. Note if I
don't very that mode is OTG, all I know for sure is that HW
is configured for DRD operation and Kconfig enabled support
for both Host and Peripheral roles, but I have not yet
verified e.g. DeviceTree.
> mode = USB_DR_MODE_PERIPHERAL;
> }
next reply other threads:[~2018-07-27 10:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-27 10:14 Felipe Balbi [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-07-27 10:22 usb: dwc3: Set default mode for dwc_usb31 Andy Shevchenko
2018-07-27 10:08 Andy Shevchenko
2018-07-26 23:02 Thinh Nguyen
2018-07-26 21:59 Thinh Nguyen
2018-07-26 21:32 Andy Shevchenko
2018-07-26 20:52 Thinh Nguyen
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=87tvolx9wg.fsf@linux.intel.com \
--to=balbi@kernel.org \
--cc=John.Youn@synopsys.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=andy.shevchenko@gmail.com \
--cc=linux-usb@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.