1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2# Copyright (c) 2020 MediaTek 3%YAML 1.2 4--- 5$id: http://devicetree.org/schemas/usb/mediatek,mtu3.yaml# 6$schema: http://devicetree.org/meta-schemas/core.yaml# 7 8title: MediaTek USB3 DRD Controller Device Tree Bindings 9 10maintainers: 11 - Chunfeng Yun <chunfeng.yun@mediatek.com> 12 13allOf: 14 - $ref: "usb-drd.yaml" 15 16description: | 17 The DRD controller has a glue layer IPPC (IP Port Control), and its host is 18 based on xHCI. 19 20properties: 21 compatible: 22 items: 23 - enum: 24 - mediatek,mt2712-mtu3 25 - mediatek,mt8173-mtu3 26 - mediatek,mt8183-mtu3 27 - mediatek,mt8192-mtu3 28 - const: mediatek,mtu3 29 30 reg: 31 items: 32 - description: the registers of device MAC 33 - description: the registers of IP Port Control 34 35 reg-names: 36 items: 37 - const: mac 38 - const: ippc 39 40 interrupts: 41 maxItems: 1 42 43 power-domains: 44 description: A phandle to USB power domain node to control USB's MTCMOS 45 maxItems: 1 46 47 clocks: 48 minItems: 1 49 items: 50 - description: Controller clock used by normal mode 51 - description: Reference clock used by low power mode etc 52 - description: Mcu bus clock for register access 53 - description: DMA bus clock for data transfer 54 55 clock-names: 56 minItems: 1 57 items: 58 - const: sys_ck # required, others are optional 59 - const: ref_ck 60 - const: mcu_ck 61 - const: dma_ck 62 63 phys: 64 description: 65 List of all the USB PHYs used, it's better to keep the sequence 66 as the hardware layout. 67 minItems: 1 68 items: 69 - description: USB2/HS PHY # required, others are optional 70 - description: USB3/SS(P) PHY 71 - description: USB2/HS PHY # the following for backward compatible 72 - description: USB3/SS(P) PHY 73 - description: USB2/HS PHY 74 - description: USB3/SS(P) PHY 75 - description: USB2/HS PHY 76 - description: USB3/SS(P) PHY 77 - description: USB2/HS PHY 78 79 vusb33-supply: 80 description: Regulator of USB AVDD3.3v 81 82 vbus-supply: 83 deprecated: true 84 description: | 85 Regulator of USB VBUS5v, needed when supports dual-role mode. 86 Particularly, if use an output GPIO to control a VBUS regulator, should 87 model it as a regulator. See bindings/regulator/fixed-regulator.yaml 88 It's considered valid for compatibility reasons, not allowed for 89 new bindings, and put into a usb-connector node. 90 91 dr_mode: 92 enum: [host, peripheral, otg] 93 default: otg 94 95 maximum-speed: 96 enum: [super-speed-plus, super-speed, high-speed, full-speed] 97 98 "#address-cells": 99 enum: [1, 2] 100 101 "#size-cells": 102 enum: [1, 2] 103 104 ranges: true 105 106 extcon: 107 deprecated: true 108 description: | 109 Phandle to the extcon device detecting the IDDIG/VBUS state, neede 110 when supports dual-role mode. 111 It's considered valid for compatibility reasons, not allowed for 112 new bindings, and use "usb-role-switch" property instead. 113 114 usb-role-switch: 115 $ref: /schemas/types.yaml#/definitions/flag 116 description: Support role switch. 117 type: boolean 118 119 connector: 120 $ref: /connector/usb-connector.yaml# 121 description: 122 Connector for dual role switch, especially for "gpio-usb-b-connector" 123 type: object 124 125 port: 126 description: 127 Any connector to the data bus of this controller should be modelled 128 using the OF graph bindings specified, if the "usb-role-switch" 129 property is used. See graph.txt 130 $ref: /schemas/graph.yaml#/properties/port 131 132 enable-manual-drd: 133 $ref: /schemas/types.yaml#/definitions/flag 134 description: 135 supports manual dual-role switch via debugfs; usually used when 136 receptacle is TYPE-A and also wants to support dual-role mode. 137 type: boolean 138 139 wakeup-source: 140 description: enable USB remote wakeup, see power/wakeup-source.txt 141 type: boolean 142 143 mediatek,syscon-wakeup: 144 $ref: /schemas/types.yaml#/definitions/phandle-array 145 maxItems: 1 146 description: 147 A phandle to syscon used to access the register of the USB wakeup glue 148 layer between xHCI and SPM, the field should always be 3 cells long. 149 items: 150 items: 151 - description: 152 The first cell represents a phandle to syscon 153 - description: 154 The second cell represents the register base address of the glue 155 layer in syscon 156 - description: | 157 The third cell represents the hardware version of the glue layer, 158 1 - used by mt8173 etc, revision 1 without following IPM rule; 159 2 - used by mt2712 etc, revision 2 with following IPM rule; 160 101 - used by mt8183, specific 1.01; 161 102 - used by mt8192, specific 1.02; 162 enum: [1, 2, 101, 102] 163 164 mediatek,u3p-dis-msk: 165 $ref: /schemas/types.yaml#/definitions/uint32 166 description: The mask to disable u3ports, bit0 for u3port0, 167 bit1 for u3port1, ... etc 168 169# Required child node when support dual-role 170patternProperties: 171 "^usb@[0-9a-f]+$": 172 type: object 173 $ref: /usb/mediatek,mtk-xhci.yaml# 174 description: 175 The xhci should be added as subnode to mtu3 as shown in the following 176 example if the host mode is enabled. 177 178dependencies: 179 connector: [ 'usb-role-switch' ] 180 port: [ 'usb-role-switch' ] 181 wakeup-source: [ 'mediatek,syscon-wakeup' ] 182 183required: 184 - compatible 185 - reg 186 - reg-names 187 - interrupts 188 - clocks 189 - clock-names 190 191additionalProperties: false 192 193examples: 194 # Dual role switch by extcon 195 - | 196 #include <dt-bindings/clock/mt8173-clk.h> 197 #include <dt-bindings/interrupt-controller/arm-gic.h> 198 #include <dt-bindings/interrupt-controller/irq.h> 199 #include <dt-bindings/phy/phy.h> 200 #include <dt-bindings/power/mt8173-power.h> 201 202 usb@11271000 { 203 compatible = "mediatek,mt8173-mtu3", "mediatek,mtu3"; 204 reg = <0x11271000 0x3000>, <0x11280700 0x0100>; 205 reg-names = "mac", "ippc"; 206 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_LOW>; 207 phys = <&phy_port0 PHY_TYPE_USB3>, <&phy_port1 PHY_TYPE_USB2>; 208 power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; 209 clocks = <&topckgen CLK_TOP_USB30_SEL>; 210 clock-names = "sys_ck"; 211 vusb33-supply = <&mt6397_vusb_reg>; 212 vbus-supply = <&usb_p0_vbus>; 213 extcon = <&extcon_usb>; 214 dr_mode = "otg"; 215 wakeup-source; 216 mediatek,syscon-wakeup = <&pericfg 0x400 1>; 217 #address-cells = <1>; 218 #size-cells = <1>; 219 ranges; 220 221 xhci: usb@11270000 { 222 compatible = "mediatek,mt8173-xhci", "mediatek,mtk-xhci"; 223 reg = <0x11270000 0x1000>; 224 reg-names = "mac"; 225 interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>; 226 power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; 227 clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; 228 clock-names = "sys_ck", "ref_ck"; 229 vusb33-supply = <&mt6397_vusb_reg>; 230 }; 231 }; 232 233 # Enable/disable device by an input gpio for VBUS pin 234 - | 235 #include <dt-bindings/gpio/gpio.h> 236 #include <dt-bindings/power/mt2712-power.h> 237 238 usb@112c1000 { 239 compatible = "mediatek,mt2712-mtu3", "mediatek,mtu3"; 240 reg = <0x112c1000 0x3000>, <0x112d0700 0x0100>; 241 reg-names = "mac", "ippc"; 242 interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_LOW>; 243 phys = <&u2port2 PHY_TYPE_USB2>; 244 power-domains = <&scpsys MT2712_POWER_DOMAIN_USB2>; 245 clocks = <&topckgen CLK_TOP_USB30_SEL>; 246 clock-names = "sys_ck"; 247 dr_mode = "peripheral"; 248 usb-role-switch; 249 250 connector { 251 compatible = "gpio-usb-b-connector", "usb-b-connector"; 252 type = "micro"; 253 vbus-gpios = <&pio 13 GPIO_ACTIVE_HIGH>; 254 }; 255 }; 256 257 # Dual role switch with type-c 258 - | 259 usb@11201000 { 260 compatible ="mediatek,mt8183-mtu3", "mediatek,mtu3"; 261 reg = <0x11201000 0x2e00>, <0x11203e00 0x0100>; 262 reg-names = "mac", "ippc"; 263 interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_LOW>; 264 phys = <&u2port0 PHY_TYPE_USB2>; 265 clocks = <&clk26m>; 266 clock-names = "sys_ck"; 267 mediatek,syscon-wakeup = <&pericfg 0x400 1>; 268 wakeup-source; 269 dr_mode = "otg"; 270 usb-role-switch; 271 #address-cells = <1>; 272 #size-cells = <1>; 273 ranges; 274 275 host: usb@11200000 { 276 compatible = "mediatek,mt8183-xhci", "mediatek,mtk-xhci"; 277 reg = <0x11200000 0x1000>; 278 reg-names = "mac"; 279 interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_LOW>; 280 clocks = <&clk26m>; 281 clock-names = "sys_ck"; 282 }; 283 284 port { 285 usb_role_sw: endpoint { 286 remote-endpoint = <&hs_ep>; 287 }; 288 }; 289 }; 290 291... 292