[PATCH v2 00/10] usb: Add TCPCI driver and DWC3 OTG dual-role support

Peng Fan peng.fan at oss.nxp.com
Tue Jun 30 03:48:55 CEST 2026


Hi Marek,

Do you have time to give a look at this series?

Thanks,
Peng

On Sun, Jun 21, 2026 at 10:06:36AM +0800, Peng Fan (OSS) wrote:
>[V2] Just resend this patchset without
>"usb: tcpm: fix inverted poll condition in tcpm_pd_transmit()"
>
>This series adds TCPCI (Type-C Port Controller Interface) driver support
>to U-Boot's TCPM framework and enables runtime USB host/device mode
>switching on platforms using DWC3 with Type-C connectors.
>
>The work is motivated by the NXP i.MX8MP EVK, which has a PTN5110 TCPCI
>chip managing a USB Type-C data port. The goal is to support both
>"usb start" (host mode, for USB storage) and "ums"/"fastboot" (device
>mode, for flashing) on the same Type-C port, switchable at runtime.
>
>The series breaks down into three logical groups:
>
>TCPM bugfixes (patches 1-3):
>  Fix three issues discovered in the upstream TCPM state machine during
>  PD sink testing with various chargers:
>  - Inverted poll condition causing transmit to always time out
>  - Unnecessary hard resets on sink-only ports when source doesn't
>    respond to capabilities request
>  - Premature exit from poll loop after SNK_READY, missing source
>    follow-up messages (Get_Sink_Cap etc.) that trigger hard reset
>
>TCPCI driver and TCPM API extensions (patches 4-7):
>  - Lightweight PD negotiation tracing (RAM ring buffer, zero serial
>    overhead) for debugging charger interop issues
>  - TCPCI driver for NXP PTN5110 and compatible chips, ported from
>    the Linux kernel with adaptations for U-Boot's polled model
>  - New tcpm_setup_host_mode()/tcpm_setup_device_mode() APIs that
>    configure Type-C CC role and detect cable orientation without
>    running the full PD state machine -- appropriate for U-Boot's
>    synchronous, command-driven execution model
>  - pd-disable connector property support in tcpm_post_probe() to
>    skip the PD state machine for data-only ports while keeping the
>    TCPCI driver ops accessible
>
>DWC3 OTG and board support (patches 8-11):
>  - board_usb_init()/board_usb_cleanup() hooks in DWC3 generic glue,
>    called during child probe/remove to allow board-level Type-C
>    configuration before DWC3 core init
>  - OTG dual-bind: when dr_mode="otg", bind both dwc3-generic-host
>    and dwc3-generic-peripheral children; runtime mode switching via
>    dwc3_otg_deactivate_sibling() which removes the active sibling
>    before probing the new one
>  - i.MX8MP EVK board support wiring it all together: TCPCI DT nodes,
>    board_usb_init using TCPM APIs for CC role setup and SS mux
>    control, PD sink configuration for the power port
>
>Tested on NXP i.MX8MP EVK.
>
>Signed-off-by: Peng Fan <peng.fan at nxp.com>
>---
>Changes in v2:
>- Drop "usb: tcpm: fix inverted poll condition in tcpm_pd_transmit"
>  which was sent to list as a separate fix.
>- Link to v1: https://patch.msgid.link/20260617-tcpci-dwc3-v1-0-b824fe1e9299@nxp.com
>
>---
>Peng Fan (9):
>      usb: tcpm: avoid hard reset for sink-only ports on Source_Cap timeout
>      usb: tcpm: continue polling after PD negotiation to handle source messages
>      usb: tcpm: add lightweight PD negotiation tracing
>      usb: tcpm: add TCPCI (Type-C Port Controller Interface) driver
>      usb: tcpm: add setup_host_mode/device_mode/disable_src_vbus APIs
>      usb: tcpm: skip state machine for pd-disable ports
>      usb: dwc3: generic: support OTG dual-bind for runtime host/device switching
>      board: imx8mp_evk: enable USB PD sink via TCPCI
>      board: imx8mp_evk: add USB Type-C OTG support with TCPCI
>
>Ye Li (1):
>      usb: dwc3: generic: add board_usb_init/cleanup hooks
>
> arch/arm/dts/imx8mp-evk-u-boot.dtsi |  52 ++-
> board/nxp/imx8mp_evk/imx8mp_evk.c   |  78 ++++
> configs/imx8mp_evk_defconfig        |   3 +
> drivers/usb/dwc3/dwc3-generic.c     |  73 +++-
> drivers/usb/tcpm/Kconfig            |   9 +
> drivers/usb/tcpm/Makefile           |   1 +
> drivers/usb/tcpm/tcpci.c            | 778 ++++++++++++++++++++++++++++++++++++
> drivers/usb/tcpm/tcpm-internal.h    |  40 ++
> drivers/usb/tcpm/tcpm-uclass.c      |  87 ++++
> drivers/usb/tcpm/tcpm.c             |  46 ++-
> include/usb/tcpci.h                 | 185 +++++++++
> include/usb/tcpm.h                  |   4 +
> 12 files changed, 1350 insertions(+), 6 deletions(-)
>---
>base-commit: debaadb75013a6d3706a2137d540bf4660475e3e
>change-id: 20260617-tcpci-dwc3-653a5d9c8893
>
>Best regards,
>--  
>Peng Fan <peng.fan at nxp.com>
>


More information about the U-Boot mailing list