18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
28c2ecf20Sopenharmony_ci# Copyright 2019 BayLibre, SAS
38c2ecf20Sopenharmony_ci%YAML 1.2
48c2ecf20Sopenharmony_ci---
58c2ecf20Sopenharmony_ci$id: "http://devicetree.org/schemas/usb/amlogic,meson-g12a-usb-ctrl.yaml#"
68c2ecf20Sopenharmony_ci$schema: "http://devicetree.org/meta-schemas/core.yaml#"
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cititle: Amlogic Meson G12A DWC3 USB SoC Controller Glue
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cimaintainers:
118c2ecf20Sopenharmony_ci  - Neil Armstrong <narmstrong@baylibre.com>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cidescription: |
148c2ecf20Sopenharmony_ci  The Amlogic G12A embeds a DWC3 USB IP Core configured for USB2 and USB3
158c2ecf20Sopenharmony_ci  in host-only mode, and a DWC2 IP Core configured for USB2 peripheral mode
168c2ecf20Sopenharmony_ci  only.
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci  A glue connects the DWC3 core to USB2 PHYs and optionally to an USB3 PHY.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci  One of the USB2 PHYs can be re-routed in peripheral mode to a DWC2 USB IP.
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci  The DWC3 Glue controls the PHY routing and power, an interrupt line is
238c2ecf20Sopenharmony_ci  connected to the Glue to serve as OTG ID change detection.
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci  The Amlogic A1 embeds a DWC3 USB IP Core configured for USB2 in
268c2ecf20Sopenharmony_ci  host-only mode.
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci  The Amlogic GXL, GXM & AXG SoCs doesn't embed an USB3 PHY.
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciproperties:
318c2ecf20Sopenharmony_ci  compatible:
328c2ecf20Sopenharmony_ci    enum:
338c2ecf20Sopenharmony_ci      - amlogic,meson-gxl-usb-ctrl
348c2ecf20Sopenharmony_ci      - amlogic,meson-gxm-usb-ctrl
358c2ecf20Sopenharmony_ci      - amlogic,meson-axg-usb-ctrl
368c2ecf20Sopenharmony_ci      - amlogic,meson-g12a-usb-ctrl
378c2ecf20Sopenharmony_ci      - amlogic,meson-a1-usb-ctrl
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci  ranges: true
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci  "#address-cells":
428c2ecf20Sopenharmony_ci    enum: [ 1, 2 ]
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci  "#size-cells":
458c2ecf20Sopenharmony_ci    enum: [ 1, 2 ]
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci  clocks:
488c2ecf20Sopenharmony_ci    minItems: 1
498c2ecf20Sopenharmony_ci    maxItems: 3
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci  clock-names:
528c2ecf20Sopenharmony_ci    minItems: 1
538c2ecf20Sopenharmony_ci    maxItems: 3
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci  resets:
568c2ecf20Sopenharmony_ci    minItems: 1
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci  reg:
598c2ecf20Sopenharmony_ci    maxItems: 1
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci  interrupts:
628c2ecf20Sopenharmony_ci    maxItems: 1
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci  phy-names:
658c2ecf20Sopenharmony_ci    minItems: 1
668c2ecf20Sopenharmony_ci    maxItems: 3
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci  phys:
698c2ecf20Sopenharmony_ci    minItems: 1
708c2ecf20Sopenharmony_ci    maxItems: 3
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci  dr_mode: true
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci  power-domains:
758c2ecf20Sopenharmony_ci    maxItems: 1
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci  vbus-supply:
788c2ecf20Sopenharmony_ci    description: VBUS power supply when used in OTG switchable mode
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_cipatternProperties:
818c2ecf20Sopenharmony_ci  "^usb@[0-9a-f]+$":
828c2ecf20Sopenharmony_ci    type: object
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ciadditionalProperties: false
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_cirequired:
878c2ecf20Sopenharmony_ci  - compatible
888c2ecf20Sopenharmony_ci  - "#address-cells"
898c2ecf20Sopenharmony_ci  - "#size-cells"
908c2ecf20Sopenharmony_ci  - ranges
918c2ecf20Sopenharmony_ci  - clocks
928c2ecf20Sopenharmony_ci  - resets
938c2ecf20Sopenharmony_ci  - reg
948c2ecf20Sopenharmony_ci  - interrupts
958c2ecf20Sopenharmony_ci  - phy-names
968c2ecf20Sopenharmony_ci  - phys
978c2ecf20Sopenharmony_ci  - dr_mode
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ciallOf:
1008c2ecf20Sopenharmony_ci  - if:
1018c2ecf20Sopenharmony_ci      properties:
1028c2ecf20Sopenharmony_ci        compatible:
1038c2ecf20Sopenharmony_ci          enum:
1048c2ecf20Sopenharmony_ci            - amlogic,meson-g12a-usb-ctrl
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci    then:
1078c2ecf20Sopenharmony_ci      properties:
1088c2ecf20Sopenharmony_ci        phy-names:
1098c2ecf20Sopenharmony_ci          items:
1108c2ecf20Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
1118c2ecf20Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
1128c2ecf20Sopenharmony_ci            - const: usb3-phy0 # USB3 PHY if USB3_0 is used
1138c2ecf20Sopenharmony_ci  - if:
1148c2ecf20Sopenharmony_ci      properties:
1158c2ecf20Sopenharmony_ci        compatible:
1168c2ecf20Sopenharmony_ci          enum:
1178c2ecf20Sopenharmony_ci            - amlogic,meson-gxl-usb-ctrl
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci    then:
1208c2ecf20Sopenharmony_ci      properties:
1218c2ecf20Sopenharmony_ci        clocks:
1228c2ecf20Sopenharmony_ci          minItems: 2
1238c2ecf20Sopenharmony_ci        clock-names:
1248c2ecf20Sopenharmony_ci          items:
1258c2ecf20Sopenharmony_ci            - const: usb_ctrl
1268c2ecf20Sopenharmony_ci            - const: ddr
1278c2ecf20Sopenharmony_ci        phy-names:
1288c2ecf20Sopenharmony_ci          items:
1298c2ecf20Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
1308c2ecf20Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
1318c2ecf20Sopenharmony_ci      required:
1328c2ecf20Sopenharmony_ci        - clock-names
1338c2ecf20Sopenharmony_ci  - if:
1348c2ecf20Sopenharmony_ci      properties:
1358c2ecf20Sopenharmony_ci        compatible:
1368c2ecf20Sopenharmony_ci          enum:
1378c2ecf20Sopenharmony_ci            - amlogic,meson-gxm-usb-ctrl
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci    then:
1408c2ecf20Sopenharmony_ci      properties:
1418c2ecf20Sopenharmony_ci        clocks:
1428c2ecf20Sopenharmony_ci          minItems: 2
1438c2ecf20Sopenharmony_ci        clock-names:
1448c2ecf20Sopenharmony_ci          items:
1458c2ecf20Sopenharmony_ci            - const: usb_ctrl
1468c2ecf20Sopenharmony_ci            - const: ddr
1478c2ecf20Sopenharmony_ci        phy-names:
1488c2ecf20Sopenharmony_ci          items:
1498c2ecf20Sopenharmony_ci            - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
1508c2ecf20Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
1518c2ecf20Sopenharmony_ci            - const: usb2-phy2 # USB2 PHY2 if USBOTG_C port is used
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci      required:
1548c2ecf20Sopenharmony_ci        - clock-names
1558c2ecf20Sopenharmony_ci  - if:
1568c2ecf20Sopenharmony_ci      properties:
1578c2ecf20Sopenharmony_ci        compatible:
1588c2ecf20Sopenharmony_ci          enum:
1598c2ecf20Sopenharmony_ci            - amlogic,meson-axg-usb-ctrl
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ci    then:
1628c2ecf20Sopenharmony_ci      properties:
1638c2ecf20Sopenharmony_ci        phy-names:
1648c2ecf20Sopenharmony_ci          items:
1658c2ecf20Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
1668c2ecf20Sopenharmony_ci        clocks:
1678c2ecf20Sopenharmony_ci          minItems: 2
1688c2ecf20Sopenharmony_ci        clock-names:
1698c2ecf20Sopenharmony_ci          items:
1708c2ecf20Sopenharmony_ci            - const: usb_ctrl
1718c2ecf20Sopenharmony_ci            - const: ddr
1728c2ecf20Sopenharmony_ci      required:
1738c2ecf20Sopenharmony_ci        - clock-names
1748c2ecf20Sopenharmony_ci  - if:
1758c2ecf20Sopenharmony_ci      properties:
1768c2ecf20Sopenharmony_ci        compatible:
1778c2ecf20Sopenharmony_ci          enum:
1788c2ecf20Sopenharmony_ci            - amlogic,meson-a1-usb-ctrl
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci    then:
1818c2ecf20Sopenharmony_ci      properties:
1828c2ecf20Sopenharmony_ci        phy-names:
1838c2ecf20Sopenharmony_ci          items:
1848c2ecf20Sopenharmony_ci            - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
1858c2ecf20Sopenharmony_ci        clocks:
1868c2ecf20Sopenharmony_ci          minItems: 3
1878c2ecf20Sopenharmony_ci        clock-names:
1888c2ecf20Sopenharmony_ci          items:
1898c2ecf20Sopenharmony_ci            - const: usb_ctrl
1908c2ecf20Sopenharmony_ci            - const: usb_bus
1918c2ecf20Sopenharmony_ci            - const: xtal_usb_ctrl
1928c2ecf20Sopenharmony_ci      required:
1938c2ecf20Sopenharmony_ci        - clock-names
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ciexamples:
1968c2ecf20Sopenharmony_ci  - |
1978c2ecf20Sopenharmony_ci    usb: usb@ffe09000 {
1988c2ecf20Sopenharmony_ci          compatible = "amlogic,meson-g12a-usb-ctrl";
1998c2ecf20Sopenharmony_ci          reg = <0xffe09000 0xa0>;
2008c2ecf20Sopenharmony_ci          interrupts = <16>;
2018c2ecf20Sopenharmony_ci          #address-cells = <1>;
2028c2ecf20Sopenharmony_ci          #size-cells = <1>;
2038c2ecf20Sopenharmony_ci          ranges;
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_ci          clocks = <&clkc_usb>;
2068c2ecf20Sopenharmony_ci          resets = <&reset_usb>;
2078c2ecf20Sopenharmony_ci
2088c2ecf20Sopenharmony_ci          dr_mode = "otg";
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci          phys = <&usb2_phy0>, <&usb2_phy1>, <&usb3_phy0>;
2118c2ecf20Sopenharmony_ci          phy-names = "usb2-phy0", "usb2-phy1", "usb3-phy0";
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_ci          dwc2: usb@ff400000 {
2148c2ecf20Sopenharmony_ci              compatible = "amlogic,meson-g12a-usb", "snps,dwc2";
2158c2ecf20Sopenharmony_ci              reg = <0xff400000 0x40000>;
2168c2ecf20Sopenharmony_ci              interrupts = <31>;
2178c2ecf20Sopenharmony_ci              clocks = <&clkc_usb1>;
2188c2ecf20Sopenharmony_ci              clock-names = "otg";
2198c2ecf20Sopenharmony_ci              phys = <&usb2_phy1>;
2208c2ecf20Sopenharmony_ci              dr_mode = "peripheral";
2218c2ecf20Sopenharmony_ci              g-rx-fifo-size = <192>;
2228c2ecf20Sopenharmony_ci              g-np-tx-fifo-size = <128>;
2238c2ecf20Sopenharmony_ci              g-tx-fifo-size = <128 128 16 16 16>;
2248c2ecf20Sopenharmony_ci          };
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci          dwc3: usb@ff500000 {
2278c2ecf20Sopenharmony_ci              compatible = "snps,dwc3";
2288c2ecf20Sopenharmony_ci              reg = <0xff500000 0x100000>;
2298c2ecf20Sopenharmony_ci              interrupts = <30>;
2308c2ecf20Sopenharmony_ci              dr_mode = "host";
2318c2ecf20Sopenharmony_ci              snps,dis_u2_susphy_quirk;
2328c2ecf20Sopenharmony_ci              snps,quirk-frame-length-adjustment;
2338c2ecf20Sopenharmony_ci          };
2348c2ecf20Sopenharmony_ci    };
235