From: Elson Serrao <elson.serrao@oss.qualcomm.com>
To: Bjorn Andersson <andersson@kernel.org>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Peter Chen <peter.chen@kernel.org>, Rob Herring <robh@kernel.org>,
Conor Dooley <conor+dt@kernel.org>
Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v6 0/9] Improve Qualcomm EUD driver and platform support
Date: Tue, 11 Aug 2026 14:36:01 -0700 [thread overview]
Message-ID: <20260811213610.2956147-1-elson.serrao@oss.qualcomm.com> (raw)
The Embedded USB Debugger (EUD) is a High-Speed USB on-chip hub that
provides debug and trace capabilities on Qualcomm platforms. The current
EUD driver, however, lacks essential hardware resources such as PHY
references and support for multi-port configurations. This series
addresses those gaps and introduces the necessary device tree updates
to enable testing and validation of the enhanced functionality.
Below is a high-level block diagram showing the EUD and its connections.
EUD Block
+------------------------------+
| |
[Conn-0]-->[USB2PHY-0]---->|-------- Path 0 --------------|-->[USBCtrl-0]
| |
[Conn-1]-->[USB2PHY-1]---->|-------- Path 1 --------------|-->[USBCtrl-1]
| |
| +------------------+ |
| | EUD Debug Hub | |
| +------------------+ |
+------------------------------+
The series has been validated on the Qualcomm Dragonwing Q6 platform
(RB3 Gen2 board), confirming successful OpenOCD connectivity to the EUD
interface. For detailed usage instructions, refer to Qualcomm’s Linux
kernel debugging guide:
https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-12/debugging_linux_kernel.html#debug-using-openocd
Testing feedback:
- Konrad Dybcio reported running a slightly modified version of this
series on Agatti with no obvious issues:
https://lore.kernel.org/all/8d4f10ef-602c-4e1e-9711-443a5f3fa7f3@oss.qualcomm.com/
---
Changes in v6:
- [Patch 0001] Fix oneOf schema to properly enforce mutual exclusivity
between 'ports' and 'eud-path@N' (sashiko-bot).
- [Patch 0009] Extend the eud_con remote-endpoint fix to
sm7325-motorola-dubai-common.dtsi and sm7325-xiaomi-taoyao.dts to fix
"not bidirectional" DT graph warning.
- Link to v5: https://lore.kernel.org/all/20260803031534.2942628-1-elson.serrao@oss.qualcomm.com/
Changes in v5:
- [Patch 0001] Add a compatible for a SoC that supports EUD over two
ports, restrict paths based on SoC hardware, and improve the commit
message [Krzysztof/Dmitry]
- [Patch 0002/0003] Document error codes in ABI doc.
- [Patch 0004] Zero-initialize the USB role switch descriptor [Peter].
Add a dr_mode check to handle cases where the USB controller
operates in a fixed role without role-switch support (based on
internal testing).
- [Patch 0006] Drop eud_disabled_for_host flag and control EUD based on
device role entry/exit [Peter]. Allow EUD to be powered on only in
device role and defer enablement in other roles until the port
switches to device role.
- Link to v4: https://lore.kernel.org/all/20260501170635.2641748-1-elson.serrao@oss.qualcomm.com/
Changes in v4:
- [Patch 0001] Restructure the flattened ports representation to a child-node
based model.
- Preserve the top-level 'ports' property and add per-path child nodes,
so that each role-switch path is described using its own OF graph.
(Dmitry).
- Link to the discussion leading to this design decision:
https://lore.kernel.org/all/20260324172916.804229-1-elson.serrao@oss.qualcomm.com/
- [Patch 0002] Use explicit port names when selecting the active EUD
port (Greg)
- [Patch 0003] Use a scoped iterator when looping over child nodes and
drop redundant EUD path validation checks (Konrad). Preserve support
for the legacy top-level ports description.
- [Patch 0004] Register role switch per path and forward the role switch
notifications to the USB controller.
- [Patch 0006] Add host mode co-ordination based on the role changes as
per the new design and drop the custom API that was used to get role
notifications.
- [Patch 0008] Described the UTMI path as a child node with role switch
capability.
- Link to v3: https://lore.kernel.org/all/20260309203337.803986-1-elson.serrao@oss.qualcomm.com/
Changes in RFC v3:
- Replaced the per-path (eud-path@N) model with a flattened ports
representation based on the feedback.
- Added port@2 and port@3 to support dual-port configurations.
- Removed the EUD-local 'phys' and 'usb-role-switch' properties since PHY
and role-switch information is obtained from walking the OF graph.
- Updated PHY discovery logic by fetching the PHY from the controller
node/fwnode, and exported a new API for the controller to report role
changes. The dwc3-qcom driver now uses this API to notify EUD on role
transitions.
- Updated the DTS structure by moving the EUD-to-controller port mapping
into the base SoC DTSI, enabling EUD by default, and adjusting all board
DTS files accordingly, including adding the usb-role-switch provider
link on connector nodes.
- Link to v2: https://lore.kernel.org/all/20260126233830.2193816-1-elson.serrao@oss.qualcomm.com/
Changes in v2:
- Improved commit message of patch 0001 and 0003 with historical context
on why EUD worked without PHY references on single-path systems.
Expanded the usb-role-switch property description in the bindings file.
- Link to v1: https://lore.kernel.org/all/20260116232106.2234978-1-elson.serrao@oss.qualcomm.com/
---
Elson Serrao (9):
dt-bindings: soc: qcom: eud: Add per-path child nodes for UTMI routing
usb: misc: qcom_eud: add sysfs attribute for port selection
usb: misc: qcom_eud: add per-path High-Speed PHY control
usb: misc: qcom_eud: add per-path role switch support
usb: misc: qcom_eud: improve enable_store API
usb: misc: qcom_eud: add role-based EUD control
usb: misc: qcom_eud: fix virtual attach/detach event handling
arm64: dts: qcom: kodiak: Describe EUD UTMI path using child node
arm64: dts: qcom: Map USB connector to EUD on Kodiak boards
Documentation/ABI/testing/sysfs-driver-eud | 19 +
.../bindings/soc/qcom/qcom,eud.yaml | 133 ++++++-
arch/arm64/boot/dts/qcom/kodiak.dtsi | 35 +-
.../boot/dts/qcom/qcm6490-fairphone-fp5.dts | 10 +-
.../dts/qcom/qcm6490-particle-tachyon.dts | 10 +-
.../boot/dts/qcom/qcm6490-shift-otter.dts | 10 +-
arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 10 +-
.../qcom/qcs6490-thundercomm-minipc-g1iot.dts | 4 +-
.../dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 10 +-
.../qcom/sm7325-motorola-dubai-common.dtsi | 4 +-
.../boot/dts/qcom/sm7325-motorola-dubai.dts | 4 +-
.../boot/dts/qcom/sm7325-nothing-spacewar.dts | 10 +-
.../boot/dts/qcom/sm7325-xiaomi-taoyao.dts | 4 +-
drivers/usb/misc/qcom_eud.c | 332 ++++++++++++++++--
14 files changed, 522 insertions(+), 73 deletions(-)
--
2.34.1
next reply other threads:[~2026-08-11 21:36 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 21:36 Elson Serrao [this message]
2026-08-11 21:36 ` [PATCH v6 1/9] dt-bindings: soc: qcom: eud: Add per-path child nodes for UTMI routing Elson Serrao
2026-08-11 21:36 ` [PATCH v6 2/9] usb: misc: qcom_eud: add sysfs attribute for port selection Elson Serrao
2026-08-11 21:36 ` [PATCH v6 3/9] usb: misc: qcom_eud: add per-path High-Speed PHY control Elson Serrao
2026-08-24 9:14 ` Konrad Dybcio
2026-08-11 21:36 ` [PATCH v6 4/9] usb: misc: qcom_eud: add per-path role switch support Elson Serrao
2026-08-24 13:44 ` Konrad Dybcio
2026-08-25 3:15 ` Elson Serrao
2026-08-11 21:36 ` [PATCH v6 5/9] usb: misc: qcom_eud: improve enable_store API Elson Serrao
2026-08-11 21:36 ` [PATCH v6 6/9] usb: misc: qcom_eud: add role-based EUD control Elson Serrao
2026-08-24 13:46 ` Konrad Dybcio
2026-08-11 21:36 ` [PATCH v6 7/9] usb: misc: qcom_eud: fix virtual attach/detach event handling Elson Serrao
2026-08-11 21:36 ` [PATCH v6 8/9] arm64: dts: qcom: kodiak: Describe EUD UTMI path using child node Elson Serrao
2026-08-24 13:48 ` Konrad Dybcio
2026-08-25 3:28 ` Elson Serrao
2026-08-25 10:45 ` Konrad Dybcio
2026-08-11 21:36 ` [PATCH v6 9/9] arm64: dts: qcom: Map USB connector to EUD on Kodiak boards Elson Serrao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260811213610.2956147-1-elson.serrao@oss.qualcomm.com \
--to=elson.serrao@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=peter.chen@kernel.org \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox