On 19.10.2017 20:04, Alan Stern wrote:
On Thu, 19 Oct 2017, Mathias Nyman wrote:
Current shutdown routine just forces the host controller to stop, it clears the
run bit and polls the "halted" status for 16ms. Apparently we don't see the halted
bit within 16ms.
Spec say that the correct way to stop is to first command all transfer rings to stop,
then stop the command ring, and after that stop the host controller.
If we just bluntly stop the host (as we do) spec say (xhci 5.4.1.1) it should stop
anyway within 16ms, but undefined behavior may occur.
So the options in xHCI are down to:
1. just clear the run bit and ignore checking any status.
- really fast shutdown routine for xhci
2. clear run bit and increase status polling time, see if we get rid of error message.
- can get rid of error message but no actual change, well, we would know if host stopped
3. properly stop all transfer rings and command ring, and then stop host.
- cleanest and slowest way, do we care about this? everything should be reset after shutdown.
Or you could use a sledgehammer approach, and do a hardware reset of
the controller chip.
That's one way, but spec [1] doesn't recommend resetting a active running host.
It threatens with the same "undefined behavior", as for stopping a host
with transfer and command rings running.
[1] xhci spec 5.4.1 bit 1 HCRST
-Mathias
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html