[PATCH v1 0/5] FUSB302 USB-C controller support

Soeren Moch smoch at web.de
Sat Jun 1 19:01:03 CEST 2024


On 31.05.24 17:08, Sebastian Reichel wrote:
> Hi,
>
> 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).
>
> Greetings,
>
> -- Sebastian
>
> Sebastian Reichel (5):
>    usb: tcpm: add core framework
>    usb: tcpm: fusb302: add driver
>    board: rock5b-rk3588: add USB-C controller support
>    board: rock5b-rk3588: enable USB-C in operating system
>    MAINTAINERS: add TCPM section
>

I successfully tested this series on top of v2024.07-rc3.

Tested-by: Soeren Moch <smoch at web.de>



The highest possible USB PD mode of my power supply is negotiated
as desired:

U-Boot 2024.07-rc3-00005-ge829b94820 (Jun 01 2024 - 17:49:07 +0200)





Model: Radxa ROCK 5 Model B


DRAM:  8 GiB


Core:  355 devices, 33 uclasses, devicetree: separate


MMC:   mmc at fe2c0000: 1, mmc at fe2d0000: 2, mmc at fe2e0000: 0


Loading Environment from nowhere... OK


In:    serial at feb50000


Out:   serial at feb50000


Err:   serial at feb50000


Model: Radxa ROCK 5 Model B


Net:   No ethernet found.


Hit any key to stop autoboot:  0


=> tcpm list


| Name                            | Parent name         | Parent uclass
@ seq

| usb-typec at 22                    | i2c at feac0000        | i2c @ 4 |
status: 0

=> tcpm dev usb-typec at 22


dev: 0 @ usb-typec at 22


=> tcpm info


TCPM State: SNK_READY


Voltage:    12.000 V


Current:     2.500 A


=>

Thanks,
Soeren


More information about the U-Boot mailing list