Hi, On Mon, Aug 19, 2024 at 07:08:37PM GMT, Marek Vasut wrote: > On 8/18/24 11:43 PM, Jonas Karlman wrote: > > > > On ROCK 5B power is usually supplied via it's USB-C port. This port has > > > > the > > > > data lines connected to RK3588, VBUS connected to the input regulator > > > > and > > > > CC pins connected to FUSB302. FUSB302 is a USB-C controller, which can > > > > be > > > > accessed via I2C from RK3588. The USB-C controller is needed to figure > > > > out > > > > the USB-C cable orientation, but also to do USB PD communication. Thus > > > > it > > > > would be great to enable support for it in the operating system. > > > > > > > > But the USB-PD specification requires, that a device reacts to USB-PD > > > > messages > > > > send by the power-supply within around 5 seconds. If that does not > > > > happen the > > > > power-supply assumes, that the device does not support USB-PD. If a > > > > device > > > > later starts sending USB-PD messages it is considered an error, which > > > > is solved > > > > by doing a hard reset. A USB-PD hard reset means, that all supply > > > > voltages are > > > > removed for a short period of time. For boards, which are solely powered > > > > through their USB-C port, like the Radxa Rock 5B, this results in an > > > > machine > > > > reset. This is currently worked around by not describing the FUSB302 in > > > > the > > > > kernel DT, so nothing will ever speak USB-PD on the Rock 5B. This means > > > > > > > > 1. the USB-C port cannot be used at all > > > > 2. the board will be running via fallback supply, which provides limited > > > > power capabilities > > > > > > > > In order to avoid the hard reset, this adds FUSB302 support to U-Boot, > > > > so > > > > that we react to the power-supply's queries in time. The code, which is > > > > originally from the Linux kernel, consists of two parts: > > > > > > > > 1. the tcpm state machine, which implements the Type C port manager > > > > state > > > > machine as described in the USB PD specification > > > > 2. the fusb302 driver, which knows about specific registers > > > > > > > > Especially the first part has been heavily modified compared to the > > > > kernel, which makes use of multiple delayed works and threads. For this > > > > I used a priorly ported version from Rockchip, removed their hacks and > > > > any states not necessary in U-Boot (e.g. audio accessory support). > > > > > > > > Sorry for the delay in getting PATCHv3 ready. > > > > > > I am the one who should be sorry here, really, sorry for the abysmal > > > delay in my replies. > > > > > > So ... this series looks good to me. Thank you for working on this ! > > > > > > Jonas, are your concerns resolved ? > > > > No, for ROCK 5B the full overwrite of the Rockchip common misc_init_r() > > in mach-rockchip/board.c should be fixed, rockchip_early_misc_init_r() > > could probably be used instead (or possible a PREBOOT cmd), see [1]. > > Can you use DM_FLAG_PROBE_AFTER_BIND instead of misc_init_r for this ? > > drivers/led/led-uclass.c: dev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND); > > This will probe the driver after it got bound, and you won't have to hack > around board files or arch files for this.
Jonas suggested the same. My response still applies: Depending on the remote side (i.e. the power-supply) the TCPM state machine can take quite some time to get it into the "final" state. The worst I have seen was around 2 seconds. Boards, which are not powered via their TCPM controller can survive a USB hard reset and do not need any U-Boot support. I think we do not want to add this penality to these boards. Greetings, -- Sebastian
signature.asc
Description: PGP signature