| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) |
| # Copyright 2019 BayLibre, SAS |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/usb/amlogic,meson-g12a-usb-ctrl.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Amlogic Meson G12A DWC3 USB SoC Controller Glue |
| |
| maintainers: |
| - Neil Armstrong <neil.armstrong@linaro.org> |
| |
| description: | |
| The Amlogic G12A embeds a DWC3 USB IP Core configured for USB2 and USB3 |
| in host-only mode, and a DWC2 IP Core configured for USB2 peripheral mode |
| only. |
| |
| A glue connects the DWC3 core to USB2 PHYs and optionally to an USB3 PHY. |
| |
| One of the USB2 PHYs can be re-routed in peripheral mode to a DWC2 USB IP. |
| |
| The DWC3 Glue controls the PHY routing and power, an interrupt line is |
| connected to the Glue to serve as OTG ID change detection. |
| |
| The Amlogic A1 embeds a DWC3 USB IP Core configured for USB2 in |
| host-only mode. |
| |
| The Amlogic GXL, GXM & AXG SoCs doesn't embed an USB3 PHY. |
| |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-gxl-usb-ctrl |
| - amlogic,meson-gxm-usb-ctrl |
| - amlogic,meson-axg-usb-ctrl |
| - amlogic,meson-g12a-usb-ctrl |
| - amlogic,meson-a1-usb-ctrl |
| |
| ranges: true |
| |
| "#address-cells": |
| enum: [ 1, 2 ] |
| |
| "#size-cells": |
| enum: [ 1, 2 ] |
| |
| clocks: |
| minItems: 1 |
| maxItems: 3 |
| |
| clock-names: |
| minItems: 1 |
| maxItems: 3 |
| |
| resets: |
| minItems: 1 |
| |
| reg: |
| maxItems: 1 |
| |
| interrupts: |
| maxItems: 1 |
| |
| phy-names: |
| minItems: 1 |
| maxItems: 3 |
| |
| phys: |
| minItems: 1 |
| maxItems: 3 |
| |
| dr_mode: true |
| |
| power-domains: |
| maxItems: 1 |
| |
| vbus-supply: |
| description: VBUS power supply when used in OTG switchable mode |
| |
| patternProperties: |
| "^usb@[0-9a-f]+$": |
| oneOf: |
| - $ref: dwc2.yaml# |
| - $ref: snps,dwc3.yaml# |
| |
| additionalProperties: false |
| |
| required: |
| - compatible |
| - "#address-cells" |
| - "#size-cells" |
| - ranges |
| - clocks |
| - resets |
| - reg |
| - interrupts |
| - phy-names |
| - phys |
| - dr_mode |
| |
| allOf: |
| - if: |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-g12a-usb-ctrl |
| |
| then: |
| properties: |
| phy-names: |
| minItems: 2 |
| items: |
| - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used |
| - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used |
| - const: usb3-phy0 # USB3 PHY if USB3_0 is used |
| - if: |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-gxl-usb-ctrl |
| |
| then: |
| properties: |
| clocks: |
| minItems: 2 |
| clock-names: |
| items: |
| - const: usb_ctrl |
| - const: ddr |
| phy-names: |
| items: |
| - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used |
| - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used |
| required: |
| - clock-names |
| - if: |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-gxm-usb-ctrl |
| |
| then: |
| properties: |
| clocks: |
| minItems: 2 |
| clock-names: |
| items: |
| - const: usb_ctrl |
| - const: ddr |
| phy-names: |
| items: |
| - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used |
| - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used |
| - const: usb2-phy2 # USB2 PHY2 if USBOTG_C port is used |
| |
| required: |
| - clock-names |
| - if: |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-axg-usb-ctrl |
| |
| then: |
| properties: |
| phy-names: |
| items: |
| - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used |
| clocks: |
| minItems: 2 |
| clock-names: |
| items: |
| - const: usb_ctrl |
| - const: ddr |
| required: |
| - clock-names |
| - if: |
| properties: |
| compatible: |
| enum: |
| - amlogic,meson-a1-usb-ctrl |
| |
| then: |
| properties: |
| phy-names: |
| items: |
| - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used |
| clocks: |
| minItems: 3 |
| clock-names: |
| items: |
| - const: usb_ctrl |
| - const: usb_bus |
| - const: xtal_usb_ctrl |
| required: |
| - clock-names |
| |
| examples: |
| - | |
| usb: usb@ffe09000 { |
| compatible = "amlogic,meson-g12a-usb-ctrl"; |
| reg = <0xffe09000 0xa0>; |
| interrupts = <16>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| clocks = <&clkc_usb>; |
| resets = <&reset_usb>; |
| |
| dr_mode = "otg"; |
| |
| phys = <&usb2_phy0>, <&usb2_phy1>, <&usb3_phy0>; |
| phy-names = "usb2-phy0", "usb2-phy1", "usb3-phy0"; |
| |
| dwc2: usb@ff400000 { |
| compatible = "amlogic,meson-g12a-usb", "snps,dwc2"; |
| reg = <0xff400000 0x40000>; |
| interrupts = <31>; |
| clocks = <&clkc_usb1>; |
| clock-names = "otg"; |
| phys = <&usb2_phy1>; |
| dr_mode = "peripheral"; |
| g-rx-fifo-size = <192>; |
| g-np-tx-fifo-size = <128>; |
| g-tx-fifo-size = <128 128 16 16 16>; |
| }; |
| |
| dwc3: usb@ff500000 { |
| compatible = "snps,dwc3"; |
| reg = <0xff500000 0x100000>; |
| interrupts = <30>; |
| dr_mode = "host"; |
| snps,dis_u2_susphy_quirk; |
| snps,quirk-frame-length-adjustment = <0x20>; |
| }; |
| }; |