
29 Jan
2021
29 Jan
'21
1:56 a.m.
On 28.01.2021 23:28, Jan Palus wrote:
FWIW I figured it hangs in ohci-hcd.c at:
static int hc_reset(ohci_t *ohci) ... if (ohci_readl(&ohci->regs->control) & OHCI_CTRL_IR) {
This appears to be caused by following events:
- usb_stop() (usb-class.c) iterates to remove every bus - starts with ehci and goes all the way to ehci_shutdown_phy() - there it calls generic_phy_exit() ending in rockchip_usb2phy_exit() - where at last it disables clock with clk_disable() (rk3399_clk_disable())
After disabling clock ohci_readl(&ohci->regs->control) starts to hang so perhaps it shouldn't be disabled until ohci is removed.