@marcan My perspective on this is mostly USB2, but the same problem exists there too: some drivers do everything in-house, some have external PHY drivers that do ... something maybe involving a MUX thing, etc.

IMHO you should go further than just a "top-level management" driver coordinating things for the PD device and build something more like a "port" driver: status flows up from every device (driver) involved and control flows down to the various components and _nothing_ does anything without the go-ahead of this driver.

The problem then becomes that this would probably require significant refactoring of just about every driver involved, and worse, would probably require coring out most of the "logic" from the dwc3 driver, which is probably just hacked together "port" drivers for other SoCs.