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

title: SpacemiT K1 PCIe/USB3 Combo PHY

maintainers:
  - Alex Elder <elder@riscstar.com>

description: >
  Of the three PHYs on the SpacemiT K1 SoC capable of being used for
  PCIe, one is a combo PHY that can also be configured for use by a
  USB 3 controller.  Using PCIe or USB 3 is a board design decision.

  The combo PHY is also the only PCIe PHY that is able to determine
  PCIe calibration values to use, and this must be determined before
  the other two PCIe PHYs can be used.  This calibration must be
  performed with the combo PHY in PCIe mode, and is this is done
  when the combo PHY is probed.

  The combo PHY uses an external oscillator as a reference clock.
  During normal operation, the PCIe or USB port driver is responsible
  for ensuring all other clocks needed by a PHY are enabled, and all
  resets affecting the PHY are deasserted.  However, for the combo
  PHY to perform calibration independent of whether it's later used
  for PCIe or USB, all PCIe mode clocks and resets must be defined.

properties:
  compatible:
    const: spacemit,k1-combo-phy

  reg:
    items:
      - description: PHY control registers

  clocks:
    items:
      - description: External oscillator used by the PHY PLL
      - description: DWC PCIe Data Bus Interface (DBI) clock
      - description: DWC PCIe application AXI-bus Master interface clock
      - description: DWC PCIe application AXI-bus slave interface clock

  clock-names:
    items:
      - const: refclk
      - const: dbi
      - const: mstr
      - const: slv

  resets:
    items:
      - description: PHY reset; remains deasserted after initialization
      - description: DWC PCIe Data Bus Interface (DBI) reset
      - description: DWC PCIe application AXI-bus Master interface reset
      - description: DWC PCIe application AXI-bus slave interface reset

  reset-names:
    items:
      - const: phy
      - const: dbi
      - const: mstr
      - const: slv

  spacemit,apmu:
    description:
      A phandle that refers to the APMU system controller, whose
      regmap is used in setting the mode
    $ref: /schemas/types.yaml#/definitions/phandle

  "#phy-cells":
    const: 1
    description:
      The argument value (PHY_TYPE_PCIE or PHY_TYPE_USB3) determines
      whether the PHY operates in PCIe or USB3 mode.

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - resets
  - reset-names
  - spacemit,apmu
  - "#phy-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/spacemit,k1-syscon.h>
    phy@c0b10000 {
        compatible = "spacemit,k1-combo-phy";
        reg = <0xc0b10000 0x1000>;
        clocks = <&vctcxo_24m>,
                 <&syscon_apmu CLK_PCIE0_DBI>,
                 <&syscon_apmu CLK_PCIE0_MASTER>,
                 <&syscon_apmu CLK_PCIE0_SLAVE>;
        clock-names = "refclk",
                      "dbi",
                      "mstr",
                      "slv";
        resets = <&syscon_apmu RESET_PCIE0_GLOBAL>,
                 <&syscon_apmu RESET_PCIE0_DBI>,
                 <&syscon_apmu RESET_PCIE0_MASTER>,
                 <&syscon_apmu RESET_PCIE0_SLAVE>;
        reset-names = "phy",
                      "dbi",
                      "mstr",
                      "slv";
        spacemit,apmu = <&syscon_apmu>;
        #phy-cells = <1>;
    };
