On Thu, Dec 30, 2021 at 10:36:51PM +0300, Alper Nebi Yasak wrote: > On boards using the RK3399 SoC, the USB OHCI and EHCI controllers share > the same PHY device instance. While these controllers are being stopped > they both attempt to power-off and deinitialize it, but trying to > power-off the deinitialized PHY device results in a hang. This usually > happens just before booting an OS, and can be explicitly triggered by > running "usb start; usb stop" in the U-Boot shell. > > Implement a uclass-wide counting mechanism for PHY initialization and > power state change requests, so that we don't power-off/deinitialize a > PHY instance until all of its users want it done. The Allwinner A10 USB > PHY driver does this counting in-driver, remove those parts in favour of > this in-uclass implementation. > > The sandbox PHY operations test needs some changes since the uclass will > no longer call into the drivers for actions matching its tracked state > (e.g. powering-off a powered-off PHY). Update that test, and add a new > one which simulates multiple users of a single PHY. > > The major complication here is that PHY handles aren't deduplicated per > instance, so the obvious idea of putting the counts in the PHY handles > don't immediately work. It seems possible to bind a child udevice per > PHY instance to the PHY provider and deduplicate the handles in each > child's uclass-private areas, like in the CLK framework. An alternative > approach could be to use those bound child udevices themselves as the > PHY handles. Instead, to avoid the architectural changes those would > require, this patch solves things by dynamically allocating a list of > structs (one per instance) in the provider's uclass-private area. > > Signed-off-by: Alper Nebi Yasak <alpernebiya...@gmail.com> > Reviewed-by: Simon Glass <s...@chromium.org> > Tested-by: Peter Robinson <pbrobin...@gmail.com> - Rock960
Applied to u-boot/master, thanks! -- Tom
signature.asc
Description: PGP signature