USBH device tree configuration
目录
Article purpose
本文介绍如何在将 USBH internal peripheral 分配给 Linux® 操作系统时对其进行配置。 在这种情况下,它由USB framework控制。
使用device tree机制执行配置。
“ USBH Linux驱动程序” (EHCI[1], OHCI[2]) ,它们在USB framework中注册了相关信息。
DT bindings documentation
STM32 USBH internal peripheral 是一个USB主机设备,由EHCI控制器和OHCI控制器组成。 每个控制器代表一个单独的绑定文档:
- 通用USB EHCI控制器设备树绑定[3] d文档处理标准EHCI控制器核心资源(例如寄存器,时钟,重置,中断等)。
- 通用USB OHCI控制器设备树绑定[4] 文档处理标准OHCI控制器核心资源(例如寄存器,时钟,复位,中断等)。
每个控制器使用USB framework提出的通用USB主机控制器设备(HCD)属性和通用USB属性:
DT configuration
This hardware description is a combination of the STM32 microprocessor device tree files (.dtsi extension) and board device tree files (.dts extension). See the Device tree for an explanation of the device tree file split.
STM32CubeMX can be used to generate the board device tree. Refer to How to configure the DT using STM32CubeMX for more details.
DT configuration (STM32 level)
The usbh_ehci and usbh_ohci DT nodes are declared in stm32mp157c.dtsi[7].
They are composed of a set of properties, used to describe the USBH_EHCI and USBH_OHCI controllers: registers address, clocks, resets, interrupts...
usbh_ohci: usbh-ohci@5800c000 { /* USBH OHCI controller */ compatible = "generic-ohci"; reg = <0x5800c000 0x1000>; clocks = <&rcc USBH>; resets = <&rcc USBH_R>; interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>; status = "disabled"; }; usbh_ehci: usbh-ehci@5800d000 { /* USBH EHCI controller */ compatible = "generic-ehci"; reg = <0x5800d000 0x1000>; clocks = <&rcc USBH>; resets = <&rcc USBH_R>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; companion = <&usbh_ohci>; /* When USBH EHCI controller detects a full or low speed device on a port, status = "disabled"; * that port is switched over to the USBH OHCI companion[6] controller */ };
![]() |
This device tree part is related to STM32 microprocessors. It must be kept as is, without being modified by the end-user. |
DT configuration (board level)
Follow the sequences described in the below chapters to configure and enable the USBH on your board.
USBH supports up to two physical ports, using on-chip USBPHYC:
- USBPHYC port#1 is assigned to the USBH
- USBPHYC port#2 can be statically assigned to the USBH or to the OTG
![]() |
Please refer to USBPHYC device tree configuration for additional information on the USBPHYC configuration |
USBH is composed of EHCI and OHCI controllers:
- high-speed operation is achieved through the EHCI controller
- full-speed and low-speed operation can be achieved by either:
- a high-speed HUB IC wired to the downstream port
- the OHCI controller
DT configuration with external high speed-HUB
- Enable the usbh_ehci by setting status = "okay"
- Configure the PHY(s) through phys and phy-names
![]() |
There's no need to enable usbh_ohci, when all the low-speed and full-speed traffic is managed by the high-speed hub directly connected to the downstream port. |
DT configuration with OHCI to achieve full-speed and low-speed
- Enable the usbh_ehci by setting status = "okay"
- Enable the usbh_ohci by setting status = "okay"
For both controllers:
- Configure the PHY(s) through phys and phy-names
DT configuration examples
DT configuration when using port0 with a high-speed hub
Below example shows how to configure the USBH when using the physical port 0 (the second physical port is unused).
A high-speed hub controller IC is used on the board: no need to enable usbh_ohci, all low-speed and full-speed traffic is managed by the hub.
&usbh_ehci { phys = <&usbphyc_port0>; /* Use USBPHYC HS PHY port #1, mapped on USBH controller */ phy-names = "usb"; status = "okay"; }; /* No need to configure and enable usbh_ohci */
DT configuration when using port0
Below example shows how to configure the USBH when using the physical port 0 (the second physical port is unused, or in use by the OTG and no high-speed hub is used).
&usbh_ehci { phys = <&usbphyc_port0>; /* Use USBPHYC HS PHY port #1, mapped on USBH controller */ phy-names = "usb"; status = "okay"; }; &usbh_ohci { phys = <&usbphyc_port0>; /* Use USBPHYC HS PHY port #1, mapped on USBH controller */ phy-names = "usb"; status = "okay"; };
DT configuration when using the two physical ports
Below example shows how to configure the USBH when using the two physical ports.
&usbh_ehci { phys = <&usbphyc_port0>, <&usbphyc_port1 1>; /* Use USBPHYC HS PHY port #1, mapped on USBH controller */ /* Use USBPHYC HS PHY port #2, configure UTMI switch to select USBH controller */ phy-names = "usb", "usb"; status = "okay"; }; &usbh_ohci { phys = <&usbphyc_port0>, <&usbphyc_port1 1>; /* Use USBPHYC HS PHY port #1, mapped on USBH controller */ /* Use USBPHYC HS PHY port #2, configure UTMI switch to select USBH controller */ phy-names = "usb", "usb"; status = "okay"; };
How to configure the DT using STM32CubeMX
The STM32CubeMX tool can be used to configure the STM32MPU device and get the corresponding platform configuration device tree files.
The STM32CubeMX may not support all the properties described in the above DT bindings documentation paragraph. If so, the tool inserts user sections in the generated device tree. These sections can then be edited to add some properties and they are preserved from one generation to another. Refer to STM32CubeMX user manual for further information.
References
Please refer to the following links for full description:
- ↑ drivers/usb/host/ehci-platform.c | |}} drivers/usb/host/ehci-platform.c , Generic platform ehci driver
- ↑ drivers/usb/host/ohci-platform.c | |}} drivers/usb/host/ohci-platform.c , Generic platform ohci driver
- ↑ Documentation/devicetree/bindings/usb/usb-ehci.txt| |}} Documentation/devicetree/bindings/usb/usb-ehci.txt Generic USB EHCI controller device tree bindings
- ↑ Documentation/devicetree/bindings/usb/usb-ohci.txt| |}} Documentation/devicetree/bindings/usb/usb-ohci.txt Generic USB OHCI controller device tree bindings
- ↑ Documentation/devicetree/bindings/usb/usb-hcd.txt| |}} Documentation/devicetree/bindings/usb/usb-hcd.txt Generic USB HCD (Host Controller Device) device tree bindings
- ↑ 6.06.1 Documentation/devicetree/bindings/usb/generic.txt| |}} Documentation/devicetree/bindings/usb/generic.txt Generic USB device tree bindings
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi| |}} arch/arm/boot/dts/stm32mp157c.dtsi , STM32MP157C device tree file
<securetransclude src="ProtectedTemplate:ArticleBasedOnModel" params="Peripheral or framework device tree configuration model"></securetransclude>
<securetransclude src="ProtectedTemplate:PublicationRequestId" params="10337 (AlainF) | 2019-01-16 |"></securetransclude>