162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright (c) 2020 MediaTek
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/phy/mediatek,tphy.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: MediaTek T-PHY Controller
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Chunfeng Yun <chunfeng.yun@mediatek.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  The T-PHY controller supports physical layer functionality for a number of
1562306a36Sopenharmony_ci  controllers on MediaTek SoCs, includes USB2.0, USB3.0, PCIe and SATA.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci  Layout differences of banks between T-PHY V1 (mt8173/mt2701) and
1862306a36Sopenharmony_ci  T-PHY V2 (mt2712) / V3 (mt8195) when works on USB mode:
1962306a36Sopenharmony_ci  -----------------------------------
2062306a36Sopenharmony_ci  Version 1:
2162306a36Sopenharmony_ci  port        offset    bank
2262306a36Sopenharmony_ci  shared      0x0000    SPLLC
2362306a36Sopenharmony_ci              0x0100    FMREG
2462306a36Sopenharmony_ci  u2 port0    0x0800    U2PHY_COM
2562306a36Sopenharmony_ci  u3 port0    0x0900    U3PHYD
2662306a36Sopenharmony_ci              0x0a00    U3PHYD_BANK2
2762306a36Sopenharmony_ci              0x0b00    U3PHYA
2862306a36Sopenharmony_ci              0x0c00    U3PHYA_DA
2962306a36Sopenharmony_ci  u2 port1    0x1000    U2PHY_COM
3062306a36Sopenharmony_ci  u3 port1    0x1100    U3PHYD
3162306a36Sopenharmony_ci              0x1200    U3PHYD_BANK2
3262306a36Sopenharmony_ci              0x1300    U3PHYA
3362306a36Sopenharmony_ci              0x1400    U3PHYA_DA
3462306a36Sopenharmony_ci  u2 port2    0x1800    U2PHY_COM
3562306a36Sopenharmony_ci              ...
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci  Version 2/3:
3862306a36Sopenharmony_ci  port        offset    bank
3962306a36Sopenharmony_ci  u2 port0    0x0000    MISC
4062306a36Sopenharmony_ci              0x0100    FMREG
4162306a36Sopenharmony_ci              0x0300    U2PHY_COM
4262306a36Sopenharmony_ci  u3 port0    0x0700    SPLLC
4362306a36Sopenharmony_ci              0x0800    CHIP
4462306a36Sopenharmony_ci              0x0900    U3PHYD
4562306a36Sopenharmony_ci              0x0a00    U3PHYD_BANK2
4662306a36Sopenharmony_ci              0x0b00    U3PHYA
4762306a36Sopenharmony_ci              0x0c00    U3PHYA_DA
4862306a36Sopenharmony_ci  u2 port1    0x1000    MISC
4962306a36Sopenharmony_ci              0x1100    FMREG
5062306a36Sopenharmony_ci              0x1300    U2PHY_COM
5162306a36Sopenharmony_ci  u3 port1    0x1700    SPLLC
5262306a36Sopenharmony_ci              0x1800    CHIP
5362306a36Sopenharmony_ci              0x1900    U3PHYD
5462306a36Sopenharmony_ci              0x1a00    U3PHYD_BANK2
5562306a36Sopenharmony_ci              0x1b00    U3PHYA
5662306a36Sopenharmony_ci              0x1c00    U3PHYA_DA
5762306a36Sopenharmony_ci  u2 port2    0x2000    MISC
5862306a36Sopenharmony_ci              ...
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  SPLLC shared by u3 ports and FMREG shared by u2 ports on V1 are put back
6162306a36Sopenharmony_ci  into each port; a new bank MISC for u2 ports and CHIP for u3 ports are
6262306a36Sopenharmony_ci  added on V2; the FMREG bank for slew rate calibration is not used anymore
6362306a36Sopenharmony_ci  and reserved on V3;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciproperties:
6662306a36Sopenharmony_ci  $nodename:
6762306a36Sopenharmony_ci    pattern: "^t-phy(@[0-9a-f]+)?$"
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  compatible:
7062306a36Sopenharmony_ci    oneOf:
7162306a36Sopenharmony_ci      - items:
7262306a36Sopenharmony_ci          - enum:
7362306a36Sopenharmony_ci              - mediatek,mt2701-tphy
7462306a36Sopenharmony_ci              - mediatek,mt7623-tphy
7562306a36Sopenharmony_ci              - mediatek,mt7622-tphy
7662306a36Sopenharmony_ci              - mediatek,mt8516-tphy
7762306a36Sopenharmony_ci          - const: mediatek,generic-tphy-v1
7862306a36Sopenharmony_ci      - items:
7962306a36Sopenharmony_ci          - enum:
8062306a36Sopenharmony_ci              - mediatek,mt2712-tphy
8162306a36Sopenharmony_ci              - mediatek,mt7629-tphy
8262306a36Sopenharmony_ci              - mediatek,mt7986-tphy
8362306a36Sopenharmony_ci              - mediatek,mt8183-tphy
8462306a36Sopenharmony_ci              - mediatek,mt8186-tphy
8562306a36Sopenharmony_ci              - mediatek,mt8192-tphy
8662306a36Sopenharmony_ci              - mediatek,mt8365-tphy
8762306a36Sopenharmony_ci          - const: mediatek,generic-tphy-v2
8862306a36Sopenharmony_ci      - items:
8962306a36Sopenharmony_ci          - enum:
9062306a36Sopenharmony_ci              - mediatek,mt8188-tphy
9162306a36Sopenharmony_ci              - mediatek,mt8195-tphy
9262306a36Sopenharmony_ci          - const: mediatek,generic-tphy-v3
9362306a36Sopenharmony_ci      - const: mediatek,mt2701-u3phy
9462306a36Sopenharmony_ci        deprecated: true
9562306a36Sopenharmony_ci      - const: mediatek,mt2712-u3phy
9662306a36Sopenharmony_ci        deprecated: true
9762306a36Sopenharmony_ci      - const: mediatek,mt8173-u3phy
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci  reg:
10062306a36Sopenharmony_ci    description:
10162306a36Sopenharmony_ci      Register shared by multiple ports, exclude port's private register.
10262306a36Sopenharmony_ci      It is needed for T-PHY V1, such as mt2701 and mt8173, but not for
10362306a36Sopenharmony_ci      T-PHY V2/V3, such as mt2712.
10462306a36Sopenharmony_ci    maxItems: 1
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci  "#address-cells":
10762306a36Sopenharmony_ci    enum: [1, 2]
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci  "#size-cells":
11062306a36Sopenharmony_ci    enum: [1, 2]
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci  # Used with non-empty value if optional 'reg' is not provided.
11362306a36Sopenharmony_ci  # The format of the value is an arbitrary number of triplets of
11462306a36Sopenharmony_ci  # (child-bus-address, parent-bus-address, length).
11562306a36Sopenharmony_ci  ranges: true
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci  mediatek,src-ref-clk-mhz:
11862306a36Sopenharmony_ci    description:
11962306a36Sopenharmony_ci      Frequency of reference clock for slew rate calibrate
12062306a36Sopenharmony_ci    default: 26
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci  mediatek,src-coef:
12362306a36Sopenharmony_ci    description:
12462306a36Sopenharmony_ci      Coefficient for slew rate calibrate, depends on SoC process
12562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
12662306a36Sopenharmony_ci    default: 28
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci# Required child node:
12962306a36Sopenharmony_cipatternProperties:
13062306a36Sopenharmony_ci  "^(usb|pcie|sata)-phy@[0-9a-f]+$":
13162306a36Sopenharmony_ci    type: object
13262306a36Sopenharmony_ci    description:
13362306a36Sopenharmony_ci      A sub-node is required for each port the controller provides.
13462306a36Sopenharmony_ci      Address range information including the usual 'reg' property
13562306a36Sopenharmony_ci      is used inside these nodes to describe the controller's topology.
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci    properties:
13862306a36Sopenharmony_ci      reg:
13962306a36Sopenharmony_ci        maxItems: 1
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci      clocks:
14262306a36Sopenharmony_ci        minItems: 1
14362306a36Sopenharmony_ci        items:
14462306a36Sopenharmony_ci          - description: Reference clock, (HS is 48Mhz, SS/P is 24~27Mhz)
14562306a36Sopenharmony_ci          - description: Reference clock of analog phy
14662306a36Sopenharmony_ci        description:
14762306a36Sopenharmony_ci          Uses both clocks if the clock of analog and digital phys are
14862306a36Sopenharmony_ci          separated, otherwise uses "ref" clock only if needed.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci      clock-names:
15162306a36Sopenharmony_ci        minItems: 1
15262306a36Sopenharmony_ci        items:
15362306a36Sopenharmony_ci          - const: ref
15462306a36Sopenharmony_ci          - const: da_ref
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci      "#phy-cells":
15762306a36Sopenharmony_ci        const: 1
15862306a36Sopenharmony_ci        description: |
15962306a36Sopenharmony_ci          The cells contain the following arguments.
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci          - description: The PHY type
16262306a36Sopenharmony_ci              enum:
16362306a36Sopenharmony_ci                - PHY_TYPE_USB2
16462306a36Sopenharmony_ci                - PHY_TYPE_USB3
16562306a36Sopenharmony_ci                - PHY_TYPE_PCIE
16662306a36Sopenharmony_ci                - PHY_TYPE_SATA
16762306a36Sopenharmony_ci                - PHY_TYPE_SGMII
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci      nvmem-cells:
17062306a36Sopenharmony_ci        items:
17162306a36Sopenharmony_ci          - description: internal R efuse for U2 PHY or U3/PCIe PHY
17262306a36Sopenharmony_ci          - description: rx_imp_sel efuse for U3/PCIe PHY
17362306a36Sopenharmony_ci          - description: tx_imp_sel efuse for U3/PCIe PHY
17462306a36Sopenharmony_ci        description: |
17562306a36Sopenharmony_ci          Phandles to nvmem cell that contains the efuse data;
17662306a36Sopenharmony_ci          Available only for U2 PHY or U3/PCIe PHY of version 2/3, these
17762306a36Sopenharmony_ci          three items should be provided at the same time for U3/PCIe PHY,
17862306a36Sopenharmony_ci          when use software to load efuse;
17962306a36Sopenharmony_ci          If unspecified, will use hardware auto-load efuse.
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci      nvmem-cell-names:
18262306a36Sopenharmony_ci        items:
18362306a36Sopenharmony_ci          - const: intr
18462306a36Sopenharmony_ci          - const: rx_imp
18562306a36Sopenharmony_ci          - const: tx_imp
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci      # The following optional vendor properties are only for debug or HQA test
18862306a36Sopenharmony_ci      mediatek,eye-src:
18962306a36Sopenharmony_ci        description:
19062306a36Sopenharmony_ci          The value of slew rate calibrate (U2 phy)
19162306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
19262306a36Sopenharmony_ci        minimum: 1
19362306a36Sopenharmony_ci        maximum: 7
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci      mediatek,eye-vrt:
19662306a36Sopenharmony_ci        description:
19762306a36Sopenharmony_ci          The selection of VRT reference voltage (U2 phy)
19862306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
19962306a36Sopenharmony_ci        minimum: 1
20062306a36Sopenharmony_ci        maximum: 7
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci      mediatek,eye-term:
20362306a36Sopenharmony_ci        description:
20462306a36Sopenharmony_ci          The selection of HS_TX TERM reference voltage (U2 phy)
20562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
20662306a36Sopenharmony_ci        minimum: 1
20762306a36Sopenharmony_ci        maximum: 7
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci      mediatek,intr:
21062306a36Sopenharmony_ci        description:
21162306a36Sopenharmony_ci          The selection of internal resistor (U2 phy)
21262306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
21362306a36Sopenharmony_ci        minimum: 1
21462306a36Sopenharmony_ci        maximum: 31
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci      mediatek,discth:
21762306a36Sopenharmony_ci        description:
21862306a36Sopenharmony_ci          The selection of disconnect threshold (U2 phy)
21962306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
22062306a36Sopenharmony_ci        minimum: 1
22162306a36Sopenharmony_ci        maximum: 15
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci      mediatek,pre-emphasis:
22462306a36Sopenharmony_ci        description:
22562306a36Sopenharmony_ci          The level of pre-emphasis which used to widen the eye opening and
22662306a36Sopenharmony_ci          boost eye swing, the unit step is about 4.16% increment; e.g. the
22762306a36Sopenharmony_ci          level 1 means amplitude increases about 4.16%, the level 2 is about
22862306a36Sopenharmony_ci          8.3% etc. (U2 phy)
22962306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
23062306a36Sopenharmony_ci        minimum: 1
23162306a36Sopenharmony_ci        maximum: 3
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci      mediatek,bc12:
23462306a36Sopenharmony_ci        description:
23562306a36Sopenharmony_ci          Specify the flag to enable BC1.2 if support it
23662306a36Sopenharmony_ci        type: boolean
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci      mediatek,syscon-type:
23962306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/phandle-array
24062306a36Sopenharmony_ci        maxItems: 1
24162306a36Sopenharmony_ci        description:
24262306a36Sopenharmony_ci          A phandle to syscon used to access the register of type switch,
24362306a36Sopenharmony_ci          the field should always be 3 cells long.
24462306a36Sopenharmony_ci        items:
24562306a36Sopenharmony_ci          items:
24662306a36Sopenharmony_ci            - description:
24762306a36Sopenharmony_ci                The first cell represents a phandle to syscon
24862306a36Sopenharmony_ci            - description:
24962306a36Sopenharmony_ci                The second cell represents the register offset
25062306a36Sopenharmony_ci            - description:
25162306a36Sopenharmony_ci                The third cell represents the index of config segment
25262306a36Sopenharmony_ci              enum: [0, 1, 2, 3]
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci    required:
25562306a36Sopenharmony_ci      - reg
25662306a36Sopenharmony_ci      - "#phy-cells"
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci    additionalProperties: false
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_cirequired:
26162306a36Sopenharmony_ci  - compatible
26262306a36Sopenharmony_ci  - "#address-cells"
26362306a36Sopenharmony_ci  - "#size-cells"
26462306a36Sopenharmony_ci  - ranges
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ciadditionalProperties: false
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ciexamples:
26962306a36Sopenharmony_ci  - |
27062306a36Sopenharmony_ci    #include <dt-bindings/clock/mt8173-clk.h>
27162306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
27262306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
27362306a36Sopenharmony_ci    #include <dt-bindings/phy/phy.h>
27462306a36Sopenharmony_ci    usb@11271000 {
27562306a36Sopenharmony_ci        compatible = "mediatek,mt8173-mtu3", "mediatek,mtu3";
27662306a36Sopenharmony_ci        reg = <0x11271000 0x3000>, <0x11280700 0x0100>;
27762306a36Sopenharmony_ci        reg-names = "mac", "ippc";
27862306a36Sopenharmony_ci        phys = <&u2port0 PHY_TYPE_USB2>,
27962306a36Sopenharmony_ci               <&u3port0 PHY_TYPE_USB3>,
28062306a36Sopenharmony_ci               <&u2port1 PHY_TYPE_USB2>;
28162306a36Sopenharmony_ci        interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>;
28262306a36Sopenharmony_ci        clocks = <&topckgen CLK_TOP_USB30_SEL>;
28362306a36Sopenharmony_ci        clock-names = "sys_ck";
28462306a36Sopenharmony_ci    };
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci    t-phy@11290000 {
28762306a36Sopenharmony_ci        compatible = "mediatek,mt8173-u3phy";
28862306a36Sopenharmony_ci        reg = <0x11290000 0x800>;
28962306a36Sopenharmony_ci        #address-cells = <1>;
29062306a36Sopenharmony_ci        #size-cells = <1>;
29162306a36Sopenharmony_ci        ranges;
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci        u2port0: usb-phy@11290800 {
29462306a36Sopenharmony_ci            reg = <0x11290800 0x100>;
29562306a36Sopenharmony_ci            clocks = <&apmixedsys CLK_APMIXED_REF2USB_TX>, <&clk48m>;
29662306a36Sopenharmony_ci            clock-names = "ref", "da_ref";
29762306a36Sopenharmony_ci            #phy-cells = <1>;
29862306a36Sopenharmony_ci        };
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci        u3port0: usb-phy@11290900 {
30162306a36Sopenharmony_ci            reg = <0x11290900 0x700>;
30262306a36Sopenharmony_ci            clocks = <&clk26m>;
30362306a36Sopenharmony_ci            clock-names = "ref";
30462306a36Sopenharmony_ci            #phy-cells = <1>;
30562306a36Sopenharmony_ci        };
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci        u2port1: usb-phy@11291000 {
30862306a36Sopenharmony_ci            reg = <0x11291000 0x100>;
30962306a36Sopenharmony_ci            #phy-cells = <1>;
31062306a36Sopenharmony_ci        };
31162306a36Sopenharmony_ci    };
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci...
314