Message ID | 1645168285-126273-1-git-send-email-Sanju.Mehta@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | thunderbolt: Retain host router DP IN resources during suspend | expand |
Hi Sanjay, On Fri, Feb 18, 2022 at 01:11:25AM -0600, Sanjay R Mehta wrote: > From: Sanjay R Mehta <sanju.mehta@amd.com> > > All DP resources are released during suspend and while > resuming back DP IN resource is not available, therefore > unable to find DP pair to re-establish the DP tunnel. It should get plug event for the DP IN adapters once the router comes back from sleep. Is that not happening here?
On 2/18/2022 4:43 PM, Mika Westerberg wrote: > Hi Sanjay, > > On Fri, Feb 18, 2022 at 01:11:25AM -0600, Sanjay R Mehta wrote: >> From: Sanjay R Mehta <sanju.mehta@amd.com> >> >> All DP resources are released during suspend and while >> resuming back DP IN resource is not available, therefore >> unable to find DP pair to re-establish the DP tunnel. > > It should get plug event for the DP IN adapters once the router comes > back from sleep. Is that not happening here? Yes, plug event is not happening for the DP IN adapter after resume. The DP In resources are put into tcm->dp_resources list as part of host router enumeration. But when it resumes from sleep, there is no plug event happening for DP IN, hence DP IN resource will not be in tcm->dp_resources list. >
On Fri, Feb 18, 2022 at 07:38:23PM +0530, Sanjay R Mehta wrote: > > > On 2/18/2022 4:43 PM, Mika Westerberg wrote: > > Hi Sanjay, > > > > On Fri, Feb 18, 2022 at 01:11:25AM -0600, Sanjay R Mehta wrote: > >> From: Sanjay R Mehta <sanju.mehta@amd.com> > >> > >> All DP resources are released during suspend and while > >> resuming back DP IN resource is not available, therefore > >> unable to find DP pair to re-establish the DP tunnel. > > > > It should get plug event for the DP IN adapters once the router comes > > back from sleep. Is that not happening here? > > Yes, plug event is not happening for the DP IN adapter after resume. > > The DP In resources are put into tcm->dp_resources list as part of host > router enumeration. But when it resumes from sleep, there is no plug > event happening for DP IN, hence DP IN resource will not be in > tcm->dp_resources list. Right but if I understand the spec correctly you should get a new hotplug event for the DP IN adapters once the host router is moved back to "enumerated" state. This is how Intel hardware works at least (and this is the understanding I have from the USB4 spec too). Do you see anything in the log wrt. this when you resume the domain?
On 2/18/2022 7:55 PM, Mika Westerberg wrote: > On Fri, Feb 18, 2022 at 07:38:23PM +0530, Sanjay R Mehta wrote: >> >> >> On 2/18/2022 4:43 PM, Mika Westerberg wrote: >>> Hi Sanjay, >>> >>> On Fri, Feb 18, 2022 at 01:11:25AM -0600, Sanjay R Mehta wrote: >>>> From: Sanjay R Mehta <sanju.mehta@amd.com> >>>> >>>> All DP resources are released during suspend and while >>>> resuming back DP IN resource is not available, therefore >>>> unable to find DP pair to re-establish the DP tunnel. >>> >>> It should get plug event for the DP IN adapters once the router comes >>> back from sleep. Is that not happening here? >> >> Yes, plug event is not happening for the DP IN adapter after resume. >> >> The DP In resources are put into tcm->dp_resources list as part of host >> router enumeration. But when it resumes from sleep, there is no plug >> event happening for DP IN, hence DP IN resource will not be in >> tcm->dp_resources list. > > Right but if I understand the spec correctly you should get a new > hotplug event for the DP IN adapters once the host router is moved back > to "enumerated" state. This is how Intel hardware works at least (and > this is the understanding I have from the USB4 spec too). Do you see > anything in the log wrt. this when you resume the domain? Thanks Mika. I'll re-look at this scenario on our system and will check if anything needs to be taken care of. Thank you for the valuable input :). >
diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c index cbd0ad8..a11710e 100644 --- a/drivers/thunderbolt/tb.c +++ b/drivers/thunderbolt/tb.c @@ -1022,6 +1022,7 @@ static void tb_disconnect_and_release_dp(struct tb *tb) { struct tb_cm *tcm = tb_priv(tb); struct tb_tunnel *tunnel, *n; + struct tb_port *port, *tmp; /* * Tear down all DP tunnels and release their resources. They @@ -1032,11 +1033,10 @@ static void tb_disconnect_and_release_dp(struct tb *tb) tb_deactivate_and_free_tunnel(tunnel); } - while (!list_empty(&tcm->dp_resources)) { - struct tb_port *port; - - port = list_first_entry(&tcm->dp_resources, - struct tb_port, list); + list_for_each_entry_safe(port, tmp, &tcm->dp_resources, list) { + /* Preserve root switch DP IN resource */ + if (!tb_route(port->sw) && tb_port_is_dpin(port)) + continue; list_del_init(&port->list); } }