238 lines
5.3 KiB
YAML
238 lines
5.3 KiB
YAML
|
# 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>;
|
||
|
};
|
||
|
};
|