[PATCH v7 1/2] dt-bindings: phy: Add CIX Sky1 USB3 PHY

From: Hongliang Yang

Date: Tue Nov 10 2026 - 22:12:07 EST


Add device tree binding for the CIX Sky1 USB3 PHY, the SuperSpeedPlus
PHY of the two USB3 Type-A ports of the SoC.

The two lanes are not separate devices: they live in one register
block, share the same clocks and resets, and are brought up by the
same initialization sequence. The node is therefore a single PHY
provider with #phy-cells = <0>, referenced by both controllers, and the
driver reference counts phy_init() and phy_exit() so that the block is
set up once for all of them.

Signed-off-by: Hongliang Yang <hongliang.yang@xxxxxxxxxxx>
---
Changes in v7:
- Describe the PHY as one provider of both lanes and say why. v5 had
one child node per lane, v6 dropped them, and nothing in the binding
or the changelog said where the second lane went.
- Reword the description so that it describes the provider instead of
the register programming of the block.

Changes in v6:
- Drop the per-port child nodes. The parent node is the PHY provider
with #phy-cells = <0>, as the block drives both lanes and the ports
share the initialization sequence.
---
.../bindings/phy/cix,sky1-usb3-phy.yaml | 78 +++++++++++++++++++
MAINTAINERS | 1 +
2 files changed, 79 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/cix,sky1-usb3-phy.yaml

diff --git a/Documentation/devicetree/bindings/phy/cix,sky1-usb3-phy.yaml b/Documentation/devicetree/bindings/phy/cix,sky1-usb3-phy.yaml
new file mode 100644
index 000000000000..205140bf84e7
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/cix,sky1-usb3-phy.yaml
@@ -0,0 +1,78 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/cix,sky1-usb3-phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: CIX Sky1 USB3 PHY
+
+maintainers:
+ - Hongliang Yang <hongliang.yang@xxxxxxxxxxx>
+
+description: |
+ The CIX Sky1 USB3 PHY provides the SuperSpeed lanes of the USB3 Type-A
+ ports of the SoC.
+
+ Both lanes are programmed through one register block and share the
+ same clocks and resets, so the node is a single PHY provider with
+ #phy-cells = <0> that all consumers reference. The driver reference
+ counts phy_init() and phy_exit(), so the block is set up once for all
+ its consumers.
+
+properties:
+ compatible:
+ const: cix,sky1-usb3-phy
+
+ reg:
+ maxItems: 1
+
+ "#phy-cells":
+ const: 0
+
+ clocks:
+ items:
+ - description: APB register interface clock
+ - description: PHY reference clock
+
+ clock-names:
+ items:
+ - const: apb
+ - const: ref
+
+ resets:
+ items:
+ - description: PHY reset
+ - description: PHY APB preset
+
+ reset-names:
+ items:
+ - const: core
+ - const: apb
+
+required:
+ - compatible
+ - reg
+ - "#phy-cells"
+ - clocks
+ - clock-names
+ - resets
+ - reset-names
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/cix,sky1.h>
+ #include <dt-bindings/reset/cix,sky1-s5-system-control.h>
+
+ usb-phy@9210000 {
+ compatible = "cix,sky1-usb3-phy";
+ reg = <0x9210000 0x40000>;
+ #phy-cells = <0>;
+ clocks = <&scmi_clk CLK_TREE_USB3A_PHY3_GATE>,
+ <&scmi_clk CLK_TREE_USB3A_PHY_x2_REF>;
+ clock-names = "apb", "ref";
+ resets = <&s5_syscon SKY1_USBPHY_SS_RST_N>,
+ <&s5_syscon SKY1_USBPHY_SS_PST_N>;
+ reset-names = "core", "apb";
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index 93abbb315065..73783abe027e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2903,6 +2903,7 @@ S: Maintained
T: git https://github.com/cixtech/linux-mainline.git
F: Documentation/devicetree/bindings/arm/cix.yaml
F: Documentation/devicetree/bindings/mailbox/cix,sky1-mbox.yaml
+F: Documentation/devicetree/bindings/phy/cix,sky1-usb3-phy.yaml
F: arch/arm64/boot/dts/cix/
F: drivers/mailbox/cix-mailbox.c
K: \bcix\b
--
2.54.0