Re: [RFC PATCH] xhci: do not halt the secondary HCD

From: Mathias Nyman
Date: Mon Sep 19 2016 - 03:41:34 EST

On 19.09.2016 09:35, Joel Stanley wrote:
We can't halt the secondary HCD, because it's also the primary HCD,
which will cause problems if we have devices attached to the primary
HCD, like a keyboard.

We've been carrying this in our Linux-as-a-bootloader environment for a little
while now. The machines all have the same TI TUSB73x0 part, and when we kexec
the devices don't come back until a system power cycle.

I'd like some advice on an acceptable way to upstream the fix, so that the xhci
device survives kexec.

Signed-off-by: Joel Stanley <joel@xxxxxxxxx>

What kernel version is this?

As Greg said there are fixes in this area in the 4.8 latest rc kernel.

If that doesn't work then we need to figure out what the real issue is.

xhci hardware is really just one controller. The split into primary and secondary HCD
is a software only. We always load the primary HCD first (USB2) and secondary second (USB3).
We unload them in reverse order, and need to stop the xhci (halt the hcd) as a first step.

load primary
load secondary (starts the xhci controller
unload secondary (halts the controller)
unload primary (free memory)