[PATCH v3 3/7] board: rock5b-rk3588: add USB-C controller support
Jonas Karlman
jonas at kwiboo.se
Fri Aug 2 22:42:56 CEST 2024
Hi Sebastian,
On 2024-08-02 19:59, Sebastian Reichel wrote:
> Enable support for the fusb302 USB Type-C controller.
>
> This will do early USB PD (power deliver) negotiation, which must happen
> within 5 seconds after the USB-C connector has plugged in according to
> the specification. It takes almost 5 seconds to go through the bootchain
> on Rock 5B and jump to the operating system. When the Linux initializes
> the fusb302 usually 20-30 seconds have gone since the device has been
> plugged, which is far too late. The USB PD power source reacts with a
> hard reset, which disables VBUS for some time. This is not a problem for
> a battery driven device, but Rock 5B will loose its power-supply and
> reset. By initializing PD in U-Boot, this can be avoided.
>
> Signed-off-by: Sebastian Reichel <sebastian.reichel at collabora.com>
> ---
> board/radxa/rock5b-rk3588/Makefile | 6 ++++
> board/radxa/rock5b-rk3588/rock5b-rk3588.c | 35 +++++++++++++++++++++++
> 2 files changed, 41 insertions(+)
> create mode 100644 board/radxa/rock5b-rk3588/Makefile
> create mode 100644 board/radxa/rock5b-rk3588/rock5b-rk3588.c
>
> diff --git a/board/radxa/rock5b-rk3588/Makefile b/board/radxa/rock5b-rk3588/Makefile
> new file mode 100644
> index 000000000000..95d813596da4
> --- /dev/null
> +++ b/board/radxa/rock5b-rk3588/Makefile
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (c) 2022 Collabora Ltd.
> +#
> +
> +obj-y += rock5b-rk3588.o
> diff --git a/board/radxa/rock5b-rk3588/rock5b-rk3588.c b/board/radxa/rock5b-rk3588/rock5b-rk3588.c
> new file mode 100644
> index 000000000000..1c17ae93c76c
> --- /dev/null
> +++ b/board/radxa/rock5b-rk3588/rock5b-rk3588.c
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (c) 2023-2024 Collabora Ltd.
> + */
> +
> +#include <usb/tcpm.h>
> +
> +#ifdef CONFIG_MISC_INIT_R
> +int misc_init_r(void)
You should not override misc_init_r() here as it will override the
rockchip board common misc_init_r() function that read cpuid, set serial
and ethernet mac address env vars.
I would suggest you instead of tcpm_get() add something similar to
int tcpm_probe_all()
{
struct udevice *dev;
struct uclass *uc;
int ret;
ret = uclass_get(UCLASS_TCPM, &uc);
if (ret)
return ret;
for (ret = uclass_first_device_check(UCLASS_TCPM, &dev);
dev;
ret = uclass_next_device_check(&dev)) {
if (ret)
printf("Failed to probe Type-C controller '%s' (ret=%d)\n",
dev->name, ret);
}
return 0;
}
or if we do not care about the error message this could use
uclass_probe_all(UCLASS_TCPM);
and call it from the rockchip board common code in mach-rockchip/board.c
directly after the call to regulators_enable_boot_on() in board_init().
Alternatively you could call following in a tcpm_post_bind()
dev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND);
to automatically probe the device as soon as possible after all devices
have been bind, this is how the rockchip-io-domain driver does it.
Otherwise we need to add custom board code for each board using USB PD,
something to avoid.
Regards,
Jonas
> +{
> + struct udevice *dev;
> + int ret;
> +
> + /*
> + * This will do early USB PD (power deliver) negotiation, which must
> + * happen within 5 seconds after the USB-C connector has plugged in
> + * according to the specification. It takes almost 5 seconds to go
> + * through the bootchain on Rock 5B and jump to the operating system.
> + * When the Linux initializes the fusb302 usually 20-30 seconds have
> + * gone since the device has been plugged, which is far too late.
> + *
> + * The USB PD power source reacts with a hard reset, which disables
> + * VBUS for some time. This is not a problem for a battery driven
> + * device, but Rock 5B will loose its power-supply and reset. By
> + * initializing PD in U-Boot, this can be avoided.
> + */
> + ret = tcpm_get("usb-typec at 22", &dev);
> + if (ret) {
> + printf("Failed to probe Type-C controller\n");
> + return 0;
> + }
> +
> + return 0;
> +}
> +#endif
More information about the U-Boot
mailing list