162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright 2019 BayLibre, SAS
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/usb/amlogic,meson-g12a-usb-ctrl.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Amlogic Meson G12A DWC3 USB SoC Controller Glue
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Neil Armstrong <neil.armstrong@linaro.org>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  The Amlogic G12A embeds a DWC3 USB IP Core configured for USB2 and USB3
1562306a36Sopenharmony_ci  in host-only mode, and a DWC2 IP Core configured for USB2 peripheral mode
1662306a36Sopenharmony_ci  only.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci  A glue connects the DWC3 core to USB2 PHYs and optionally to an USB3 PHY.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci  One of the USB2 PHYs can be re-routed in peripheral mode to a DWC2 USB IP.
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci  The DWC3 Glue controls the PHY routing and power, an interrupt line is
2362306a36Sopenharmony_ci  connected to the Glue to serve as OTG ID change detection.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci  The Amlogic A1 embeds a DWC3 USB IP Core configured for USB2 in
2662306a36Sopenharmony_ci  host-only mode.
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  The Amlogic GXL, GXM & AXG SoCs doesn't embed an USB3 PHY.
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciproperties:
3162306a36Sopenharmony_ci  compatible:
3262306a36Sopenharmony_ci    enum:
3362306a36Sopenharmony_ci      - amlogic,meson-gxl-usb-ctrl
3462306a36Sopenharmony_ci      - amlogic,meson-gxm-usb-ctrl
3562306a36Sopenharmony_ci      - amlogic,meson-axg-usb-ctrl
3662306a36Sopenharmony_ci      - amlogic,meson-g12a-usb-ctrl
3762306a36Sopenharmony_ci      - amlogic,meson-a1-usb-ctrl
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  ranges: true
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  "#address-cells":
4262306a36Sopenharmony_ci    enum: [ 1, 2 ]
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  "#size-cells":
4562306a36Sopenharmony_ci    enum: [ 1, 2 ]
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  clocks:
4862306a36Sopenharmony_ci    minItems: 1
4962306a36Sopenharmony_ci    maxItems: 3
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  clock-names:
5262306a36Sopenharmony_ci    minItems: 1
5362306a36Sopenharmony_ci    maxItems: 3
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  resets:
5662306a36Sopenharmony_ci    minItems: 1
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  reg:
5962306a36Sopenharmony_ci    maxItems: 1
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci  interrupts:
6262306a36Sopenharmony_ci    maxItems: 1
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  phy-names:
6562306a36Sopenharmony_ci    minItems: 1
6662306a36Sopenharmony_ci    maxItems: 3
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  phys:
6962306a36Sopenharmony_ci    minItems: 1
7062306a36Sopenharmony_ci    maxItems: 3
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  dr_mode: true
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  power-domains:
7562306a36Sopenharmony_ci    maxItems: 1
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  vbus-supply:
7862306a36Sopenharmony_ci    description: VBUS power supply when used in OTG switchable mode
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_cipatternProperties:
8162306a36Sopenharmony_ci  "^usb@[0-9a-f]+$":
8262306a36Sopenharmony_ci    oneOf:
8362306a36Sopenharmony_ci      - $ref: dwc2.yaml#
8462306a36Sopenharmony_ci      - $ref: snps,dwc3.yaml#
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciadditionalProperties: false
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_cirequired:
8962306a36Sopenharmony_ci  - compatible
9062306a36Sopenharmony_ci  - "#address-cells"
9162306a36Sopenharmony_ci  - "#size-cells"
9262306a36Sopenharmony_ci  - ranges
9362306a36Sopenharmony_ci  - clocks
9462306a36Sopenharmony_ci  - resets
9562306a36Sopenharmony_ci  - reg
9662306a36Sopenharmony_ci  - interrupts
9762306a36Sopenharmony_ci  - phy-names
9862306a36Sopenharmony_ci  - phys
9962306a36Sopenharmony_ci  - dr_mode
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ciallOf:
10262306a36Sopenharmony_ci  - if:
10362306a36Sopenharmony_ci      properties:
10462306a36Sopenharmony_ci        compatible:
10562306a36Sopenharmony_ci          enum:
10662306a36Sopenharmony_ci            - amlogic,meson-g12a-usb-ctrl
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci    then:
10962306a36Sopenharmony_ci      properties:
11062306a36Sopenharmony_ci        phy-names:
11162306a36Sopenharmony_ci          minItems: 2
11262306a36Sopenharmony_ci          items:
11362306a36Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
11462306a36Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
11562306a36Sopenharmony_ci            - const: usb3-phy0 # USB3 PHY if USB3_0 is used
11662306a36Sopenharmony_ci  - if:
11762306a36Sopenharmony_ci      properties:
11862306a36Sopenharmony_ci        compatible:
11962306a36Sopenharmony_ci          enum:
12062306a36Sopenharmony_ci            - amlogic,meson-gxl-usb-ctrl
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci    then:
12362306a36Sopenharmony_ci      properties:
12462306a36Sopenharmony_ci        clocks:
12562306a36Sopenharmony_ci          minItems: 2
12662306a36Sopenharmony_ci        clock-names:
12762306a36Sopenharmony_ci          items:
12862306a36Sopenharmony_ci            - const: usb_ctrl
12962306a36Sopenharmony_ci            - const: ddr
13062306a36Sopenharmony_ci        phy-names:
13162306a36Sopenharmony_ci          items:
13262306a36Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
13362306a36Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
13462306a36Sopenharmony_ci      required:
13562306a36Sopenharmony_ci        - clock-names
13662306a36Sopenharmony_ci  - if:
13762306a36Sopenharmony_ci      properties:
13862306a36Sopenharmony_ci        compatible:
13962306a36Sopenharmony_ci          enum:
14062306a36Sopenharmony_ci            - amlogic,meson-gxm-usb-ctrl
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci    then:
14362306a36Sopenharmony_ci      properties:
14462306a36Sopenharmony_ci        clocks:
14562306a36Sopenharmony_ci          minItems: 2
14662306a36Sopenharmony_ci        clock-names:
14762306a36Sopenharmony_ci          items:
14862306a36Sopenharmony_ci            - const: usb_ctrl
14962306a36Sopenharmony_ci            - const: ddr
15062306a36Sopenharmony_ci        phy-names:
15162306a36Sopenharmony_ci          items:
15262306a36Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
15362306a36Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
15462306a36Sopenharmony_ci            - const: usb2-phy2 # USB2 PHY2 if USBOTG_C port is used
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci      required:
15762306a36Sopenharmony_ci        - clock-names
15862306a36Sopenharmony_ci  - if:
15962306a36Sopenharmony_ci      properties:
16062306a36Sopenharmony_ci        compatible:
16162306a36Sopenharmony_ci          enum:
16262306a36Sopenharmony_ci            - amlogic,meson-axg-usb-ctrl
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci    then:
16562306a36Sopenharmony_ci      properties:
16662306a36Sopenharmony_ci        phy-names:
16762306a36Sopenharmony_ci          items:
16862306a36Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
16962306a36Sopenharmony_ci        clocks:
17062306a36Sopenharmony_ci          minItems: 2
17162306a36Sopenharmony_ci        clock-names:
17262306a36Sopenharmony_ci          items:
17362306a36Sopenharmony_ci            - const: usb_ctrl
17462306a36Sopenharmony_ci            - const: ddr
17562306a36Sopenharmony_ci      required:
17662306a36Sopenharmony_ci        - clock-names
17762306a36Sopenharmony_ci  - if:
17862306a36Sopenharmony_ci      properties:
17962306a36Sopenharmony_ci        compatible:
18062306a36Sopenharmony_ci          enum:
18162306a36Sopenharmony_ci            - amlogic,meson-a1-usb-ctrl
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci    then:
18462306a36Sopenharmony_ci      properties:
18562306a36Sopenharmony_ci        phy-names:
18662306a36Sopenharmony_ci          items:
18762306a36Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
18862306a36Sopenharmony_ci        clocks:
18962306a36Sopenharmony_ci          minItems: 3
19062306a36Sopenharmony_ci        clock-names:
19162306a36Sopenharmony_ci          items:
19262306a36Sopenharmony_ci            - const: usb_ctrl
19362306a36Sopenharmony_ci            - const: usb_bus
19462306a36Sopenharmony_ci            - const: xtal_usb_ctrl
19562306a36Sopenharmony_ci      required:
19662306a36Sopenharmony_ci        - clock-names
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ciexamples:
19962306a36Sopenharmony_ci  - |
20062306a36Sopenharmony_ci    usb: usb@ffe09000 {
20162306a36Sopenharmony_ci          compatible = "amlogic,meson-g12a-usb-ctrl";
20262306a36Sopenharmony_ci          reg = <0xffe09000 0xa0>;
20362306a36Sopenharmony_ci          interrupts = <16>;
20462306a36Sopenharmony_ci          #address-cells = <1>;
20562306a36Sopenharmony_ci          #size-cells = <1>;
20662306a36Sopenharmony_ci          ranges;
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci          clocks = <&clkc_usb>;
20962306a36Sopenharmony_ci          resets = <&reset_usb>;
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci          dr_mode = "otg";
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci          phys = <&usb2_phy0>, <&usb2_phy1>, <&usb3_phy0>;
21462306a36Sopenharmony_ci          phy-names = "usb2-phy0", "usb2-phy1", "usb3-phy0";
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci          dwc2: usb@ff400000 {
21762306a36Sopenharmony_ci              compatible = "amlogic,meson-g12a-usb", "snps,dwc2";
21862306a36Sopenharmony_ci              reg = <0xff400000 0x40000>;
21962306a36Sopenharmony_ci              interrupts = <31>;
22062306a36Sopenharmony_ci              clocks = <&clkc_usb1>;
22162306a36Sopenharmony_ci              clock-names = "otg";
22262306a36Sopenharmony_ci              phys = <&usb2_phy1>;
22362306a36Sopenharmony_ci              dr_mode = "peripheral";
22462306a36Sopenharmony_ci              g-rx-fifo-size = <192>;
22562306a36Sopenharmony_ci              g-np-tx-fifo-size = <128>;
22662306a36Sopenharmony_ci              g-tx-fifo-size = <128 128 16 16 16>;
22762306a36Sopenharmony_ci          };
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci          dwc3: usb@ff500000 {
23062306a36Sopenharmony_ci              compatible = "snps,dwc3";
23162306a36Sopenharmony_ci              reg = <0xff500000 0x100000>;
23262306a36Sopenharmony_ci              interrupts = <30>;
23362306a36Sopenharmony_ci              dr_mode = "host";
23462306a36Sopenharmony_ci              snps,dis_u2_susphy_quirk;
23562306a36Sopenharmony_ci              snps,quirk-frame-length-adjustment = <0x20>;
23662306a36Sopenharmony_ci          };
23762306a36Sopenharmony_ci    };
238