[PATCH 09/10] ARM: dts: qcom: msm8974: add the USB3 controller and its PHYs
From: Dmitry Baryshkov
Date: Mon Aug 10 2026 - 07:44:47 EST
The primary USB port of MSM8974 - a Synopsys DWC3 behind the standard
Qualcomm wrapper - is not described, so boards can only use the two
ChipIdea controllers.
Describe the wrapper and the DWC3 core together with both of its
QSCRATCH-controlled PHYs: the HS PHY at qscratch + 0x00 and the
SuperSpeed PHY at qscratch + 0x30 (compatible with the ipq806x SS PHY).
The HS PHY reference is the 60 MHz mock UTMI clock plus an RPM vote
keeping the XO alive; the SS PHY takes its reference from the pads,
driven by the PMIC differential XO buffer (diff_clk), matching the
ref_clk the vendor kernel hands to the DWC3 wrapper.
Both PHYs must be described and initialized even for high-speed-only
use: leaving the SS PHY dead does not just cap the speed, it confuses
the upstream-facing state machine of at least the TUSB8040A hub on the
APQ8074 dragonboard, which then connects but never answers enumeration
in any speed configuration.
Assisted-by: Claude:claude-fable-5
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
---
arch/arm/boot/dts/qcom/qcom-msm8974.dtsi | 47 ++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/arch/arm/boot/dts/qcom/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom/qcom-msm8974.dtsi
index 06c0af0aa317..bac3c8772e0a 100644
--- a/arch/arm/boot/dts/qcom/qcom-msm8974.dtsi
+++ b/arch/arm/boot/dts/qcom/qcom-msm8974.dtsi
@@ -713,6 +713,53 @@ blsp2_i2c6: i2c@f9968000 {
#size-cells = <0>;
};
+ usb3: usb@f9200000 {
+ compatible = "qcom,msm8974-dwc3", "qcom,snps-dwc3";
+ reg = <0xf9200000 0xfc000>;
+ interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "dwc_usb3", "pwr_event",
+ "hs_phy_irq";
+ clocks = <&gcc GCC_SYS_NOC_USB3_AXI_CLK>,
+ <&gcc GCC_USB30_MASTER_CLK>,
+ <&gcc GCC_USB30_SLEEP_CLK>,
+ <&gcc GCC_USB30_MOCK_UTMI_CLK>;
+ clock-names = "cfg_noc", "core", "sleep", "mock_utmi";
+ assigned-clocks = <&gcc GCC_USB30_MOCK_UTMI_CLK>,
+ <&gcc GCC_USB30_MASTER_CLK>;
+ assigned-clock-rates = <60000000>, <125000000>;
+ resets = <&gcc GCC_USB_30_BCR>;
+ phys = <&usb3_hs_phy>, <&usb3_ss_phy>;
+ phy-names = "usb2-phy", "usb3-phy";
+ snps,dis_u2_susphy_quirk;
+ snps,dis_enblslpm_quirk;
+ status = "disabled";
+ };
+
+ usb3_hs_phy: phy@f92f8800 {
+ compatible = "qcom,msm8974-usb-phy-hs";
+ reg = <0xf92f8800 0x30>;
+ clocks = <&gcc GCC_USB30_MOCK_UTMI_CLK>,
+ <&rpmcc RPM_SMD_XO_CLK_SRC>;
+ clock-names = "ref", "xo";
+ #phy-cells = <0>;
+ status = "disabled";
+ };
+
+ usb3_ss_phy: phy@f92f8830 {
+ compatible = "qcom,msm8974-usb-phy-ss",
+ "qcom,ipq806x-usb-phy-ss";
+ reg = <0xf92f8830 0x30>;
+ clocks = <&gcc GCC_USB30_MASTER_CLK>,
+ <&rpmcc RPM_SMD_DIFF_CLK>;
+ clock-names = "ref", "xo";
+ #phy-cells = <0>;
+ qcom,rx-eq = <3>;
+ qcom,tx-deamp-3_5db = <22>;
+ status = "disabled";
+ };
+
usb: usb@f9a55000 {
compatible = "qcom,ci-hdrc";
reg = <0xf9a55000 0x200>,
--
2.47.3