On 2023-04-03 13:28, Eugen Hristev wrote: > On 4/2/23 14:00, Jonas Karlman wrote: >> Hi Eugen, >> >> On 2023-03-31 11:40, Eugen Hristev wrote: >>> Add USB 2.0 host nodes and PHYs. >>> >>> Co-developed-by: William Wu <william...@rock-chips.com> >>> Signed-off-by: William Wu <william...@rock-chips.com> >>> Signed-off-by: Eugen Hristev <eugen.hris...@collabora.com> >>> --- >>> Changes in v2,v3: >>> - none >>> >>> arch/arm/dts/rk3588-rock-5b-u-boot.dtsi | 169 ++++++++++++++++++++++++ >>> 1 file changed, 169 insertions(+) >>> >>> diff --git a/arch/arm/dts/rk3588-rock-5b-u-boot.dtsi >>> b/arch/arm/dts/rk3588-rock-5b-u-boot.dtsi >>> index 2386edf90deb..e1d240baf35d 100644 >>> --- a/arch/arm/dts/rk3588-rock-5b-u-boot.dtsi >>> +++ b/arch/arm/dts/rk3588-rock-5b-u-boot.dtsi >>> @@ -4,6 +4,9 @@ >>> */ >>> >>> #include "rk3588-u-boot.dtsi" >>> +#include <dt-bindings/pinctrl/rockchip.h> >>> +#include <dt-bindings/input/input.h> >>> +#include <dt-bindings/gpio/gpio.h> >>> >>> / { >>> aliases { >>> @@ -13,6 +16,105 @@ >>> chosen { >>> u-boot,spl-boot-order = &sdmmc; >>> }; >>> + >>> + vcc5v0_host: vcc5v0-host-regulator { >>> + u-boot,dm-pre-reloc; >>> + compatible = "regulator-fixed"; >>> + regulator-name = "vcc5v0_host"; >>> + regulator-min-microvolt = <5000000>; >>> + regulator-max-microvolt = <5000000>; >>> + enable-active-high; >>> + gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>; >>> + pinctrl-names = "default"; >>> + pinctrl-0 = <&vcc5v0_host_en>; >>> + vin-supply = <&vcc5v0_sys>; >>> + }; >>> + >>> + usb_host0_ehci: usb@fc800000 { >>> + compatible = "generic-ehci"; >>> + reg = <0x0 0xfc800000 0x0 0x40000>; >>> + interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST_ARB0>; >>> + clock-names = "usbhost", "arbiter"; >>> + power-domains = <&power RK3588_PD_USB>; >>> + status = "disabled"; >>> + }; >>> + >>> + usb_host0_ohci: usb@fc840000 { >>> + compatible = "generic-ohci"; >>> + reg = <0x0 0xfc840000 0x0 0x40000>; >>> + interrupts = <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST_ARB0>; >>> + clock-names = "usbhost", "arbiter"; >>> + power-domains = <&power RK3588_PD_USB>; >>> + status = "disabled"; >>> + }; >>> + >>> + usb_host1_ehci: usb@fc880000 { >>> + compatible = "generic-ehci"; >>> + reg = <0x0 0xfc880000 0x0 0x40000>; >>> + interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru HCLK_HOST1>, <&cru HCLK_HOST_ARB1>; >>> + clock-names = "usbhost", "arbiter"; >>> + power-domains = <&power RK3588_PD_USB>; >>> + status = "disabled"; >>> + }; >>> + >>> + usb_host1_ohci: usb@fc8c0000 { >>> + compatible = "generic-ohci"; >>> + reg = <0x0 0xfc8c0000 0x0 0x40000>; >>> + interrupts = <GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru HCLK_HOST1>, <&cru HCLK_HOST_ARB1>; >>> + clock-names = "usbhost", "arbiter"; >>> + power-domains = <&power RK3588_PD_USB>; >>> + status = "disabled"; >>> + }; >>> + >>> + usb2phy2_grf: syscon@fd5d8000 { >>> + compatible = "rockchip,rk3588-usb2phy-grf", "syscon", >>> + "simple-mfd"; >>> + reg = <0x0 0xfd5d8000 0x0 0x4000>; >>> + #address-cells = <1>; >>> + #size-cells = <1>; >>> + >>> + u2phy2: usb2-phy@8000 { >>> + compatible = "rockchip,rk3588-usb2phy"; >>> + reg = <0x8000 0x10>; >>> + interrupts = <GIC_SPI 391 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>; >>> + clock-names = "phyclk"; >>> + #clock-cells = <0>; >>> + status = "disabled"; >>> + >>> + u2phy2_host: host-port { >>> + #phy-cells = <0>; >>> + status = "disabled"; >>> + }; >>> + }; >>> + }; >>> + >>> + usb2phy3_grf: syscon@fd5dc000 { >>> + compatible = "rockchip,rk3588-usb2phy-grf", "syscon", >>> + "simple-mfd"; >>> + reg = <0x0 0xfd5dc000 0x0 0x4000>; >>> + #address-cells = <1>; >>> + #size-cells = <1>; >>> + >>> + u2phy3: usb2-phy@c000 { >>> + compatible = "rockchip,rk3588-usb2phy"; >>> + reg = <0xc000 0x10>; >>> + interrupts = <GIC_SPI 392 IRQ_TYPE_LEVEL_HIGH 0>; >>> + clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>; >>> + clock-names = "phyclk"; >>> + #clock-cells = <0>; >>> + status = "disabled"; >>> + >>> + u2phy3_host: host-port { >>> + #phy-cells = <0>; >>> + status = "disabled"; >>> + }; >>> + }; >>> + }; >> >> Most of these nodes could be added to the soc u-boot dtsi and not the >> board specific file. Also wondering if some of the reset and clock >> related properties below are board specific or soc specific and can go >> into the above soc nodes directly. > > That is right, but , it would spread all the -u-boot.dtsi nodes into a > lot of files. So I kept them here to have them all in one place. > I can move them if you think it's better. >
I think it is preferably that nodes likely to end up in main soc dtsi is temporarily placed in soc u-boot dtsi file. At least until proper finalized nodes can be synced from linux-next. That way other rk3588 boards more easily can benefit from these nodes. >> >> Are there any patches in the works to add these nodes to linux dt? > From what I know, yes, the patches are in the works, but I cannot say > for sure when they will be sent/accepted > Great, thanks. Regards, Jonas >> >> Regards, >> Jonas >> >>> }; >>> >>> &sdmmc { >>> @@ -20,3 +122,70 @@ >>> u-boot,dm-spl; >>> status = "okay"; >>> }; >>> + >>> +&pinctrl { >>> + usb { >>> + vcc5v0_host_en: vcc5v0-host-en { >>> + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; >>> + }; >>> + }; >>> +}; >>> + >>> +&usb_host0_ehci { >>> + companion = <&usb_host0_ohci>; >>> + phys = <&u2phy2_host>; >>> + phy-names = "usb2-phy"; >>> + status = "okay"; >>> +}; >>> + >>> +&usb_host0_ohci { >>> + phys = <&u2phy2_host>; >>> + phy-names = "usb2-phy"; >>> + status = "okay"; >>> +}; >>> + >>> +&usb2phy2_grf { >>> + status = "okay"; >>> +}; >>> + >>> +&u2phy2 { >>> + resets = <&cru SRST_OTGPHY_U2_0>, <&cru SRST_P_USB2PHY_U2_0_GRF0>; >>> + reset-names = "phy", "apb"; >>> + clock-output-names = "usb480m_phy2"; >>> + status = "okay"; >>> +}; >>> + >>> +&u2phy2_host { >>> + phy-supply = <&vcc5v0_host>; >>> + status = "okay"; >>> +}; >>> + >>> +&usb_host1_ehci { >>> + companion = <&usb_host1_ohci>; >>> + phys = <&u2phy3_host>; >>> + phy-names = "usb2-phy"; >>> + status = "okay"; >>> +}; >>> + >>> +&usb_host1_ohci { >>> + phys = <&u2phy3_host>; >>> + phy-names = "usb2-phy"; >>> + status = "okay"; >>> +}; >>> + >>> +&usb2phy3_grf { >>> + status = "okay"; >>> +}; >>> + >>> +&u2phy3 { >>> + resets = <&cru SRST_OTGPHY_U2_1>, <&cru SRST_P_USB2PHY_U2_1_GRF0>; >>> + reset-names = "phy", "apb"; >>> + clock-output-names = "usb480m_phy3"; >>> + status = "okay"; >>> +}; >>> + >>> +&u2phy3_host { >>> + phy-supply = <&vcc5v0_host>; >>> + status = "okay"; >>> +}; >>> + >> >