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,mtk-xhci.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: MediaTek USB3 xHCI
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Chunfeng Yun <chunfeng.yun@mediatek.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciallOf:
1462306a36Sopenharmony_ci  - $ref: usb-xhci.yaml
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cidescription: |
1762306a36Sopenharmony_ci  There are two scenarios:
1862306a36Sopenharmony_ci  case 1: only supports xHCI driver;
1962306a36Sopenharmony_ci  case 2: supports dual-role mode, and the host is based on xHCI driver.
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciproperties:
2262306a36Sopenharmony_ci  # common properties for both case 1 and case 2
2362306a36Sopenharmony_ci  compatible:
2462306a36Sopenharmony_ci    items:
2562306a36Sopenharmony_ci      - enum:
2662306a36Sopenharmony_ci          - mediatek,mt2701-xhci
2762306a36Sopenharmony_ci          - mediatek,mt2712-xhci
2862306a36Sopenharmony_ci          - mediatek,mt7622-xhci
2962306a36Sopenharmony_ci          - mediatek,mt7623-xhci
3062306a36Sopenharmony_ci          - mediatek,mt7629-xhci
3162306a36Sopenharmony_ci          - mediatek,mt7986-xhci
3262306a36Sopenharmony_ci          - mediatek,mt8173-xhci
3362306a36Sopenharmony_ci          - mediatek,mt8183-xhci
3462306a36Sopenharmony_ci          - mediatek,mt8186-xhci
3562306a36Sopenharmony_ci          - mediatek,mt8188-xhci
3662306a36Sopenharmony_ci          - mediatek,mt8192-xhci
3762306a36Sopenharmony_ci          - mediatek,mt8195-xhci
3862306a36Sopenharmony_ci          - mediatek,mt8365-xhci
3962306a36Sopenharmony_ci      - const: mediatek,mtk-xhci
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  reg:
4262306a36Sopenharmony_ci    minItems: 1
4362306a36Sopenharmony_ci    items:
4462306a36Sopenharmony_ci      - description: the registers of xHCI MAC
4562306a36Sopenharmony_ci      - description: the registers of IP Port Control
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  reg-names:
4862306a36Sopenharmony_ci    minItems: 1
4962306a36Sopenharmony_ci    items:
5062306a36Sopenharmony_ci      - const: mac
5162306a36Sopenharmony_ci      - const: ippc  # optional, only needed for case 1.
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci  interrupts:
5462306a36Sopenharmony_ci    description:
5562306a36Sopenharmony_ci      use "interrupts-extended" when the interrupts are connected to the
5662306a36Sopenharmony_ci      separate interrupt controllers
5762306a36Sopenharmony_ci    minItems: 1
5862306a36Sopenharmony_ci    items:
5962306a36Sopenharmony_ci      - description: xHCI host controller interrupt
6062306a36Sopenharmony_ci      - description: optional, wakeup interrupt used to support runtime PM
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  interrupt-names:
6362306a36Sopenharmony_ci    minItems: 1
6462306a36Sopenharmony_ci    items:
6562306a36Sopenharmony_ci      - const: host
6662306a36Sopenharmony_ci      - const: wakeup
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  power-domains:
6962306a36Sopenharmony_ci    description: A phandle to USB power domain node to control USB's MTCMOS
7062306a36Sopenharmony_ci    maxItems: 1
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  clocks:
7362306a36Sopenharmony_ci    minItems: 1
7462306a36Sopenharmony_ci    items:
7562306a36Sopenharmony_ci      - description: Controller clock used by normal mode
7662306a36Sopenharmony_ci      - description: Reference clock used by low power mode etc
7762306a36Sopenharmony_ci      - description: Mcu bus clock for register access
7862306a36Sopenharmony_ci      - description: DMA bus clock for data transfer
7962306a36Sopenharmony_ci      - description: controller clock
8062306a36Sopenharmony_ci      - description: frame count clock
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci  clock-names:
8362306a36Sopenharmony_ci    minItems: 1
8462306a36Sopenharmony_ci    items:
8562306a36Sopenharmony_ci      - const: sys_ck  # required, the following ones are optional
8662306a36Sopenharmony_ci      - const: ref_ck
8762306a36Sopenharmony_ci      - const: mcu_ck
8862306a36Sopenharmony_ci      - const: dma_ck
8962306a36Sopenharmony_ci      - const: xhci_ck
9062306a36Sopenharmony_ci      - const: frmcnt_ck
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci  phys:
9362306a36Sopenharmony_ci    description:
9462306a36Sopenharmony_ci      List of all PHYs used on this HCD, it's better to keep PHYs in order
9562306a36Sopenharmony_ci      as the hardware layout
9662306a36Sopenharmony_ci    minItems: 1
9762306a36Sopenharmony_ci    items:
9862306a36Sopenharmony_ci      - description: USB2/HS PHY    # required, others are optional
9962306a36Sopenharmony_ci      - description: USB3/SS(P) PHY
10062306a36Sopenharmony_ci      - description: USB2/HS PHY
10162306a36Sopenharmony_ci      - description: USB3/SS(P) PHY
10262306a36Sopenharmony_ci      - description: USB2/HS PHY
10362306a36Sopenharmony_ci      - description: USB3/SS(P) PHY
10462306a36Sopenharmony_ci      - description: USB2/HS PHY
10562306a36Sopenharmony_ci      - description: USB3/SS(P) PHY
10662306a36Sopenharmony_ci      - description: USB2/HS PHY
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  vusb33-supply:
10962306a36Sopenharmony_ci    description: Regulator of USB AVDD3.3v
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci  vbus-supply:
11262306a36Sopenharmony_ci    description: Regulator of USB VBUS5v
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci  resets:
11562306a36Sopenharmony_ci    maxItems: 1
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci  usb3-lpm-capable: true
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci  usb2-lpm-disable: true
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci  imod-interval-ns:
12262306a36Sopenharmony_ci    description:
12362306a36Sopenharmony_ci      Interrupt moderation interval value, it is 8 times as much as that
12462306a36Sopenharmony_ci      defined in the xHCI spec on MTK's controller.
12562306a36Sopenharmony_ci    default: 5000
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci  # the following properties are only used for case 1
12862306a36Sopenharmony_ci  wakeup-source:
12962306a36Sopenharmony_ci    description: enable USB remote wakeup, see power/wakeup-source.txt
13062306a36Sopenharmony_ci    type: boolean
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci  mediatek,syscon-wakeup:
13362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
13462306a36Sopenharmony_ci    maxItems: 1
13562306a36Sopenharmony_ci    description:
13662306a36Sopenharmony_ci      A phandle to syscon used to access the register of the USB wakeup glue
13762306a36Sopenharmony_ci      layer between xHCI and SPM, the field should always be 3 cells long.
13862306a36Sopenharmony_ci    items:
13962306a36Sopenharmony_ci      items:
14062306a36Sopenharmony_ci        - description:
14162306a36Sopenharmony_ci            The first cell represents a phandle to syscon
14262306a36Sopenharmony_ci        - description:
14362306a36Sopenharmony_ci            The second cell represents the register base address of the glue
14462306a36Sopenharmony_ci            layer in syscon
14562306a36Sopenharmony_ci        - description: |
14662306a36Sopenharmony_ci            The third cell represents the hardware version of the glue layer,
14762306a36Sopenharmony_ci            1 - used by mt8173 etc, revision 1 without following IPM rule;
14862306a36Sopenharmony_ci            2 - used by mt2712 etc, revision 2 following IPM rule;
14962306a36Sopenharmony_ci            101 - used by mt8183, specific 1.01;
15062306a36Sopenharmony_ci            102 - used by mt8192, specific 1.02;
15162306a36Sopenharmony_ci            103 - used by mt8195, IP0, specific 1.03;
15262306a36Sopenharmony_ci            104 - used by mt8195, IP1, specific 1.04;
15362306a36Sopenharmony_ci            105 - used by mt8195, IP2, specific 1.05;
15462306a36Sopenharmony_ci            106 - used by mt8195, IP3, specific 1.06;
15562306a36Sopenharmony_ci          enum: [1, 2, 101, 102, 103, 104, 105, 106]
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci  mediatek,u3p-dis-msk:
15862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
15962306a36Sopenharmony_ci    description: The mask to disable u3ports, bit0 for u3port0,
16062306a36Sopenharmony_ci      bit1 for u3port1, ... etc
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci  mediatek,u2p-dis-msk:
16362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
16462306a36Sopenharmony_ci    description: The mask to disable u2ports, bit0 for u2port0,
16562306a36Sopenharmony_ci      bit1 for u2port1, ... etc
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci  "#address-cells":
16862306a36Sopenharmony_ci    const: 1
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci  "#size-cells":
17162306a36Sopenharmony_ci    const: 0
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_cipatternProperties:
17462306a36Sopenharmony_ci  "@[0-9a-f]{1}$":
17562306a36Sopenharmony_ci    type: object
17662306a36Sopenharmony_ci    description: The hard wired USB devices.
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_cidependencies:
17962306a36Sopenharmony_ci  wakeup-source: [ 'mediatek,syscon-wakeup' ]
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_cirequired:
18262306a36Sopenharmony_ci  - compatible
18362306a36Sopenharmony_ci  - reg
18462306a36Sopenharmony_ci  - reg-names
18562306a36Sopenharmony_ci  - interrupts
18662306a36Sopenharmony_ci  - clocks
18762306a36Sopenharmony_ci  - clock-names
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciadditionalProperties: false
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ciexamples:
19262306a36Sopenharmony_ci  - |
19362306a36Sopenharmony_ci    #include <dt-bindings/clock/mt8173-clk.h>
19462306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
19562306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
19662306a36Sopenharmony_ci    #include <dt-bindings/phy/phy.h>
19762306a36Sopenharmony_ci    #include <dt-bindings/power/mt8173-power.h>
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci    usb@11270000 {
20062306a36Sopenharmony_ci        compatible = "mediatek,mt8173-xhci", "mediatek,mtk-xhci";
20162306a36Sopenharmony_ci        reg = <0x11270000 0x1000>, <0x11280700 0x0100>;
20262306a36Sopenharmony_ci        reg-names = "mac", "ippc";
20362306a36Sopenharmony_ci        interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>;
20462306a36Sopenharmony_ci        power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>;
20562306a36Sopenharmony_ci        clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>;
20662306a36Sopenharmony_ci        clock-names = "sys_ck", "ref_ck";
20762306a36Sopenharmony_ci        phys = <&u3port0 PHY_TYPE_USB3>, <&u2port1 PHY_TYPE_USB2>;
20862306a36Sopenharmony_ci        vusb33-supply = <&mt6397_vusb_reg>;
20962306a36Sopenharmony_ci        vbus-supply = <&usb_p1_vbus>;
21062306a36Sopenharmony_ci        imod-interval-ns = <10000>;
21162306a36Sopenharmony_ci        mediatek,syscon-wakeup = <&pericfg 0x400 1>;
21262306a36Sopenharmony_ci        wakeup-source;
21362306a36Sopenharmony_ci        usb3-lpm-capable;
21462306a36Sopenharmony_ci    };
21562306a36Sopenharmony_ci...
216