| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| # Copyright (c) 2020 MediaTek |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/usb/mediatek,mtk-xhci.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: MediaTek USB3 xHCI |
| |
| maintainers: |
| - Chunfeng Yun <chunfeng.yun@mediatek.com> |
| |
| allOf: |
| - $ref: usb-xhci.yaml |
| |
| description: | |
| There are two scenarios: |
| case 1: only supports xHCI driver; |
| case 2: supports dual-role mode, and the host is based on xHCI driver. |
| |
| properties: |
| # common properties for both case 1 and case 2 |
| compatible: |
| items: |
| - enum: |
| - mediatek,mt2701-xhci |
| - mediatek,mt2712-xhci |
| - mediatek,mt7622-xhci |
| - mediatek,mt7623-xhci |
| - mediatek,mt7629-xhci |
| - mediatek,mt7986-xhci |
| - mediatek,mt8173-xhci |
| - mediatek,mt8183-xhci |
| - mediatek,mt8186-xhci |
| - mediatek,mt8188-xhci |
| - mediatek,mt8192-xhci |
| - mediatek,mt8195-xhci |
| - mediatek,mt8365-xhci |
| - const: mediatek,mtk-xhci |
| |
| reg: |
| minItems: 1 |
| items: |
| - description: the registers of xHCI MAC |
| - description: the registers of IP Port Control |
| |
| reg-names: |
| minItems: 1 |
| items: |
| - const: mac |
| - const: ippc # optional, only needed for case 1. |
| |
| interrupts: |
| description: |
| use "interrupts-extended" when the interrupts are connected to the |
| separate interrupt controllers |
| minItems: 1 |
| items: |
| - description: xHCI host controller interrupt |
| - description: optional, wakeup interrupt used to support runtime PM |
| |
| interrupt-names: |
| minItems: 1 |
| items: |
| - const: host |
| - const: wakeup |
| |
| power-domains: |
| description: A phandle to USB power domain node to control USB's MTCMOS |
| maxItems: 1 |
| |
| clocks: |
| minItems: 1 |
| items: |
| - description: Controller clock used by normal mode |
| - description: Reference clock used by low power mode etc |
| - description: Mcu bus clock for register access |
| - description: DMA bus clock for data transfer |
| - description: controller clock |
| - description: frame count clock |
| |
| clock-names: |
| minItems: 1 |
| items: |
| - const: sys_ck # required, the following ones are optional |
| - const: ref_ck |
| - const: mcu_ck |
| - const: dma_ck |
| - const: xhci_ck |
| - const: frmcnt_ck |
| |
| phys: |
| description: |
| List of all PHYs used on this HCD, it's better to keep PHYs in order |
| as the hardware layout |
| minItems: 1 |
| items: |
| - description: USB2/HS PHY # required, others are optional |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| - description: USB3/SS(P) PHY |
| - description: USB2/HS PHY |
| |
| vusb33-supply: |
| description: Regulator of USB AVDD3.3v |
| |
| vbus-supply: |
| description: Regulator of USB VBUS5v |
| |
| resets: |
| maxItems: 1 |
| |
| usb3-lpm-capable: true |
| |
| usb2-lpm-disable: true |
| |
| imod-interval-ns: |
| description: |
| Interrupt moderation interval value, it is 8 times as much as that |
| defined in the xHCI spec on MTK's controller. |
| default: 5000 |
| |
| rx-fifo-depth: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| It is a quirk used to work around Gen1 isoc-in endpoint transfer issue |
| that still send out unexpected ACK after device finishes the burst |
| transfer with a short packet and cause an exception, specially on a 4K |
| camera device, it happens on controller before about IPM v1.6.0; |
| the side-effect is that it may cause performance drop about 10%, |
| including bulk transfer, prefer to use 3k here. The size is in bytes. |
| enum: [1024, 2048, 3072, 4096] |
| |
| # the following properties are only used for case 1 |
| wakeup-source: |
| description: enable USB remote wakeup, see power/wakeup-source.txt |
| type: boolean |
| |
| mediatek,syscon-wakeup: |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| maxItems: 1 |
| description: |
| A phandle to syscon used to access the register of the USB wakeup glue |
| layer between xHCI and SPM, the field should always be 3 cells long. |
| items: |
| items: |
| - description: |
| The first cell represents a phandle to syscon |
| - description: |
| The second cell represents the register base address of the glue |
| layer in syscon |
| - description: | |
| The third cell represents the hardware version of the glue layer, |
| 1 - used by mt8173 etc, revision 1 without following IPM rule; |
| 2 - used by mt2712 etc, revision 2 following IPM rule; |
| 101 - used by mt8183, specific 1.01; |
| 102 - used by mt8192, specific 1.02; |
| 103 - used by mt8195, IP0, specific 1.03; |
| 104 - used by mt8195, IP1, specific 1.04; |
| 105 - used by mt8195, IP2, specific 1.05; |
| 106 - used by mt8195, IP3, specific 1.06; |
| enum: [1, 2, 101, 102, 103, 104, 105, 106] |
| |
| mediatek,u3p-dis-msk: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: The mask to disable u3ports, bit0 for u3port0, |
| bit1 for u3port1, ... etc |
| |
| mediatek,u2p-dis-msk: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: The mask to disable u2ports, bit0 for u2port0, |
| bit1 for u2port1, ... etc |
| |
| "#address-cells": |
| const: 1 |
| |
| "#size-cells": |
| const: 0 |
| |
| patternProperties: |
| "@[0-9a-f]{1}$": |
| type: object |
| description: The hard wired USB devices. |
| |
| dependencies: |
| wakeup-source: [ 'mediatek,syscon-wakeup' ] |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - interrupts |
| - clocks |
| - clock-names |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/clock/mt8173-clk.h> |
| #include <dt-bindings/interrupt-controller/arm-gic.h> |
| #include <dt-bindings/interrupt-controller/irq.h> |
| #include <dt-bindings/phy/phy.h> |
| #include <dt-bindings/power/mt8173-power.h> |
| |
| usb@11270000 { |
| compatible = "mediatek,mt8173-xhci", "mediatek,mtk-xhci"; |
| reg = <0x11270000 0x1000>, <0x11280700 0x0100>; |
| reg-names = "mac", "ippc"; |
| interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>; |
| power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>; |
| clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>; |
| clock-names = "sys_ck", "ref_ck"; |
| phys = <&u3port0 PHY_TYPE_USB3>, <&u2port1 PHY_TYPE_USB2>; |
| vusb33-supply = <&mt6397_vusb_reg>; |
| vbus-supply = <&usb_p1_vbus>; |
| imod-interval-ns = <10000>; |
| mediatek,syscon-wakeup = <&pericfg 0x400 1>; |
| wakeup-source; |
| usb3-lpm-capable; |
| }; |
| ... |