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/usb/mediatek,mtu3.yaml# 662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 762306a36Sopenharmony_ci 862306a36Sopenharmony_cititle: MediaTek USB3 DRD Controller 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cimaintainers: 1162306a36Sopenharmony_ci - Chunfeng Yun <chunfeng.yun@mediatek.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciallOf: 1462306a36Sopenharmony_ci - $ref: usb-drd.yaml 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cidescription: | 1762306a36Sopenharmony_ci The DRD controller has a glue layer IPPC (IP Port Control), and its host is 1862306a36Sopenharmony_ci based on xHCI. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciproperties: 2162306a36Sopenharmony_ci compatible: 2262306a36Sopenharmony_ci items: 2362306a36Sopenharmony_ci - enum: 2462306a36Sopenharmony_ci - mediatek,mt2712-mtu3 2562306a36Sopenharmony_ci - mediatek,mt8173-mtu3 2662306a36Sopenharmony_ci - mediatek,mt8183-mtu3 2762306a36Sopenharmony_ci - mediatek,mt8186-mtu3 2862306a36Sopenharmony_ci - mediatek,mt8188-mtu3 2962306a36Sopenharmony_ci - mediatek,mt8192-mtu3 3062306a36Sopenharmony_ci - mediatek,mt8195-mtu3 3162306a36Sopenharmony_ci - mediatek,mt8365-mtu3 3262306a36Sopenharmony_ci - const: mediatek,mtu3 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci reg: 3562306a36Sopenharmony_ci items: 3662306a36Sopenharmony_ci - description: the registers of device MAC 3762306a36Sopenharmony_ci - description: the registers of IP Port Control 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci reg-names: 4062306a36Sopenharmony_ci items: 4162306a36Sopenharmony_ci - const: mac 4262306a36Sopenharmony_ci - const: ippc 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci interrupts: 4562306a36Sopenharmony_ci description: 4662306a36Sopenharmony_ci use "interrupts-extended" when the interrupts are connected to the 4762306a36Sopenharmony_ci separate interrupt controllers 4862306a36Sopenharmony_ci minItems: 1 4962306a36Sopenharmony_ci items: 5062306a36Sopenharmony_ci - description: SSUSB device controller interrupt 5162306a36Sopenharmony_ci - description: optional, wakeup interrupt used to support runtime PM 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci interrupt-names: 5462306a36Sopenharmony_ci items: 5562306a36Sopenharmony_ci - const: device 5662306a36Sopenharmony_ci - const: wakeup 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci power-domains: 5962306a36Sopenharmony_ci description: A phandle to USB power domain node to control USB's MTCMOS 6062306a36Sopenharmony_ci maxItems: 1 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci clocks: 6362306a36Sopenharmony_ci minItems: 1 6462306a36Sopenharmony_ci items: 6562306a36Sopenharmony_ci - description: Controller clock used by normal mode 6662306a36Sopenharmony_ci - description: Reference clock used by low power mode etc 6762306a36Sopenharmony_ci - description: Mcu bus clock for register access 6862306a36Sopenharmony_ci - description: DMA bus clock for data transfer 6962306a36Sopenharmony_ci - description: DRD controller clock 7062306a36Sopenharmony_ci - description: Frame count clock 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci clock-names: 7362306a36Sopenharmony_ci minItems: 1 7462306a36Sopenharmony_ci items: 7562306a36Sopenharmony_ci - const: sys_ck # required, others are optional 7662306a36Sopenharmony_ci - const: ref_ck 7762306a36Sopenharmony_ci - const: mcu_ck 7862306a36Sopenharmony_ci - const: dma_ck 7962306a36Sopenharmony_ci - const: xhci_ck 8062306a36Sopenharmony_ci - const: frmcnt_ck 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci phys: 8362306a36Sopenharmony_ci description: 8462306a36Sopenharmony_ci List of all the USB PHYs used, it's better to keep the sequence 8562306a36Sopenharmony_ci as the hardware layout. 8662306a36Sopenharmony_ci minItems: 1 8762306a36Sopenharmony_ci items: 8862306a36Sopenharmony_ci - description: USB2/HS PHY # required, others are optional 8962306a36Sopenharmony_ci - description: USB3/SS(P) PHY 9062306a36Sopenharmony_ci - description: USB2/HS PHY # the following for backward compatible 9162306a36Sopenharmony_ci - description: USB3/SS(P) PHY 9262306a36Sopenharmony_ci - description: USB2/HS PHY 9362306a36Sopenharmony_ci - description: USB3/SS(P) PHY 9462306a36Sopenharmony_ci - description: USB2/HS PHY 9562306a36Sopenharmony_ci - description: USB3/SS(P) PHY 9662306a36Sopenharmony_ci - description: USB2/HS PHY 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci vusb33-supply: 9962306a36Sopenharmony_ci description: Regulator of USB AVDD3.3v 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci vbus-supply: 10262306a36Sopenharmony_ci deprecated: true 10362306a36Sopenharmony_ci description: | 10462306a36Sopenharmony_ci Regulator of USB VBUS5v, needed when supports dual-role mode. 10562306a36Sopenharmony_ci Particularly, if use an output GPIO to control a VBUS regulator, should 10662306a36Sopenharmony_ci model it as a regulator. See bindings/regulator/fixed-regulator.yaml 10762306a36Sopenharmony_ci It's considered valid for compatibility reasons, not allowed for 10862306a36Sopenharmony_ci new bindings, and put into a usb-connector node. 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci dr_mode: 11162306a36Sopenharmony_ci enum: [host, peripheral, otg] 11262306a36Sopenharmony_ci default: otg 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci maximum-speed: 11562306a36Sopenharmony_ci enum: [super-speed-plus, super-speed, high-speed, full-speed] 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci resets: 11862306a36Sopenharmony_ci maxItems: 1 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci "#address-cells": 12162306a36Sopenharmony_ci enum: [1, 2] 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci "#size-cells": 12462306a36Sopenharmony_ci enum: [1, 2] 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci ranges: true 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci extcon: 12962306a36Sopenharmony_ci deprecated: true 13062306a36Sopenharmony_ci description: | 13162306a36Sopenharmony_ci Phandle to the extcon device detecting the IDDIG state, needed 13262306a36Sopenharmony_ci when supports dual-role mode. 13362306a36Sopenharmony_ci It's considered valid for compatibility reasons, not allowed for 13462306a36Sopenharmony_ci new bindings, and use "usb-role-switch" property instead. 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci usb-role-switch: 13762306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/flag 13862306a36Sopenharmony_ci description: Support role switch. 13962306a36Sopenharmony_ci type: boolean 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci role-switch-default-mode: 14262306a36Sopenharmony_ci enum: [host, peripheral] 14362306a36Sopenharmony_ci default: host 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci connector: 14662306a36Sopenharmony_ci $ref: /schemas/connector/usb-connector.yaml# 14762306a36Sopenharmony_ci description: 14862306a36Sopenharmony_ci Connector for dual role switch, especially for "gpio-usb-b-connector" 14962306a36Sopenharmony_ci type: object 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci port: 15262306a36Sopenharmony_ci description: 15362306a36Sopenharmony_ci Any connector to the data bus of this controller should be modelled 15462306a36Sopenharmony_ci using the OF graph bindings specified, if the "usb-role-switch" 15562306a36Sopenharmony_ci property is used. See graph.txt 15662306a36Sopenharmony_ci $ref: /schemas/graph.yaml#/properties/port 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci enable-manual-drd: 15962306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/flag 16062306a36Sopenharmony_ci description: 16162306a36Sopenharmony_ci supports manual dual-role switch via debugfs; usually used when 16262306a36Sopenharmony_ci receptacle is TYPE-A and also wants to support dual-role mode. 16362306a36Sopenharmony_ci type: boolean 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci wakeup-source: 16662306a36Sopenharmony_ci description: enable USB remote wakeup, see power/wakeup-source.txt 16762306a36Sopenharmony_ci type: boolean 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci mediatek,syscon-wakeup: 17062306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle-array 17162306a36Sopenharmony_ci maxItems: 1 17262306a36Sopenharmony_ci description: 17362306a36Sopenharmony_ci A phandle to syscon used to access the register of the USB wakeup glue 17462306a36Sopenharmony_ci layer between xHCI and SPM, the field should always be 3 cells long. 17562306a36Sopenharmony_ci items: 17662306a36Sopenharmony_ci items: 17762306a36Sopenharmony_ci - description: 17862306a36Sopenharmony_ci The first cell represents a phandle to syscon 17962306a36Sopenharmony_ci - description: 18062306a36Sopenharmony_ci The second cell represents the register base address of the glue 18162306a36Sopenharmony_ci layer in syscon 18262306a36Sopenharmony_ci - description: | 18362306a36Sopenharmony_ci The third cell represents the hardware version of the glue layer, 18462306a36Sopenharmony_ci 1 - used by mt8173 etc, revision 1 without following IPM rule; 18562306a36Sopenharmony_ci 2 - used by mt2712 etc, revision 2 with following IPM rule; 18662306a36Sopenharmony_ci 101 - used by mt8183, specific 1.01; 18762306a36Sopenharmony_ci 102 - used by mt8192, specific 1.02; 18862306a36Sopenharmony_ci enum: [1, 2, 101, 102] 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci mediatek,u3p-dis-msk: 19162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 19262306a36Sopenharmony_ci description: The mask to disable u3ports, bit0 for u3port0, 19362306a36Sopenharmony_ci bit1 for u3port1, ... etc 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci mediatek,u2p-dis-msk: 19662306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 19762306a36Sopenharmony_ci description: The mask to disable u2ports, bit0 for u2port0, 19862306a36Sopenharmony_ci bit1 for u2port1, ... etc; but can't disable u2port0 if dual role mode 19962306a36Sopenharmony_ci is enabled, so will be skipped in this case. 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci# Required child node when support dual-role 20262306a36Sopenharmony_cipatternProperties: 20362306a36Sopenharmony_ci "^usb@[0-9a-f]+$": 20462306a36Sopenharmony_ci type: object 20562306a36Sopenharmony_ci $ref: /schemas/usb/mediatek,mtk-xhci.yaml# 20662306a36Sopenharmony_ci description: 20762306a36Sopenharmony_ci The xhci should be added as subnode to mtu3 as shown in the following 20862306a36Sopenharmony_ci example if the host mode is enabled. 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_cidependencies: 21162306a36Sopenharmony_ci connector: [ usb-role-switch ] 21262306a36Sopenharmony_ci port: [ usb-role-switch ] 21362306a36Sopenharmony_ci role-switch-default-mode: [ usb-role-switch ] 21462306a36Sopenharmony_ci wakeup-source: [ 'mediatek,syscon-wakeup' ] 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_cirequired: 21762306a36Sopenharmony_ci - compatible 21862306a36Sopenharmony_ci - reg 21962306a36Sopenharmony_ci - reg-names 22062306a36Sopenharmony_ci - interrupts 22162306a36Sopenharmony_ci - clocks 22262306a36Sopenharmony_ci - clock-names 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ciadditionalProperties: false 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ciexamples: 22762306a36Sopenharmony_ci # Dual role switch by extcon 22862306a36Sopenharmony_ci - | 22962306a36Sopenharmony_ci #include <dt-bindings/clock/mt8173-clk.h> 23062306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 23162306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 23262306a36Sopenharmony_ci #include <dt-bindings/phy/phy.h> 23362306a36Sopenharmony_ci #include <dt-bindings/power/mt8173-power.h> 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_ci usb@11271000 { 23662306a36Sopenharmony_ci compatible = "mediatek,mt8173-mtu3", "mediatek,mtu3"; 23762306a36Sopenharmony_ci reg = <0x11271000 0x3000>, <0x11280700 0x0100>; 23862306a36Sopenharmony_ci reg-names = "mac", "ippc"; 23962306a36Sopenharmony_ci interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_LOW>; 24062306a36Sopenharmony_ci phys = <&phy_port0 PHY_TYPE_USB3>, <&phy_port1 PHY_TYPE_USB2>; 24162306a36Sopenharmony_ci power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; 24262306a36Sopenharmony_ci clocks = <&topckgen CLK_TOP_USB30_SEL>; 24362306a36Sopenharmony_ci clock-names = "sys_ck"; 24462306a36Sopenharmony_ci vusb33-supply = <&mt6397_vusb_reg>; 24562306a36Sopenharmony_ci vbus-supply = <&usb_p0_vbus>; 24662306a36Sopenharmony_ci extcon = <&extcon_usb>; 24762306a36Sopenharmony_ci dr_mode = "otg"; 24862306a36Sopenharmony_ci wakeup-source; 24962306a36Sopenharmony_ci mediatek,syscon-wakeup = <&pericfg 0x400 1>; 25062306a36Sopenharmony_ci #address-cells = <1>; 25162306a36Sopenharmony_ci #size-cells = <1>; 25262306a36Sopenharmony_ci ranges; 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci xhci: usb@11270000 { 25562306a36Sopenharmony_ci compatible = "mediatek,mt8173-xhci", "mediatek,mtk-xhci"; 25662306a36Sopenharmony_ci reg = <0x11270000 0x1000>; 25762306a36Sopenharmony_ci reg-names = "mac"; 25862306a36Sopenharmony_ci interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>; 25962306a36Sopenharmony_ci power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; 26062306a36Sopenharmony_ci clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; 26162306a36Sopenharmony_ci clock-names = "sys_ck", "ref_ck"; 26262306a36Sopenharmony_ci vusb33-supply = <&mt6397_vusb_reg>; 26362306a36Sopenharmony_ci }; 26462306a36Sopenharmony_ci }; 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci # Dual role switch by gpio-usb-b-connector 26762306a36Sopenharmony_ci - | 26862306a36Sopenharmony_ci #include <dt-bindings/gpio/gpio.h> 26962306a36Sopenharmony_ci #include <dt-bindings/power/mt2712-power.h> 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci usb@112c1000 { 27262306a36Sopenharmony_ci compatible = "mediatek,mt2712-mtu3", "mediatek,mtu3"; 27362306a36Sopenharmony_ci reg = <0x112c1000 0x3000>, <0x112d0700 0x0100>; 27462306a36Sopenharmony_ci reg-names = "mac", "ippc"; 27562306a36Sopenharmony_ci interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_LOW>; 27662306a36Sopenharmony_ci phys = <&u2port2 PHY_TYPE_USB2>; 27762306a36Sopenharmony_ci power-domains = <&scpsys MT2712_POWER_DOMAIN_USB2>; 27862306a36Sopenharmony_ci clocks = <&topckgen CLK_TOP_USB30_SEL>; 27962306a36Sopenharmony_ci clock-names = "sys_ck"; 28062306a36Sopenharmony_ci dr_mode = "otg"; 28162306a36Sopenharmony_ci usb-role-switch; 28262306a36Sopenharmony_ci #address-cells = <1>; 28362306a36Sopenharmony_ci #size-cells = <1>; 28462306a36Sopenharmony_ci ranges; 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci host0: usb@11270000 { 28762306a36Sopenharmony_ci compatible = "mediatek,mt2712-xhci", "mediatek,mtk-xhci"; 28862306a36Sopenharmony_ci reg = <0x11270000 0x1000>; 28962306a36Sopenharmony_ci reg-names = "mac"; 29062306a36Sopenharmony_ci interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_LOW>; 29162306a36Sopenharmony_ci power-domains = <&scpsys MT2712_POWER_DOMAIN_USB>; 29262306a36Sopenharmony_ci clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; 29362306a36Sopenharmony_ci clock-names = "sys_ck", "ref_ck"; 29462306a36Sopenharmony_ci }; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci connector { 29762306a36Sopenharmony_ci compatible = "gpio-usb-b-connector", "usb-b-connector"; 29862306a36Sopenharmony_ci type = "micro"; 29962306a36Sopenharmony_ci id-gpios = <&pio 12 GPIO_ACTIVE_HIGH>; 30062306a36Sopenharmony_ci vbus-supply = <&usb_p0_vbus>; 30162306a36Sopenharmony_ci }; 30262306a36Sopenharmony_ci }; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci # Dual role switch with type-c 30562306a36Sopenharmony_ci - | 30662306a36Sopenharmony_ci usb@11201000 { 30762306a36Sopenharmony_ci compatible = "mediatek,mt8183-mtu3", "mediatek,mtu3"; 30862306a36Sopenharmony_ci reg = <0x11201000 0x2e00>, <0x11203e00 0x0100>; 30962306a36Sopenharmony_ci reg-names = "mac", "ippc"; 31062306a36Sopenharmony_ci interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_LOW>; 31162306a36Sopenharmony_ci phys = <&u2port0 PHY_TYPE_USB2>; 31262306a36Sopenharmony_ci clocks = <&clk26m>; 31362306a36Sopenharmony_ci clock-names = "sys_ck"; 31462306a36Sopenharmony_ci mediatek,syscon-wakeup = <&pericfg 0x400 1>; 31562306a36Sopenharmony_ci wakeup-source; 31662306a36Sopenharmony_ci dr_mode = "otg"; 31762306a36Sopenharmony_ci usb-role-switch; 31862306a36Sopenharmony_ci role-switch-default-mode = "host"; 31962306a36Sopenharmony_ci #address-cells = <1>; 32062306a36Sopenharmony_ci #size-cells = <1>; 32162306a36Sopenharmony_ci ranges; 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci host: usb@11200000 { 32462306a36Sopenharmony_ci compatible = "mediatek,mt8183-xhci", "mediatek,mtk-xhci"; 32562306a36Sopenharmony_ci reg = <0x11200000 0x1000>; 32662306a36Sopenharmony_ci reg-names = "mac"; 32762306a36Sopenharmony_ci interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_LOW>; 32862306a36Sopenharmony_ci clocks = <&clk26m>; 32962306a36Sopenharmony_ci clock-names = "sys_ck"; 33062306a36Sopenharmony_ci }; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci port { 33362306a36Sopenharmony_ci usb_role_sw: endpoint { 33462306a36Sopenharmony_ci remote-endpoint = <&hs_ep>; 33562306a36Sopenharmony_ci }; 33662306a36Sopenharmony_ci }; 33762306a36Sopenharmony_ci }; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci... 340