On Thu, Apr 27, 2023 at 12:14 PM Tim Harvey <thar...@gateworks.com> wrote: > > On Wed, Mar 15, 2023 at 3:01 PM Tim Harvey <thar...@gateworks.com> wrote: > > > > Greetings, > > > > I'm seeing a hang on imx8mm-venice and imx8mn-venice boards which have > > a USB host controller in host mode when ehci_shutdown() is called > > (which is called for 'usb stop' as well as when booting a kernel once > > 'usb start' has been issued). > > > > This appears to be caused by the ehci_shutdown() function, > > specifically the write to the or_portsc register to set EHCI_PS_SUSP: > > for (i = 0; i < max_ports; i++) { > > reg = ehci_readl(&ctrl->hcor->or_portsc[i]); > > reg |= EHCI_PS_SUSP; > > ehci_writel(&ctrl->hcor->or_portsc[i], reg); > > } > > > > Does anyone else out there with an imx8mm/imx8mn board with usbotg1 or > > usbotg2 configured with dr_mode="host" see this as well? > > > > I'm not clear where the equivalent code would be in the Linux kernel > > to compare with. I do know that commenting out the ehcI_write above > > keeps ehci_shutdown from hanging but does cause the handshake to fail > > on the next cmd that disables CMD_RUN and thus prints "EHCI failed to > > shut down host controller.". > > > > Any ideas? > > > > Best Regards, > > > > Tim > > I haven't heard any response here so I did some more digging. This > hang should be affecting all imx8mm/imx8mn devices that have USB host > controllers configured for host mode (dr_mode = "host") and would > appear for anyone that ever does a 'usb stop' (or does a 'usb start' > followed by a kernel boot for example of loading kernel from USB) in > U-Boot. > > The issue is caused by the pgc_otg{1,2} and/or pgc_hsiomix power > domains getting disabled for the 'usb_hub' device (which is present > for the USB host even if you have no hub) prior to ehci_shutdown being > called. > > The following patch resolves this but I'm thinking there should be a > better way to control this from ehci-mx6.c?
There was some re-organization of the power domains in Linux in the device tree [1]. Do you know if those propagated to U-Boot? adam [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/arm64/boot/dts/freescale/imx8mm.dtsi?h=v6.3&id=4585c79ff477f9517b7f384a4fce351417e8fa36 > > diff --git a/common/usb_hub.c b/common/usb_hub.c > index 85c0822d8b7b..03237deaa0be 100644 > --- a/common/usb_hub.c > +++ b/common/usb_hub.c > @@ -948,7 +948,7 @@ U_BOOT_DRIVER(usb_generic_hub) = { > .name = "usb_hub", > .id = UCLASS_USB_HUB, > .of_match = usb_hub_ids, > - .flags = DM_FLAG_ALLOC_PRIV_DMA, > + .flags = DM_FLAG_ALLOC_PRIV_DMA | DM_FLAG_LEAVE_PD_ON, > }; > > > Best Regards, > > Tim