* [PATCH v2 01/14] dt-bindings: phy: Document the Qualcomm IPQ5332 UNIPHY USB Super-speed PHY
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver George Moussalem via B4 Relay
` (12 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Document the Qualcomm USB3 22ull UNIPHY present in the IPQ5018 and
IPQ5332 SoCs.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
.../phy/qcom,ipq5332-uniphy-usb-ss-phy.yaml | 111 +++++++++++++++++++++
1 file changed, 111 insertions(+)
diff --git a/Documentation/devicetree/bindings/phy/qcom,ipq5332-uniphy-usb-ss-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,ipq5332-uniphy-usb-ss-phy.yaml
new file mode 100644
index 000000000000..cc9eccac51dd
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/qcom,ipq5332-uniphy-usb-ss-phy.yaml
@@ -0,0 +1,111 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/qcom,ipq5332-uniphy-usb-ss-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm UNIPHY USB Super-Speed 22ull PHY
+
+maintainers:
+ - Praveenkumar I <quic_ipkumar@quicinc.com>
+ - Varadarajan Narayanan <quic_varada@quicinc.com>
+
+description:
+ USB Super-Speed UNIPHY found in Qualcomm IPQ5018 & IPQ5332 SoCs.
+
+properties:
+ compatible:
+ enum:
+ - qcom,ipq5018-uniphy-usb-ss-phy
+ - qcom,ipq5332-uniphy-usb-ss-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ minItems: 2
+ maxItems: 3
+
+ resets:
+ maxItems: 1
+
+ vdd-supply:
+ description:
+ Phandle to 5V regulator supply to PHY digital circuit.
+
+ qcom,phy-usb-mux-sel:
+ description: |
+ Mux selection for USB PHY. The USB3 and PCIe PHY pads are muxed and the
+ mux selection is done via a register in TCSR syscon.
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ items:
+ - items:
+ - description: phandle of TCSR syscon
+ - description: offset of PHY mux selection register
+
+ "#clock-cells":
+ const: 0
+
+ "#phy-cells":
+ const: 0
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - resets
+ - vdd-supply
+ - qcom,phy-usb-mux-sel
+ - "#clock-cells"
+ - "#phy-cells"
+
+additionalProperties: false
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,ipq5018-uniphy-usb-ss-phy
+ then:
+ properties:
+ clocks:
+ items:
+ - description: USB3 PHY CFG AHB clock
+ - description: USB3 pipe clock
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,ipq5332-uniphy-usb-ss-phy
+ then:
+ properties:
+ clocks:
+ items:
+ - description: Shared PCIe/USB3 PHY AHB clock
+ - description: USB3 PHY CFG AHB clock
+ - description: USB3 pipe clock
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,ipq5332-gcc.h>
+
+ phy@4b0000 {
+ compatible = "qcom,ipq5332-uniphy-usb-ss-phy";
+ reg = <0x4b0000 0x800>;
+
+ clocks = <&gcc GCC_PCIE3X1_PHY_AHB_CLK>,
+ <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
+ <&gcc GCC_USB0_PIPE_CLK>;
+ resets = <&gcc GCC_USB0_PHY_BCR>;
+
+ #clock-cells = <0>;
+ #phy-cells = <0>;
+
+ qcom,phy-usb-mux-sel = <&tcsr 0x10540>;
+
+ vdd-supply = <®ulator_fixed_5p0>;
+ };
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 01/14] dt-bindings: phy: Document the Qualcomm IPQ5332 UNIPHY USB Super-speed PHY George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 03/14] arm64: dts: qcom: ipq5018: Add USB Super-Speed PHY node George Moussalem via B4 Relay
` (11 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Adds Qualcomm 22ull Super-Speed USB UNIPHY driver support which is
present in Qualcomm IPQ5018 & IPQ5332 SoCs.
This PHY is interfaced with SNPS DWC3 USB and SNPS DWC PCIe. Either one
of the interface can use the it and selection is done via mux present in
TCSR register. By default, the PHY is configured for PCIe interface and
needs this driver to configure the mux for USB.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
drivers/phy/qualcomm/Kconfig | 10 +
drivers/phy/qualcomm/Makefile | 1 +
.../phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c | 304 +++++++++++++++++++++
3 files changed, 315 insertions(+)
diff --git a/drivers/phy/qualcomm/Kconfig b/drivers/phy/qualcomm/Kconfig
index 60a0ead127fa..1ceb04afe1e3 100644
--- a/drivers/phy/qualcomm/Kconfig
+++ b/drivers/phy/qualcomm/Kconfig
@@ -158,6 +158,16 @@ config PHY_QCOM_UNIPHY_PCIE_28LP
handles PHY initialization, clock management required after
resetting the hardware and power management.
+config PHY_QCOM_UNIPHY_USB_22ULL
+ tristate "Qualcomm IPQ5332 UNIPHY USB Super-Speed 22ull driver"
+ depends on USB && (ARCH_QCOM || COMPILE_TEST)
+ select GENERIC_PHY
+ help
+ Enable this to support the Qualcomm USB Super-Speed UNIPHY transceiver
+ that is used on Qualcomm IPQ5018 and IPQ5332 SoCs with DWC3 USB core.
+ It handles PHY initialization, clock management required after
+ resetting the hardware and power management.
+
config PHY_QCOM_M31_EUSB
tristate "Qualcomm M31 eUSB2 PHY driver support"
depends on USB && (ARCH_QCOM || COMPILE_TEST)
diff --git a/drivers/phy/qualcomm/Makefile b/drivers/phy/qualcomm/Makefile
index b71a6a0bed3f..295e8042e3f4 100644
--- a/drivers/phy/qualcomm/Makefile
+++ b/drivers/phy/qualcomm/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_PHY_QCOM_QMP_USB_LEGACY) += phy-qcom-qmp-usb-legacy.o
obj-$(CONFIG_PHY_QCOM_QUSB2) += phy-qcom-qusb2.o
obj-$(CONFIG_PHY_QCOM_EUSB2_REPEATER) += phy-qcom-eusb2-repeater.o
obj-$(CONFIG_PHY_QCOM_UNIPHY_PCIE_28LP) += phy-qcom-uniphy-pcie-28lp.o
+obj-$(CONFIG_PHY_QCOM_UNIPHY_USB_22ULL) += phy-qcom-uniphy-usb-ss-22ull.o
obj-$(CONFIG_PHY_QCOM_USB_HS) += phy-qcom-usb-hs.o
obj-$(CONFIG_PHY_QCOM_USB_HSIC) += phy-qcom-usb-hsic.o
obj-$(CONFIG_PHY_QCOM_USB_HS_28NM) += phy-qcom-usb-hs-28nm.o
diff --git a/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c b/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c
new file mode 100644
index 000000000000..089de7cebef0
--- /dev/null
+++ b/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c
@@ -0,0 +1,304 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2026, Qualcomm Innovation Center, Inc. All rights reserved.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/reset.h>
+
+#define SSCG_CTRL_REG_1 0x9c
+#define SSCG_CTRL_REG_2 0xa0
+#define SSCG_CTRL_REG_3 0xa4
+#define SSCG_CTRL_REG_4 0xa8
+#define SSCG_CTRL_REG_5 0xac
+
+#define PCIE_USB_COMBO_PHY_CFG_MISC1 0x214
+#define PCIE_USB_COMBO_PHY_CFG_RX_AFE_2 0x7C4
+#define PCIE_USB_COMBO_PHY_CFG_RX_DLF_DEMUX_2 0x7E8
+
+#define TCSR_USB_MUX_SEL BIT(0)
+
+struct phy_init_tbl {
+ unsigned int offset;
+ unsigned int val;
+};
+
+struct uniphy_cfg {
+ const struct phy_init_tbl *init_seq;
+ int num_init_seq;
+ u32 pipe_clk_rate;
+};
+
+struct uniphy_usb {
+ struct device *dev;
+ const struct uniphy_cfg *cfg;
+ struct phy *phy;
+ void __iomem *base;
+ struct clk_bulk_data *clks;
+ unsigned int num_clks;
+ struct reset_control *reset;
+ struct regulator *vreg;
+ struct regmap *tcsr;
+ unsigned int mux_offset;
+};
+
+#define PHY_INIT_CFG(o, v) \
+ { \
+ .offset = o, \
+ .val = v, \
+ }
+
+static const struct phy_init_tbl ipq5018_usb_uniphy_init_tbl[] = {
+ PHY_INIT_CFG(SSCG_CTRL_REG_4, 0x1cb9),
+ PHY_INIT_CFG(SSCG_CTRL_REG_5, 0x023a),
+ PHY_INIT_CFG(SSCG_CTRL_REG_3, 0xd360),
+ PHY_INIT_CFG(SSCG_CTRL_REG_1, 0x1),
+ PHY_INIT_CFG(SSCG_CTRL_REG_2, 0xeb),
+};
+
+static const struct phy_init_tbl ipq5332_usb_uniphy_init_tbl[] = {
+ PHY_INIT_CFG(PCIE_USB_COMBO_PHY_CFG_RX_AFE_2, 0x1076),
+ PHY_INIT_CFG(PCIE_USB_COMBO_PHY_CFG_RX_DLF_DEMUX_2, 0x3142),
+ PHY_INIT_CFG(PCIE_USB_COMBO_PHY_CFG_MISC1, 0x3),
+};
+
+static const struct uniphy_cfg ipq5018_cfg = {
+ .init_seq = ipq5018_usb_uniphy_init_tbl,
+ .num_init_seq = ARRAY_SIZE(ipq5018_usb_uniphy_init_tbl),
+ .pipe_clk_rate = 250000000,
+};
+
+static const struct uniphy_cfg ipq5332_cfg = {
+ .init_seq = ipq5332_usb_uniphy_init_tbl,
+ .num_init_seq = ARRAY_SIZE(ipq5332_usb_uniphy_init_tbl),
+ .pipe_clk_rate = 250000000,
+};
+
+static int uniphy_usb_init(struct phy *phy)
+{
+ struct uniphy_usb *uniphy = phy_get_drvdata(phy);
+ const struct uniphy_cfg *cfg = uniphy->cfg;
+ const struct phy_init_tbl *tbl = cfg->init_seq;
+ void __iomem *base = uniphy->base;
+ struct device *dev = uniphy->dev;
+ int i, ret;
+
+ ret = regulator_enable(uniphy->vreg);
+ if (ret) {
+ dev_err(dev, "failed to enable regulator: %d\n", ret);
+ return ret;
+ }
+
+ /* Perform phy reset */
+ ret = reset_control_assert(uniphy->reset);
+ if (ret) {
+ dev_err(dev, "Failed to assert reset: %d\n", ret);
+ goto err_disable_regulator;
+ }
+
+ usleep_range(1, 5);
+
+ ret = reset_control_deassert(uniphy->reset);
+ if (ret) {
+ dev_err(dev, "Failed to deassert reset: %d\n", ret);
+ goto err_assert_reset;
+ }
+
+ ret = clk_bulk_prepare_enable(uniphy->num_clks, uniphy->clks);
+ if (ret) {
+ dev_err(dev, "failed to enable clocks: %d\n", ret);
+ goto err_assert_reset;
+ }
+
+ /* phy autoload delay */
+ usleep_range(35, 40);
+
+ for (i = 0; i < cfg->num_init_seq; i++)
+ writel(tbl[i].val, base + tbl[i].offset);
+
+ return 0;
+
+err_assert_reset:
+ /* Assert phy reset */
+ reset_control_assert(uniphy->reset);
+
+err_disable_regulator:
+ regulator_disable(uniphy->vreg);
+
+ return ret;
+}
+
+static int uniphy_usb_shutdown(struct phy *phy)
+{
+ struct uniphy_usb *uniphy = phy_get_drvdata(phy);
+
+ clk_bulk_disable_unprepare(uniphy->num_clks, uniphy->clks);
+
+ /* Assert phy reset */
+ reset_control_assert(uniphy->reset);
+
+ regulator_disable(uniphy->vreg);
+
+ return 0;
+}
+
+static const struct phy_ops uniphy_usb_ops = {
+ .power_on = uniphy_usb_init,
+ .power_off = uniphy_usb_shutdown,
+ .owner = THIS_MODULE,
+};
+
+/*
+ * Register a fixed rate pipe clock.
+ *
+ * The <s>_pipe_clksrc generated by PHY goes to the GCC that gate
+ * controls it. The <s>_pipe_clk coming out of the GCC is requested
+ * by the PHY driver for its operations.
+ * We register the <s>_pipe_clksrc here. The gcc driver takes care
+ * of assigning this <s>_pipe_clksrc as parent to <s>_pipe_clk.
+ * Below picture shows this relationship.
+ *
+ * +---------------+
+ * | PHY block |<<---------------------------------------+
+ * | | |
+ * | +-------+ | +-----+ |
+ * I/P---^-->| PLL |---^--->pipe_clksrc--->| GCC |--->pipe_clk---+
+ * clk | +-------+ | +-----+
+ * +---------------+
+ */
+static int phy_pipe_clk_register(struct uniphy_usb *uniphy, int id)
+{
+ struct device *dev = uniphy->dev;
+ struct clk_hw *hw;
+ char name[64];
+
+ snprintf(name, sizeof(name), "usbphy%d_pipe_clk_src", id);
+ hw = devm_clk_hw_register_fixed_rate(dev, name, NULL, 0,
+ uniphy->cfg->pipe_clk_rate);
+ if (IS_ERR(hw))
+ return PTR_ERR(hw);
+
+ return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, hw);
+}
+
+static int qcom_uniphy_usb_mux_select(struct uniphy_usb *uniphy, bool enable)
+{
+ return regmap_update_bits(uniphy->tcsr, uniphy->mux_offset,
+ TCSR_USB_MUX_SEL,
+ enable ? TCSR_USB_MUX_SEL : 0);
+}
+
+static int qcom_uniphy_usb_probe(struct platform_device *pdev)
+{
+ struct phy_provider *phy_provider;
+ struct device *dev = &pdev->dev;
+ struct uniphy_usb *uniphy;
+ int ret;
+
+ uniphy = devm_kzalloc(dev, sizeof(*uniphy), GFP_KERNEL);
+ if (!uniphy)
+ return -ENOMEM;
+
+ uniphy->dev = dev;
+
+ uniphy->cfg = of_device_get_match_data(dev);
+ if (!uniphy->cfg)
+ return -EINVAL;
+
+ uniphy->base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(uniphy->base))
+ return dev_err_probe(dev, PTR_ERR(uniphy->base),
+ "failed to map base\n");
+
+ ret = devm_clk_bulk_get_all(dev, &uniphy->clks);
+ if (ret < 0)
+ return dev_err_probe(dev, ret, "failed to get clocks\n");
+
+ uniphy->num_clks = ret;
+
+ uniphy->reset = devm_reset_control_get_exclusive_by_index(dev, 0);
+ if (IS_ERR(uniphy->reset))
+ return dev_err_probe(dev, PTR_ERR(uniphy->reset),
+ "failed to get reset\n");
+
+ uniphy->vreg = devm_regulator_get(dev, "vdd");
+ if (IS_ERR(uniphy->vreg))
+ return dev_err_probe(dev, PTR_ERR(uniphy->vreg),
+ "failed to get vreg\n");
+
+ uniphy->tcsr = syscon_regmap_lookup_by_phandle_args(dev->of_node,
+ "qcom,phy-usb-mux-sel",
+ 1, &uniphy->mux_offset);
+ if (IS_ERR(uniphy->tcsr)) {
+ ret = PTR_ERR(uniphy->tcsr);
+ uniphy->tcsr = NULL;
+ return dev_err_probe(dev, ret, "failed to get regmap\n");
+ }
+
+ /*
+ * Select the USB position of the phy mux before anything comes out
+ * of reset. Selecting it later leaves the SuperSpeed pads muxed away
+ * while the controller resets, and the SS link doesn't train and is
+ * stuck in Rx.Detect (USB2 is unaffected as it isn't muxed).
+ */
+ ret = qcom_uniphy_usb_mux_select(uniphy, true);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to select USB mux\n");
+
+ uniphy->phy = devm_phy_create(dev, NULL, &uniphy_usb_ops);
+ if (IS_ERR(uniphy->phy)) {
+ ret = PTR_ERR(uniphy->phy);
+ return dev_err_probe(dev, ret, "failed to create PHY\n");
+ }
+
+ ret = phy_pipe_clk_register(uniphy, uniphy->phy->id);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to register pipe clk\n");
+
+ phy_set_drvdata(uniphy->phy, uniphy);
+
+ phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+
+ ret = PTR_ERR_OR_ZERO(phy_provider);
+
+ return ret;
+}
+
+static void qcom_uniphy_usb_remove(struct platform_device *pdev)
+{
+ struct uniphy_usb *uniphy = platform_get_drvdata(pdev);
+
+ qcom_uniphy_usb_mux_select(uniphy, false);
+}
+
+static const struct of_device_id qcom_uniphy_usb_of_match[] = {
+ { .compatible = "qcom,ipq5018-uniphy-usb-ss-phy", .data = &ipq5018_cfg},
+ { .compatible = "qcom,ipq5332-uniphy-usb-ss-phy", .data = &ipq5332_cfg},
+ { },
+};
+MODULE_DEVICE_TABLE(of, qcom_uniphy_usb_of_match);
+
+static struct platform_driver qcom_uniphy_usb_driver = {
+ .probe = qcom_uniphy_usb_probe,
+ .remove = qcom_uniphy_usb_remove,
+ .driver = {
+ .of_match_table = qcom_uniphy_usb_of_match,
+ .name = "qcom,uniphy-usb-ss-phy",
+ }
+};
+module_platform_driver(qcom_uniphy_usb_driver);
+
+MODULE_DESCRIPTION("Qualcomm UNIPHY Super-Speed USB PHY driver");
+MODULE_LICENSE("GPL");
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 03/14] arm64: dts: qcom: ipq5018: Add USB Super-Speed PHY node
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 01/14] dt-bindings: phy: Document the Qualcomm IPQ5332 UNIPHY USB Super-speed PHY George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 04/14] arm64: dts: qcom: ipq5332: Flatten usb controller node George Moussalem via B4 Relay
` (10 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Add USB Super-Speed UNIPHY node and populate the USB DT clock on the GCC
node for the GCC to gate the PIPE clock supplied by the USB3 PHY.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index 4fc627b47fe7..d259a841ad17 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -179,6 +179,23 @@ usbphy0: phy@5b000 {
status = "disabled";
};
+ usbphy1: phy@5d000 {
+ compatible = "qcom,ipq5018-uniphy-usb-ss-phy";
+ reg = <0x0005d000 0x800>;
+
+ clocks = <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
+ <&gcc GCC_USB0_PIPE_CLK>;
+
+ resets = <&gcc GCC_USB0_PHY_BCR>;
+
+ #clock-cells = <0>;
+ #phy-cells = <0>;
+
+ qcom,phy-usb-mux-sel = <&tcsr 0x10540>;
+
+ status = "disabled";
+ };
+
pcie1_phy: phy@7e000 {
compatible = "qcom,ipq5018-uniphy-pcie-phy";
reg = <0x0007e000 0x800>;
@@ -436,7 +453,7 @@ gcc: clock-controller@1800000 {
<&sleep_clk>,
<&pcie0_phy>,
<&pcie1_phy>,
- <0>,
+ <&usbphy1>,
<&gephy_rx_clk>,
<&gephy_tx_clk>,
<0>,
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 04/14] arm64: dts: qcom: ipq5332: Flatten usb controller node
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (2 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 03/14] arm64: dts: qcom: ipq5018: Add USB Super-Speed PHY node George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 05/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
` (9 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Flatten usb controller node and update to using latest bindings and
flattened driver approach.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts | 6 ++--
arch/arm64/boot/dts/qcom/ipq5332.dtsi | 51 +++++++++++++----------------
2 files changed, 24 insertions(+), 33 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts b/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
index c224ffc65b08..25a70cd884c0 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
+++ b/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
@@ -90,11 +90,9 @@ spi_0_cs_pins: spi-0-cs-state {
};
&usb {
- status = "okay";
-};
-
-&usb_dwc {
dr_mode = "host";
+
+ status = "okay";
};
&usbphy0 {
diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
index 74d9de8d7641..83d0377455da 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
@@ -493,16 +493,9 @@ qpic_nand: spi@79b0000 {
status = "disabled";
};
- usb: usb@8af8800 {
- compatible = "qcom,ipq5332-dwc3", "qcom,dwc3";
- reg = <0x08af8800 0x400>;
-
- interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "pwr_event",
- "dp_hs_phy_irq",
- "dm_hs_phy_irq";
+ usb: usb@8a00000 {
+ compatible = "qcom,ipq5332-dwc3", "qcom,snps-dwc3";
+ reg = <0x08a00000 0xe000>;
clocks = <&gcc GCC_USB0_MASTER_CLK>,
<&gcc GCC_USB0_SLEEP_CLK>,
@@ -513,31 +506,31 @@ usb: usb@8af8800 {
resets = <&gcc GCC_USB_BCR>;
- qcom,select-utmi-as-pipe-clk;
+ interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "dwc_usb3",
+ "pwr_event",
+ "dp_hs_phy_irq",
+ "dm_hs_phy_irq";
- #address-cells = <1>;
- #size-cells = <1>;
- ranges;
interconnects = <&gcc MASTER_SNOC_USB &gcc SLAVE_SNOC_USB>,
<&gcc MASTER_SNOC_USB &gcc SLAVE_SNOC_USB>;
interconnect-names = "usb-ddr", "apps-usb";
- status = "disabled";
+ phys = <&usbphy0>;
+ phy-names = "usb2-phy";
- usb_dwc: usb@8a00000 {
- compatible = "snps,dwc3";
- reg = <0x08a00000 0xe000>;
- clocks = <&gcc GCC_USB0_MOCK_UTMI_CLK>;
- clock-names = "ref";
- interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
- phy-names = "usb2-phy";
- phys = <&usbphy0>;
- tx-fifo-resize;
- snps,is-utmi-l1-suspend;
- snps,hird-threshold = /bits/ 8 <0x0>;
- snps,dis_u2_susphy_quirk;
- snps,dis_u3_susphy_quirk;
- };
+ qcom,select-utmi-as-pipe-clk;
+
+ tx-fifo-resize;
+ snps,is-utmi-l1-suspend;
+ snps,hird-threshold = /bits/ 8 <0x0>;
+ snps,dis_u2_susphy_quirk;
+ snps,dis_u3_susphy_quirk;
+
+ status = "disabled";
};
intc: interrupt-controller@b000000 {
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 05/14] arm64: dts: qcom: ipq5018: Flatten usb controller node
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (3 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 04/14] arm64: dts: qcom: ipq5332: Flatten usb controller node George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 06/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5332 George Moussalem via B4 Relay
` (8 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Flatten usb controller node and update to using latest bindings and
flattened driver approach.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts | 6 ++--
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 49 +++++++++++---------------
2 files changed, 23 insertions(+), 32 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts b/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
index 33eef92b19b1..8efb2b21ed9e 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
+++ b/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
@@ -110,11 +110,9 @@ data-pins {
};
&usb {
- status = "okay";
-};
-
-&usb_dwc {
dr_mode = "host";
+
+ status = "okay";
};
&usbphy0 {
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index d259a841ad17..965649db36f3 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -597,16 +597,9 @@ qpic_nand: spi@79b0000 {
status = "disabled";
};
- usb: usb@8af8800 {
- compatible = "qcom,ipq5018-dwc3", "qcom,dwc3";
- reg = <0x08af8800 0x400>;
-
- interrupts = <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
- interrupt-names = "pwr_event",
- "dp_hs_phy_irq",
- "dm_hs_phy_irq";
+ usb: usb@8a00000 {
+ compatible = "qcom,ipq5018-dwc3", "qcom,snps-dwc3";
+ reg = <0x08a00000 0xe000>;
clocks = <&gcc GCC_USB0_MASTER_CLK>,
<&gcc GCC_SYS_NOC_USB0_AXI_CLK>,
@@ -617,29 +610,29 @@ usb: usb@8af8800 {
"sleep",
"mock_utmi";
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "dwc_usb3",
+ "pwr_event",
+ "dp_hs_phy_irq",
+ "dm_hs_phy_irq";
+
resets = <&gcc GCC_USB0_BCR>;
+ phys = <&usbphy0>;
+ phy-names = "usb2-phy";
+
qcom,select-utmi-as-pipe-clk;
- #address-cells = <1>;
- #size-cells = <1>;
- ranges;
- status = "disabled";
+ tx-fifo-resize;
+ snps,is-utmi-l1-suspend;
+ snps,hird-threshold = /bits/ 8 <0x0>;
+ snps,dis_u2_susphy_quirk;
+ snps,dis_u3_susphy_quirk;
- usb_dwc: usb@8a00000 {
- compatible = "snps,dwc3";
- reg = <0x08a00000 0xe000>;
- clocks = <&gcc GCC_USB0_MOCK_UTMI_CLK>;
- clock-names = "ref";
- interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
- phy-names = "usb2-phy";
- phys = <&usbphy0>;
- tx-fifo-resize;
- snps,is-utmi-l1-suspend;
- snps,hird-threshold = /bits/ 8 <0x0>;
- snps,dis_u2_susphy_quirk;
- snps,dis_u3_susphy_quirk;
- };
+ status = "disabled";
};
intc: interrupt-controller@b000000 {
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 06/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5332
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (4 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 05/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 07/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5018 George Moussalem via B4 Relay
` (7 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Add aux and lfps clocks in Qualcomm IPQ5332. These clocks are required
only for USB Super-Speed support.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
.../devicetree/bindings/usb/qcom,snps-dwc3.yaml | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml b/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
index ea60f7220afe..ce36109f5df7 100644
--- a/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
+++ b/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
@@ -173,7 +173,6 @@ allOf:
contains:
enum:
- qcom,ipq4019-dwc3
- - qcom,ipq5332-dwc3
then:
properties:
clocks:
@@ -185,6 +184,25 @@ allOf:
- const: sleep
- const: mock_utmi
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,ipq5332-dwc3
+ then:
+ properties:
+ clocks:
+ minItems: 5
+ maxItems: 5
+ clock-names:
+ items:
+ - const: core
+ - const: sleep
+ - const: mock_utmi
+ - const: aux
+ - const: lfps
+
- if:
properties:
compatible:
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 07/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5018
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (5 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 06/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5332 George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 08/14] arm64: dts: qcom: ipq5332: Add clocks required for USB3 support George Moussalem via B4 Relay
` (6 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Add aux and lfps clocks in Qualcomm IPQ5018. These clocks are required
only for USB Super-Speed support.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
.../devicetree/bindings/usb/qcom,snps-dwc3.yaml | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml b/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
index ce36109f5df7..e87cdf41f5f2 100644
--- a/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
+++ b/Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
@@ -184,6 +184,26 @@ allOf:
- const: sleep
- const: mock_utmi
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,ipq5018-dwc3
+ then:
+ properties:
+ clocks:
+ minItems: 6
+ maxItems: 6
+ clock-names:
+ items:
+ - const: core
+ - const: iface
+ - const: sleep
+ - const: mock_utmi
+ - const: aux
+ - const: lfps
+
- if:
properties:
compatible:
@@ -304,7 +324,6 @@ allOf:
compatible:
contains:
enum:
- - qcom,ipq5018-dwc3
- qcom,msm8994-dwc3
- qcom,qcs404-dwc3
then:
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 08/14] arm64: dts: qcom: ipq5332: Add clocks required for USB3 support
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (6 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 07/14] dt-bindings: usb: qcom,snps-dwc3: Add clocks for USB3 on Qualcomm IPQ5018 George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 09/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
` (5 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Add aux and lfps clocks to USB controller node for Super-Speed support.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5332.dtsi | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
index 83d0377455da..664586979ec4 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
@@ -499,10 +499,14 @@ usb: usb@8a00000 {
clocks = <&gcc GCC_USB0_MASTER_CLK>,
<&gcc GCC_USB0_SLEEP_CLK>,
- <&gcc GCC_USB0_MOCK_UTMI_CLK>;
+ <&gcc GCC_USB0_MOCK_UTMI_CLK>,
+ <&gcc GCC_USB0_AUX_CLK>,
+ <&gcc GCC_USB0_LFPS_CLK>;
clock-names = "core",
"sleep",
- "mock_utmi";
+ "mock_utmi",
+ "aux",
+ "lfps";
resets = <&gcc GCC_USB_BCR>;
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 09/14] arm64: dts: qcom: ipq5018: Add clocks required for USB3 support
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (7 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 08/14] arm64: dts: qcom: ipq5332: Add clocks required for USB3 support George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 10/14] arm64: dts: qcom: ipq5332: Add Super-Speed UNIPHY to USB node George Moussalem via B4 Relay
` (4 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Add aux and lfps clocks to USB controller node for Super-Speed support.
These clocks are required for USB3 mode only and are not needed for USB2
mode.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index 965649db36f3..c98889a7c26c 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -604,11 +604,21 @@ usb: usb@8a00000 {
clocks = <&gcc GCC_USB0_MASTER_CLK>,
<&gcc GCC_SYS_NOC_USB0_AXI_CLK>,
<&gcc GCC_USB0_SLEEP_CLK>,
- <&gcc GCC_USB0_MOCK_UTMI_CLK>;
+ <&gcc GCC_USB0_MOCK_UTMI_CLK>,
+ <&gcc GCC_USB0_AUX_CLK>,
+ <&gcc GCC_USB0_LFPS_CLK>;
clock-names = "core",
"iface",
"sleep",
- "mock_utmi";
+ "mock_utmi",
+ "aux",
+ "lfps";
+ assigned-clocks = <&gcc GCC_USB0_MASTER_CLK>,
+ <&gcc GCC_SYS_NOC_USB0_AXI_CLK>,
+ <&gcc GCC_USB0_MOCK_UTMI_CLK>;
+ assigned-clock-rates = <200000000>,
+ <200000000>,
+ <60000000>;
interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 10/14] arm64: dts: qcom: ipq5332: Add Super-Speed UNIPHY to USB node
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (8 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 09/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 10:56 ` Sergey Shtylyov
2026-08-12 9:34 ` [PATCH v2 11/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
` (3 subsequent siblings)
13 siblings, 1 reply; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Add the USB3 UNIPHY node to the USB controller node.
In addition, switch to the pipe clock supplied by the USB3 UNIPHY
instead of the UTMI clock.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5332.dtsi | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
index 664586979ec4..6253443c8d7f 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
@@ -523,10 +523,8 @@ usb: usb@8a00000 {
<&gcc MASTER_SNOC_USB &gcc SLAVE_SNOC_USB>;
interconnect-names = "usb-ddr", "apps-usb";
- phys = <&usbphy0>;
- phy-names = "usb2-phy";
-
- qcom,select-utmi-as-pipe-clk;
+ phys = <&usbphy0>, <&usbphy1>;
+ phy-names = "usb2-phy", "usb3-phy";
tx-fifo-resize;
snps,is-utmi-l1-suspend;
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH v2 10/14] arm64: dts: qcom: ipq5332: Add Super-Speed UNIPHY to USB node
2026-08-12 9:34 ` [PATCH v2 10/14] arm64: dts: qcom: ipq5332: Add Super-Speed UNIPHY to USB node George Moussalem via B4 Relay
@ 2026-08-12 10:56 ` Sergey Shtylyov
0 siblings, 0 replies; 17+ messages in thread
From: Sergey Shtylyov @ 2026-08-12 10:56 UTC (permalink / raw)
To: george.moussalem, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Praveenkumar I,
Varadarajan Narayanan, Philipp Zabel, Bjorn Andersson,
Konrad Dybcio, Greg Kroah-Hartman, Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb
On 8/12/26 12:34 PM, George Moussalem via B4 Relay wrote:
> From: Praveenkumar I <quic_ipkumar@quicinc.com>
>
> Add the USB3 UNIPHY node to the USB controller node.
You're not adding any nodes... Perhaps "refer to the USB3 UNIPHY node"?
> In addition, switch to the pipe clock supplied by the USB3 UNIPHY
> instead of the UTMI clock.
>
> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
> Signed-off-by: George Moussalem <george.moussalem@outlook.com>
> ---
> arch/arm64/boot/dts/qcom/ipq5332.dtsi | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> index 664586979ec4..6253443c8d7f 100644
> --- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> +++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> @@ -523,10 +523,8 @@ usb: usb@8a00000 {
> <&gcc MASTER_SNOC_USB &gcc SLAVE_SNOC_USB>;
> interconnect-names = "usb-ddr", "apps-usb";
>
> - phys = <&usbphy0>;
> - phy-names = "usb2-phy";
> -
> - qcom,select-utmi-as-pipe-clk;
> + phys = <&usbphy0>, <&usbphy1>;
> + phy-names = "usb2-phy", "usb3-phy";
>
> tx-fifo-resize;
> snps,is-utmi-l1-suspend;
>
MBR, Sergey
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 11/14] arm64: dts: qcom: ipq5018: Add Super-Speed UNIPHY to USB node
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (9 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 10/14] arm64: dts: qcom: ipq5332: Add Super-Speed UNIPHY to USB node George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 10:57 ` Sergey Shtylyov
2026-08-12 9:34 ` [PATCH v2 12/14] arm64: dts: qcom: ipq5332: Enable USB Super-Speed PHY George Moussalem via B4 Relay
` (2 subsequent siblings)
13 siblings, 1 reply; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Add the USB3 UNIPHY node to the USB controller node.
In addition, switch to the pipe clock supplied by the USB3 UNIPHY
instead of the UTMI clock.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5018.dtsi | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index c98889a7c26c..01b8181ffa40 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -631,10 +631,8 @@ usb: usb@8a00000 {
resets = <&gcc GCC_USB0_BCR>;
- phys = <&usbphy0>;
- phy-names = "usb2-phy";
-
- qcom,select-utmi-as-pipe-clk;
+ phys = <&usbphy0>, <&usbphy1>;
+ phy-names = "usb2-phy", "usb3-phy";
tx-fifo-resize;
snps,is-utmi-l1-suspend;
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH v2 11/14] arm64: dts: qcom: ipq5018: Add Super-Speed UNIPHY to USB node
2026-08-12 9:34 ` [PATCH v2 11/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
@ 2026-08-12 10:57 ` Sergey Shtylyov
0 siblings, 0 replies; 17+ messages in thread
From: Sergey Shtylyov @ 2026-08-12 10:57 UTC (permalink / raw)
To: george.moussalem, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Praveenkumar I,
Varadarajan Narayanan, Philipp Zabel, Bjorn Andersson,
Konrad Dybcio, Greg Kroah-Hartman, Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb
On 8/12/26 12:34 PM, George Moussalem via B4 Relay wrote:
> From: George Moussalem <george.moussalem@outlook.com>
>
> Add the USB3 UNIPHY node to the USB controller node.
The same comment here...
> In addition, switch to the pipe clock supplied by the USB3 UNIPHY
> instead of the UTMI clock.
>
> Signed-off-by: George Moussalem <george.moussalem@outlook.com>
> ---
> arch/arm64/boot/dts/qcom/ipq5018.dtsi | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
> index c98889a7c26c..01b8181ffa40 100644
> --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
> +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
> @@ -631,10 +631,8 @@ usb: usb@8a00000 {
>
> resets = <&gcc GCC_USB0_BCR>;
>
> - phys = <&usbphy0>;
> - phy-names = "usb2-phy";
> -
> - qcom,select-utmi-as-pipe-clk;
> + phys = <&usbphy0>, <&usbphy1>;
> + phy-names = "usb2-phy", "usb3-phy";
>
> tx-fifo-resize;
> snps,is-utmi-l1-suspend;
>
MBR, Sergey
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 12/14] arm64: dts: qcom: ipq5332: Enable USB Super-Speed PHY
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (10 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 11/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 13/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 14/14] arm64: defconfig: Enable qcom USB UNIPHY driver George Moussalem via B4 Relay
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Enable USB Super-Speed PHY support. The PCIe and USB3 PHYs share the
same MMIO address space, so override the compatible string to use the
USB3 PHY driver instead of the PCIe PHY driver and set the required
properties accordingly.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts b/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
index 25a70cd884c0..164f9a9a6c75 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
+++ b/arch/arm64/boot/dts/qcom/ipq5332-rdp468.dts
@@ -100,3 +100,22 @@ &usbphy0 {
status = "okay";
};
+
+/* this combo PHY supports PCIe and USB3 */
+&pcie0_phy {
+ compatible = "qcom,ipq5018-uniphy-usb-ss-phy";
+
+ clocks = <&gcc GCC_PCIE3X1_PHY_AHB_CLK>,
+ <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
+ <&gcc GCC_USB0_PIPE_CLK>;
+
+ resets = <&gcc GCC_USB0_PHY_BCR>;
+
+ qcom,phy-usb-mux-sel = <&tcsr 0x10540>;
+
+ vdd-supply = <®ulator_fixed_5p0>;
+
+ /delete-property/ num-lanes;
+
+ status = "okay";
+};
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 13/14] arm64: dts: qcom: ipq5018: Enable USB Super-Speed PHY
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (11 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 12/14] arm64: dts: qcom: ipq5332: Enable USB Super-Speed PHY George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
2026-08-12 9:34 ` [PATCH v2 14/14] arm64: defconfig: Enable qcom USB UNIPHY driver George Moussalem via B4 Relay
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem
From: George Moussalem <george.moussalem@outlook.com>
Add the 5V supply regulator and enable USB Super-Speed PHY support.
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts b/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
index 8efb2b21ed9e..ca29f271e673 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
+++ b/arch/arm64/boot/dts/qcom/ipq5018-rdp432-c2.dts
@@ -22,6 +22,14 @@ aliases {
chosen {
stdout-path = "serial0:115200n8";
};
+
+ regulator_fixed_5p0: regulator-s0500 {
+ compatible = "regulator-fixed";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-name = "fixed_5p0";
+ gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
+ };
};
&blsp1_uart1 {
@@ -119,6 +127,12 @@ &usbphy0 {
status = "okay";
};
+&usbphy1 {
+ vdd-supply = <®ulator_fixed_5p0>;
+
+ status = "okay";
+};
+
&xo_board_clk {
clock-div = <4>;
clock-mult = <1>;
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH v2 14/14] arm64: defconfig: Enable qcom USB UNIPHY driver
2026-08-12 9:34 [PATCH v2 00/14] Enable USB3 for Qualcomm IPQ5018 and IPQ5332 George Moussalem via B4 Relay
` (12 preceding siblings ...)
2026-08-12 9:34 ` [PATCH v2 13/14] arm64: dts: qcom: ipq5018: " George Moussalem via B4 Relay
@ 2026-08-12 9:34 ` George Moussalem via B4 Relay
13 siblings, 0 replies; 17+ messages in thread
From: George Moussalem via B4 Relay @ 2026-08-12 9:34 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Praveenkumar I, Varadarajan Narayanan,
Philipp Zabel, Bjorn Andersson, Konrad Dybcio, Greg Kroah-Hartman,
Wesley Cheng
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, linux-usb,
George Moussalem, Krzysztof Kozlowski
From: Praveenkumar I <quic_ipkumar@quicinc.com>
Enable USB UNIPHY driver present in Qualcomm IPQ5332.
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: George Moussalem <george.moussalem@outlook.com>
---
arch/arm64/configs/defconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 6ec8d3a69c98..301cc21200bb 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -1782,6 +1782,7 @@ CONFIG_PHY_QCOM_QUSB2=m
CONFIG_PHY_QCOM_EUSB2_REPEATER=m
CONFIG_PHY_QCOM_M31_USB=m
CONFIG_PHY_QCOM_M31_EUSB=m
+CONFIG_PHY_QCOM_UNIPHY_USB_22ULL=m
CONFIG_PHY_QCOM_USB_HS=m
CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
CONFIG_PHY_QCOM_USB_HS_28NM=m
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread