From: Jon Hunter <jonathanh@nvidia.com>
To: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>,
Mathias Nyman <mathias.nyman@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Thierry Reding <thierry.reding@gmail.com>,
JC Kuo <jckuo@nvidia.com>, Vinod Koul <vkoul@kernel.org>,
Kishon Vijay Abraham I <kishon@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>
Cc: linux-usb@vger.kernel.org, linux-tegra@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH 3/5] phy: tegra: xusb: Fix ordering issue when switching roles on USB2 ports
Date: Tue, 13 Jan 2026 16:36:47 +0000 [thread overview]
Message-ID: <85c760b1-2279-44f9-8dac-77cbf6a4835b@nvidia.com> (raw)
In-Reply-To: <c3f54ffb-cf4b-47ae-871a-6dd60b17c9cb@tecnico.ulisboa.pt>
On 13/01/2026 15:10, Diogo Ivo wrote:
...
>>>>> - if (tegra->host_mode)
>>>>> - phy_set_mode_ext(phy, PHY_MODE_USB_OTG, USB_ROLE_HOST);
>>>>> - else
>>>>> - phy_set_mode_ext(phy, PHY_MODE_USB_OTG, USB_ROLE_NONE);
>>>>> + if (tegra->host_mode) {
>>>>> + if (!tegra_xusb_usb2_port_wait_role_none(tegra->padctl,
>>>>> + tegra->otg_usb2_port))
>>>>> + return;
>>>>> + role = USB_ROLE_HOST;
>>>>> + }
>>>>> +
>>>>> + mutex_lock(&tegra->lock);
>>>>> + phy_set_mode_ext(phy, PHY_MODE_USB_OTG, role);
>>>>> mutex_unlock(&tegra->lock);
>>>>
>>>> I am trying to understand why you opted to implement it this way
>>>> around and not add the wait loop after setting to the mode to
>>>> USB_ROLE_NONE in the original code all within the context of the mutex?
>>>
>>> I did that to minimize the amount of time we wait while holding the
>>> mutex, as we can now possibly wait a significant amount of time for the
>>> role switch. Is this an unneccessary optimization?
>>
>> Do you mean it will be longer than a few 100us?
>
> Currently the worst case in wait_role_none() is around 300us but again
> this is simply because I chose the values with no criteria except that
> in my testing they have worked thus far. Do you have access to any
> internal documentation where the transition length is documented?
>
> In any case I think that the underlying principle of minimizing the time
> we hold the mutex is solid, no?
Yes, but it was unclear to me if there could be a case where we are
waiting for USB_ROLE_NONE but we have already transitioned to host. May
be that will never happen, but it was not clear.
Jon
--
nvpublic
next prev parent reply other threads:[~2026-01-13 16:36 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-04 21:27 [PATCH 0/5] Fixes to Tegra USB role switching and Smaug USB role switching enablement Diogo Ivo
2025-12-04 21:27 ` [PATCH 1/5] usb: host: tegra: Remove redundant pm_runtime_mark_last_busy() call Diogo Ivo
2025-12-07 10:37 ` Diogo Ivo
2025-12-04 21:27 ` [PATCH 2/5] phy: tegra: xusb: Fix USB2 port regulator disable logic Diogo Ivo
2025-12-24 7:27 ` Vinod Koul
2026-01-13 13:30 ` Diogo Ivo
2026-01-13 12:01 ` Jon Hunter
2026-01-13 13:59 ` Diogo Ivo
2026-01-13 14:42 ` Jon Hunter
2026-01-13 15:05 ` Diogo Ivo
2025-12-04 21:27 ` [PATCH 3/5] phy: tegra: xusb: Fix ordering issue when switching roles on USB2 ports Diogo Ivo
2026-01-13 11:35 ` Jon Hunter
2026-01-13 11:44 ` Jon Hunter
2026-01-13 13:59 ` Diogo Ivo
2026-01-13 11:56 ` Jon Hunter
2026-01-13 14:05 ` Diogo Ivo
2026-01-13 14:48 ` Jon Hunter
2026-01-13 15:10 ` Diogo Ivo
2026-01-13 16:36 ` Jon Hunter [this message]
2026-01-15 11:06 ` Diogo Ivo
2026-01-19 14:31 ` Jon Hunter
2025-12-04 21:27 ` [PATCH 4/5] arm64: tegra: smaug: Complete and enable tegra-udc node Diogo Ivo
2025-12-04 21:27 ` [PATCH 5/5] arm64: tegra: smaug: Add usb-role-switch support Diogo Ivo
2026-01-12 22:03 ` Jon Hunter
2026-01-13 14:20 ` Diogo Ivo
2026-01-13 14:49 ` Jon Hunter
2026-01-13 15:11 ` Diogo Ivo
2025-12-05 22:36 ` [PATCH 0/5] Fixes to Tegra USB role switching and Smaug USB role switching enablement Rob Herring
2026-01-13 10:58 ` Jon Hunter
2026-01-12 13:46 ` Diogo Ivo
2026-01-17 0:25 ` (subset) " Thierry Reding
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=85c760b1-2279-44f9-8dac-77cbf6a4835b@nvidia.com \
--to=jonathanh@nvidia.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=diogo.ivo@tecnico.ulisboa.pt \
--cc=gregkh@linuxfoundation.org \
--cc=jckuo@nvidia.com \
--cc=kishon@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=robh@kernel.org \
--cc=thierry.reding@gmail.com \
--cc=vkoul@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox