# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/phy/ti,phy-usb3.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: TI PIPE3 PHY Module

maintainers:
  - Roger Quadros <rogerq@ti.com>

description:
  The TI PIPE3 PHY is a high-speed SerDes (Serializer/Deserializer)
  transceiver integrated in OMAP5, DRA7xx/AM57xx, and similar SoCs.
  It supports multiple protocols (USB3, SATA, PCIe) using the PIPE3
  interface standard, which defines a common physical layer for
  high-speed serial interfaces.

properties:
  $nodename:
    pattern: "^(pcie-phy|usb3-phy|phy)@[0-9a-f]+$"

  compatible:
    enum:
      - ti,omap-usb3
      - ti,phy-pipe3-pcie
      - ti,phy-pipe3-sata
      - ti,phy-usb3

  reg:
    minItems: 2
    maxItems: 3

  reg-names:
    minItems: 2
    items:
      - const: phy_rx
      - const: phy_tx
      - const: pll_ctrl

  "#phy-cells":
    const: 0

  clocks:
    minItems: 2
    maxItems: 7

  clock-names:
    minItems: 2
    maxItems: 7
    items:
      enum: [wkupclk, sysclk, refclk, dpll_ref,
             dpll_ref_m2, phy-div, div-clk]

  syscon-phy-power:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    maxItems: 1
    items:
      items:
        - description: Phandle to the system control module
        - description: Register offset controlling PHY power

  syscon-pllreset:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    maxItems: 1
    items:
      items:
        - description: Phandle to the system control module
        - description: Register offset of CTRL_CORE_SMA_SW_0

  syscon-pcs:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    maxItems: 1
    items:
      items:
        - description: Phandle to the system control module
        - description: Register offset for PCS delay programming

  ctrl-module:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle of control module for PHY power on.
    deprecated: true

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: ti,phy-pipe3-sata
    then:
      properties:
        syscon-pllreset: true
    else:
      properties:
        syscon-pllreset: false

required:
  - reg
  - compatible
  - reg-names
  - "#phy-cells"
  - clocks
  - clock-names

unevaluatedProperties: false

examples:
  - |
    /* TI PIPE3 USB3 PHY */
    usb3-phy@4a084400 {
        compatible = "ti,phy-usb3";
        reg = <0x4a084400 0x80>,
              <0x4a084800 0x64>,
              <0x4a084c00 0x40>;
        reg-names = "phy_rx", "phy_tx", "pll_ctrl";
        #phy-cells = <0>;
        clocks = <&usb_phy_cm_clk32k>,
                 <&sys_clkin>,
                 <&usb_otg_ss_refclk960m>;
        clock-names = "wkupclk", "sysclk", "refclk";
        ctrl-module = <&omap_control_usb>;
    };

  - |
    /* TI PIPE3 SATA PHY */
    phy@4a096000 {
        compatible = "ti,phy-pipe3-sata";
        reg = <0x4a096000 0x80>,  /* phy_rx */
              <0x4a096400 0x64>,  /* phy_tx */
              <0x4a096800 0x40>;  /* pll_ctrl */
        reg-names = "phy_rx", "phy_tx", "pll_ctrl";
        clocks = <&sys_clkin1>, <&sata_ref_clk>;
        clock-names = "sysclk", "refclk";
        syscon-pllreset = <&scm_conf 0x3fc>;
        #phy-cells = <0>;
    };
...
