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