300 lines
15 KiB
Plaintext
300 lines
15 KiB
Plaintext
MSM SoC HSUSB controllers
|
|
|
|
OTG:
|
|
|
|
Required properties :
|
|
- compatible : should be "qcom,hsusb-otg"
|
|
- regs : Array of offset and length of the register sets in the memory map
|
|
- reg-names : indicates various iomem resources passed by name. The possible
|
|
strings in this field are:
|
|
"core": USB controller register space. (Required)
|
|
"tcsr": TCSR register for routing USB Controller signals to
|
|
either picoPHY0 or picoPHY1. (Optional)
|
|
"phy_csr": PHY Wrapper CSR register space. Provides register level
|
|
interface through AHB2PHY for performing PHY related operations
|
|
like retention and HV interrupts management.
|
|
- interrupts: IRQ line
|
|
- interrupt-names: OTG interrupt name(s) referenced in interrupts above
|
|
HSUSB OTG expects "core_irq" which is IRQ line from CORE and
|
|
"async_irq" from HSPHY for asynchronous wakeup events in LPM.
|
|
optional ones are described in next section.
|
|
- qcom,hsusb-otg-phy-type: PHY type can be one of
|
|
1 - Chipidea PHY (obsolete)
|
|
2 - Synopsis Pico PHY
|
|
3 - Synopsis Femto PHY
|
|
4 - QUSB ULPI PHY
|
|
- qcom,hsusb-otg-mode: Operational mode. Can be one of
|
|
1 - Peripheral only mode
|
|
2 - Host only mode
|
|
3 - OTG mode
|
|
Based on the mode, OTG driver registers platform devices for
|
|
gadget and host.
|
|
- qcom,hsusb-otg-otg-control: OTG control (VBUS and ID notifications)
|
|
can be one of
|
|
1 - PHY control
|
|
2 - PMIC control
|
|
3 - User control (via debugfs)
|
|
- <supply-name>-supply: handle to the regulator device tree node
|
|
Required "supply-name" is "HSUSB_VDDCX" (when voting for VDDCX) or
|
|
"hsusb_vdd_dig" (when voting for VDDCX Corner voltage),
|
|
"HSUSB_1p8-supply" and "HSUSB_3p3-supply".
|
|
- qcom,vdd-voltage-level: This property must be a list of three integer
|
|
values (no, min, max) where each value represents either a voltage
|
|
in microvolts or a value corresponding to voltage corner.
|
|
- clocks: a list of phandles to the USB clocks. Usage is as per
|
|
Documentation/devicetree/bindings/clock/clock-bindings.txt
|
|
- clock-names: Names of the clocks in 1-1 correspondence with the "clocks"
|
|
property.
|
|
|
|
Required clocks:
|
|
"core_clk": USB core clock that is required for data transfers.
|
|
"iface_clk": USB core clock that is required for register access.
|
|
|
|
Optional clocks:
|
|
"sleep_clk": PHY sleep clock. Required for interrupts.
|
|
"phy_reset_clk": PHY blocks asynchronous reset clock. Required
|
|
for the USB block reset. It is a reset only clock.
|
|
"phy_por_clk": Reset only clock for asserting/de-asserting
|
|
PHY POR signal. Required for overriding PHY parameters.
|
|
"phy_csr_clk": Required for accessing PHY CSR registers through
|
|
AHB2PHY interface.
|
|
"phy_ref_clk": Required when PHY have referance clock,
|
|
"xo": XO clock. The source clock that is used as a reference clock
|
|
to the PHY.
|
|
"bimc_clk", "snoc_clk", "pcnoc_clk": bus voting clocks. Used to
|
|
keep buses at a nominal frequency during USB peripheral
|
|
mode for achieving max throughput.
|
|
- qcom,max-nominal-sysclk-rate: Indicates maximum nominal frequency for which
|
|
system clock should be voted whenever streaming mode is enabled.
|
|
|
|
Optional properties :
|
|
- interrupt-names : Optional interrupt resource entries are:
|
|
"pmic_id_irq" : Interrupt from PMIC for external ID pin notification.
|
|
"phy_irq" : Interrupt from PHY. Used for ID detection.
|
|
- qcom,hsusb-otg-disable-reset: If present then core is RESET only during
|
|
init, otherwise core is RESET for every cable disconnect as well
|
|
- qcom,hsusb-otg-pnoc-errata-fix: If present then workaround for PNOC
|
|
performance issue is applied which requires changing the mem-type
|
|
attribute via VMIDMT.
|
|
- qcom,hsusb-otg-default-mode: The default USB mode after boot-up.
|
|
Applicable only when OTG is controlled by user. Can be one of
|
|
0 - None. Low power mode
|
|
1 - Peripheral
|
|
2 - Host
|
|
- qcom,hsusb-otg-phy-init-seq: PHY configuration sequence. val, reg pairs
|
|
terminate with -1
|
|
- qcom,hsusb-otg-power-budget: VBUS power budget in mA
|
|
0 will be treated as 500mA
|
|
- qcom,hsusb-otg-pclk-src-name: The source of pclk
|
|
- Refer to "Documentation/devicetree/bindings/arm/msm/msm-bus.txt" for
|
|
below optional properties:
|
|
- qcom,msm-bus,name
|
|
- qcom,msm-bus,num_cases - There are three valid cases for this: NONE, MAX
|
|
and MIN bandwidth votes. Minimum two cases must be defined for
|
|
both NONE and MAX votes. If MIN vote is different from NONE VOTE
|
|
then specify third case for MIN VOTE. If explicit NOC clock rates
|
|
are not specified then MAX value should be large enough to get
|
|
desired BUS frequencies. In case explicit NOC clock rates are
|
|
specified, peripheral mode bus bandwidth vote should be defined
|
|
to vote for arbitrated bandwidth so that 60MHz frequency is met.
|
|
|
|
- qcom,msm-bus,num_paths
|
|
- qcom,msm-bus,vectors
|
|
- qcom,hsusb-otg-lpm-on-dev-suspend: If present then USB enter to
|
|
low power mode upon receiving bus suspend.
|
|
- qcom,hsusb-otg-clk-always-on-workaround: If present then USB core clocks
|
|
remain active upon receiving bus suspend and USB cable is connected.
|
|
Used for allowing USB to respond for remote wakup.
|
|
- qcom,hsusb-otg-delay-lpm: If present then USB core will wait one second
|
|
after disconnect before entering low power mode.
|
|
- <supply-name>-supply: handle to the regulator device tree node.
|
|
Optional "supply-name" is "vbus_otg" to supply vbus in host mode.
|
|
- qcom,dp-manual-pullup: If present, vbus is not routed to USB controller/phy
|
|
and controller driver therefore enables pull-up explicitly before
|
|
starting controller using usbcmd run/stop bit.
|
|
- qcom,usb2-enable-hsphy2: If present then USB2 controller is connected to 2nd
|
|
HSPHY.
|
|
- qcom,hsusb-log2-itc: value of 2^(log2_itc-1) will be used as the
|
|
interrupt threshold (ITC), when log2_itc is between 1 to 7.
|
|
- qcom,hsusb-l1-supported: If present, the device supports l1 (Link power
|
|
management).
|
|
- qcom,no-selective-suspend: If present selective suspend is disabled on hub ports.
|
|
- qcom,hsusb-otg-mpm-dpsehv-int: If present, indicates mpm interrupt to be
|
|
configured for detection of dp line transition during VDD minimization.
|
|
- qcom,hsusb-otg-mpm-dmsehv-int: If present, indicates mpm interrupt to be
|
|
configured for detection of dm line transition during VDD minimization.
|
|
- pinctrl-names : This should be defined if a target uses gpio and pinctrl framework.
|
|
See "pinctrl" in Documentation/devicetree/bindings/pinctrl/msm-pinctrl.txt.
|
|
It should specify the names of the configs that pinctrl can install in driver
|
|
Following are the pinctrl config that can be installed
|
|
"hsusb_active" : Active configuration of pins, this should specify active
|
|
config of vddmin gpio (if used) defined in their pin groups.
|
|
"hsusb_sleep" : Disabled configuration of pins, this should specify sleep
|
|
config of vddmin gpio (if used) defined in their pin groups.
|
|
- qcom,hsusb-otg-vddmin-gpio = If present, indicates a gpio that will be used
|
|
to supply voltage to the D+ line during VDD minimization and peripheral
|
|
bus suspend. If not exists, then VDD minimization will not be allowed
|
|
during peripheral bus suspend.
|
|
- qcom,ahb-async-bridge-bypass: If present, indicates that enable AHB2AHB By Pass
|
|
mode with device controller for better throughput. With this mode, USB Core
|
|
runs using PNOC clock and synchronous to it. Hence it is must to have proper
|
|
"qcom,msm-bus,vectors" to have high bus frequency. User shouldn't try to
|
|
enable this feature without proper bus voting. When this feature is enabled,
|
|
it is required to do HW reset during cable disconnect for host mode functionality
|
|
working and hence need to disable qcom,hsusb-otg-disable-reset. With this feature
|
|
enabled, USB HW has to vote for maximum PNOC frequency as USB HW cannot tolerate
|
|
changes in PNOC frequncy which results in USB functionality failure.
|
|
- qcom,disable-retention-with-vdd-min: If present don't allow phy retention but allow
|
|
vdd min.
|
|
- qcom,usbin-vadc: Corresponding vadc device's phandle to read usbin voltage using VADC.
|
|
This will be used to get value of usb power supply's VOLTAGE_NOW property.
|
|
- qcom,usbid-gpio: This corresponds to gpio which is used for USB ID detection.
|
|
- qcom,hub-reset-gpio: This corresponds to gpio which is used for HUB reset.
|
|
- qcom,sw-sel-gpio: This corresponds to gpio which is used for switch select routing
|
|
of D+/D- between the USB HUB and type B USB jack for peripheral mode.
|
|
- qcom,bus-clk-rate: If present, indicates nominal bus frequency to be voted for
|
|
bimc/snoc/pcnoc clock with usb cable connected. If AHB2AHB bypass is enabled,
|
|
pcnoc value should be defined to very large number so that PNOC runs at max
|
|
frequency. If 'qcom,default-mode-svs' is also set then two set of frequencies
|
|
must be specified for SVS and NOM modes which user can change using sysfs node.
|
|
- qcom,phy-dvdd-always-on: If present PHY DVDD is supplied by a always-on
|
|
regulator unlike vddcx/vddmx. PHY can keep D+ pull-up and D+/D-
|
|
pull-down resistors during peripheral and host bus suspend without
|
|
any re-work.
|
|
- qcom,emulation: Indicates that we are running on emulation platform.
|
|
- qcom,boost-sysclk-with-streaming: If present, enable controller specific
|
|
streaming feature. Also this flag can bump up usb system clock to max in streaming
|
|
mode. This flag enables streaming mode for all compositions and is different from
|
|
streaming-func property defined in android device node. Please refer Doumentation/
|
|
devicetree/bindings/usb/android-dev.txt for details about "streaming-func" property.
|
|
- qcom,axi-prefetch-enable: If present, AXI64 interface will be used for transferring data
|
|
to/from DDR by controller.
|
|
- qcom,enable-sdp-typec-current-limit: Indicates whether type-c current for SDP CHARGER to
|
|
be limited.
|
|
- qcom,enable-phy-id-pullup: If present, PHY can keep D+ pull-up resistor on USB ID line
|
|
during cable disconnect.
|
|
- qcom,max-svs-sysclk-rate: Indicates system clock frequency voted by driver in
|
|
non-perf mode. In perf mode driver uses qcom,max-nominal-sysclk-rate.
|
|
- qcom,pm-qos-latency: This represents max tolerable CPU latency in microsecs,
|
|
which is used as a vote by driver to get max performance in perf mode.
|
|
- qcom,default-mode-svs: Indicates USB system clock should run at SVS frequency.
|
|
User can bump it up using 'perf_mode' sysfs attribute for gadget.
|
|
|
|
Example HSUSB OTG controller device node :
|
|
usb@f9690000 {
|
|
compatible = "qcom,hsusb-otg";
|
|
reg = <0xf9690000 0x400>;
|
|
reg-names = "core";
|
|
interrupts = <134>;
|
|
interrupt-names = "core_irq";
|
|
|
|
qcom,hsusb-otg-phy-type = <2>;
|
|
qcom,hsusb-otg-mode = <1>;
|
|
qcom,hsusb-otg-otg-control = <1>;
|
|
qcom,hsusb-otg-disable-reset;
|
|
qcom,hsusb-otg-pnoc-errata-fix;
|
|
qcom,hsusb-otg-default-mode = <2>;
|
|
qcom,hsusb-otg-phy-init-seq = <0x01 0x90 0xffffffff>;
|
|
qcom,hsusb-otg-power-budget = <500>;
|
|
qcom,hsusb-otg-pclk-src-name = "dfab_usb_clk";
|
|
qcom,hsusb-otg-lpm-on-dev-suspend;
|
|
qcom,hsusb-otg-clk-always-on-workaround;
|
|
hsusb_vdd_dig-supply = <&pm8226_s1_corner>;
|
|
HSUSB_1p8-supply = <&pm8226_l10>;
|
|
HSUSB_3p3-supply = <&pm8226_l20>;
|
|
qcom,vdd-voltage-level = <1 5 7>;
|
|
qcom,dp-manual-pullup;
|
|
qcom,hsusb-otg-mpm-dpsehv-int = <49>;
|
|
qcom,hsusb-otg-mpm-dmsehv-int = <58>;
|
|
qcom,max-nominal-sysclk-rate = <133330000>;
|
|
qcom,max-svs-sysclk-rate = <100000000>;
|
|
qcom,pm-qos-latency = <59>;
|
|
|
|
qcom,msm-bus,name = "usb2";
|
|
qcom,msm-bus,num_cases = <2>;
|
|
qcom,msm-bus,num_paths = <1>;
|
|
qcom,msm-bus,vectors =
|
|
<87 512 0 0>,
|
|
<87 512 60000000 960000000>;
|
|
pinctrl-names = "hsusb_active","hsusb_sleep";
|
|
pinctrl-0 = <&vddmin_act>;
|
|
pinctrl-0 = <&vddmin_sus>;
|
|
qcom,hsusb-otg-vddmin-gpio = <&pm8019_mpps 6 0>;
|
|
qcom,disable-retention-with-vdd-min;
|
|
qcom,usbin-vadc = <&pm8226_vadc>;
|
|
qcom,usbid-gpio = <&msm_gpio 110 0>;
|
|
};
|
|
|
|
MSM HSUSB EHCI controller
|
|
|
|
Required properties :
|
|
- compatible : should be "qcom,ehci-host"
|
|
- reg : offset and length of the register set in the memory map
|
|
- interrupts: IRQ lines used by this controller
|
|
- interrupt-names : Required interrupt resource entries are:
|
|
HSUSB EHCI expects "core_irq" and optionally "async_irq".
|
|
- <supply-name>-supply: handle to the regulator device tree node
|
|
Required "supply-name" is either "hsusb_vdd_dig" or "HSUSB_VDDCX"
|
|
"HSUSB_1p8-supply" "HSUSB_3p3-supply".
|
|
- qcom,usb2-power-budget: maximum vbus power (in mA) that can be provided.
|
|
- qcom,vdd-voltage-level: This property must be a list of five integer
|
|
values (no, 0.5vsuspend, 0.75suspend, min, max) where each value respresents
|
|
either a voltage in microvolts or a value corresponding to voltage corner.
|
|
First value represents value to vote when USB is not at all active, second
|
|
value represents value to vote when target is not connected to dock during low
|
|
power mode, third value represents vlaue to vote when target is connected to dock
|
|
and no peripheral connected over dock during low power mode, fourth value represents
|
|
minimum value to vote when USB is operational, fifth item represents maximum value
|
|
to vote for USB is operational.
|
|
|
|
Optional properties :
|
|
- qcom,usb2-enable-hsphy2: If present, select second PHY for USB operation.
|
|
- pinctrl-names : This should be defined if a target uses pinctrl framework.
|
|
See "pinctrl" in Documentation/devicetree/bindings/pinctrl/msm-pinctrl.txt.
|
|
It should specify the names of the configs that pinctrl can install in driver
|
|
Following are the pinctrl configs that can be installed
|
|
"ehci_active" : Active configuration of pins, this should specify active
|
|
config defined in pin groups of used gpio's from resume and
|
|
ext-hub-reset.
|
|
"ehci_sleep" : Disabled configuration of pins, this should specify sleep
|
|
config defined in pin groups of used gpio's from resume and
|
|
ext-hub-reset.
|
|
- qcom,resume-gpio: if present then peripheral connected to usb controller
|
|
cannot wakeup from XO shutdown using in-band usb bus resume. Use resume
|
|
gpio to wakeup peripheral.
|
|
- qcom,ext-hub-reset-gpio: If present then an external HUB is connected to
|
|
the USB host controller and its RESET_N signal is connected to this
|
|
ext-hub-reset-gpio GPIO. It should be driven LOW to RESET the HUB.
|
|
- qcom,usb2-enable-uicc: If present, usb2 port will be used for uicc card connection.
|
|
- usb-phy: phandle for the PHY device, if described as a separate device tree node
|
|
- qcom,pm-qos-latency: This property represents the maximum tolerable CPU latency in
|
|
microsecs, which is used as a vote to keep the CPUs in a high enough power state when
|
|
USB bus is in use (not suspended).
|
|
- Refer to "Documentation/devicetree/bindings/arm/msm/msm-bus.txt" for
|
|
below optional properties:
|
|
- qcom,msm-bus,name
|
|
- qcom,msm-bus,num_cases - Two cases (NONE and MAX) for voting are supported.
|
|
- qcom,msm-bus,num_paths
|
|
- qcom,msm-bus,vectors
|
|
|
|
Example MSM HSUSB EHCI controller device node :
|
|
ehci: qcom,ehci-host@f9a55000 {
|
|
compatible = "qcom,ehci-host";
|
|
reg = <0xf9a55000 0x400>;
|
|
interrupts = <0 134 0>, <0 140 0>;
|
|
interrupt-names = "core_irq", "async_irq";
|
|
/* If pinctrl is used and ext-hub-reset and resume gpio's are present*/
|
|
pinctrl-names = "ehci_active","ehci_sleep";
|
|
pinctrl-0 = <&ehci_reset_act &resume_act>;
|
|
pinctrl-1 = <&ehci_reset_sus &resume_sus>;
|
|
qcom,resume-gpio = <&msm_gpio 80 0>;
|
|
qcom,ext-hub-reset-gpio = <&msm_gpio 0 0>;
|
|
hsusb_vdd_dig-supply = <&pm8841_s2_corner>;
|
|
HSUSB_1p8-supply = <&pm8941_l6>;
|
|
HSUSB_3p3-supply = <&pm8941_l24>;
|
|
qcom,usb2-enable-hsphy2;
|
|
qcom,usb2-power-budget = <500>;
|
|
qcom,vdd-voltage-level = <1 2 3 5 7>;
|
|
qcom,usb2-enable-uicc;
|
|
};
|