[U-Boot] [PATCH 0/3] rockchip: rv1108: support USB OTG and Host ports on evb-rv1108

This patch support USB OTG and Host ports on evb-rv1108 board. With this patch, we can use fastboot over USB and mount USB mass storage on OTG and Host ports.
William Wu (3): configs: rockchip: add USB configs for evb-rv1108 board ARM: dts: rockchip: add USB nodes for evb-rv1108 rockchip: evb-rv1108: add usb init function for dwc2 gadget
arch/arm/dts/rv1108-evb.dts | 22 ++++++++++++++++ arch/arm/dts/rv1108.dtsi | 24 +++++++++++++++++ board/rockchip/evb_rv1108/evb_rv1108.c | 47 ++++++++++++++++++++++++++++++++++ configs/evb-rv1108_defconfig | 22 ++++++++++++++++ include/configs/rv1108_common.h | 3 +++ 5 files changed, 118 insertions(+)

This patch adds USB configs to support the USB OTG port(consist of DWC2 controller) and the USB Host port(consist of EHCI and OHCI controllers) on evb-rv1108 board, and also support fastboot over USB and USB mass storage.
Signed-off-by: William Wu william.wu@rock-chips.com --- configs/evb-rv1108_defconfig | 22 ++++++++++++++++++++++ include/configs/rv1108_common.h | 3 +++ 2 files changed, 25 insertions(+)
diff --git a/configs/evb-rv1108_defconfig b/configs/evb-rv1108_defconfig index 3deea7c..496bfc8 100644 --- a/configs/evb-rv1108_defconfig +++ b/configs/evb-rv1108_defconfig @@ -6,8 +6,16 @@ CONFIG_DEFAULT_DEVICE_TREE="rv1108-evb" CONFIG_DEBUG_UART=y CONFIG_ENV_IS_NOWHERE=y # CONFIG_DISPLAY_CPUINFO is not set +CONFIG_FASTBOOT=y +CONFIG_USB_FUNCTION_FASTBOOT=y +CONFIG_CMD_FASTBOOT=y +CONFIG_FASTBOOT_BUF_ADDR=0x62000000 +CONFIG_FASTBOOT_BUF_SIZE=0x08000000 +CONFIG_FASTBOOT_FLASH=y +CONFIG_FASTBOOT_FLASH_MMC_DEV=1 # CONFIG_CMD_IMLS is not set CONFIG_CMD_SF=y +CONFIG_CMD_USB=y # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_CACHE=y CONFIG_CMD_TIME=y @@ -27,10 +35,24 @@ CONFIG_ETH_DESIGNWARE=y CONFIG_GMAC_ROCKCHIP=y CONFIG_PINCTRL=y CONFIG_PINCTRL_ROCKCHIP_RV1108=y +CONFIG_DM_REGULATOR_FIXED=y CONFIG_BAUDRATE=1500000 # CONFIG_SPL_SERIAL_PRESENT is not set CONFIG_DEBUG_UART_BASE=0x10210000 CONFIG_DEBUG_UART_CLOCK=24000000 CONFIG_DEBUG_UART_SHIFT=2 CONFIG_SYSRESET=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_GENERIC=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_GENERIC=y +CONFIG_USB_DWC2=y +CONFIG_USB_STORAGE=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_G_DNL_MANUFACTURER="Rockchip" +CONFIG_G_DNL_VENDOR_NUM=0x2207 +CONFIG_G_DNL_PRODUCT_NUM=0x110a CONFIG_ERRNO_STR=y diff --git a/include/configs/rv1108_common.h b/include/configs/rv1108_common.h index 2b63abc..f6fefaa 100644 --- a/include/configs/rv1108_common.h +++ b/include/configs/rv1108_common.h @@ -29,4 +29,7 @@ #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE + 0x100000) #define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x2000000)
+/* rockchip ohci host driver */ +#define CONFIG_USB_OHCI_NEW +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 1 #endif

This patch adds USB configs to support the USB OTG port(consist of DWC2 controller) and the USB Host port(consist of EHCI and OHCI controllers) on evb-rv1108 board, and also support fastboot over USB and USB mass storage.
Signed-off-by: William Wu william.wu@rock-chips.com
configs/evb-rv1108_defconfig | 22 ++++++++++++++++++++++ include/configs/rv1108_common.h | 3 +++ 2 files changed, 25 insertions(+)
Acked-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com

This patch adds USB OTG/EHCI/OHCI nodes for evb-rv1108 USB ports.
Signed-off-by: William Wu william.wu@rock-chips.com --- arch/arm/dts/rv1108-evb.dts | 22 ++++++++++++++++++++++ arch/arm/dts/rv1108.dtsi | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+)
diff --git a/arch/arm/dts/rv1108-evb.dts b/arch/arm/dts/rv1108-evb.dts index 0128dd8..2b221b6 100644 --- a/arch/arm/dts/rv1108-evb.dts +++ b/arch/arm/dts/rv1108-evb.dts @@ -20,6 +20,15 @@ chosen { stdout-path = "serial2:1500000n8"; }; + + vcc5v0_otg: vcc5v0-otg-drv { + compatible = "regulator-fixed"; + enable-active-high; + regulator-name = "vcc5v0_otg"; + gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + }; };
&gmac { @@ -52,3 +61,16 @@ &uart2 { status = "okay"; }; + +&usb20_otg { + vbus-supply = <&vcc5v0_otg>; + status = "okay"; +}; + +&usb_host_ehci { + status = "okay"; +}; + +&usb_host_ohci { + status = "okay"; +}; diff --git a/arch/arm/dts/rv1108.dtsi b/arch/arm/dts/rv1108.dtsi index 77ca24e..3153dfe 100644 --- a/arch/arm/dts/rv1108.dtsi +++ b/arch/arm/dts/rv1108.dtsi @@ -175,6 +175,30 @@ status = "disabled"; };
+ usb_host_ehci: usb@30140000 { + compatible = "generic-ehci"; + reg = <0x30140000 0x20000>; + interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; + + usb_host_ohci: usb@30160000 { + compatible = "generic-ohci"; + reg = <0x30160000 0x20000>; + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; + + usb20_otg: usb@30180000 { + compatible = "rockchip,rv1108-usb", "rockchip,rk3288-usb", + "snps,dwc2"; + reg = <0x30180000 0x40000>; + interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>; + hnp-srp-disable; + dr_mode = "otg"; + status = "disabled"; + }; + sfc: sfc@301c0000 { compatible = "rockchip,sfc"; reg = <0x301c0000 0x200>;

This patch adds USB OTG/EHCI/OHCI nodes for evb-rv1108 USB ports.
Signed-off-by: William Wu william.wu@rock-chips.com
arch/arm/dts/rv1108-evb.dts | 22 ++++++++++++++++++++++ arch/arm/dts/rv1108.dtsi | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+)
Acked-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com

This patch implements board_usb_init() for dwc2 gadget, it generally called from do_fastboot to do dwc2 udc probe and support fastboot over USB.
Signed-off-by: William Wu william.wu@rock-chips.com --- board/rockchip/evb_rv1108/evb_rv1108.c | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
diff --git a/board/rockchip/evb_rv1108/evb_rv1108.c b/board/rockchip/evb_rv1108/evb_rv1108.c index fe37eac..8ca5ee6 100644 --- a/board/rockchip/evb_rv1108/evb_rv1108.c +++ b/board/rockchip/evb_rv1108/evb_rv1108.c @@ -50,3 +50,50 @@ int dram_init_banksize(void)
return 0; } + +#if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG) +#include <usb.h> +#include <usb/dwc2_udc.h> + +static struct dwc2_plat_otg_data rv1108_otg_data = { + .rx_fifo_sz = 512, + .np_tx_fifo_sz = 16, + .tx_fifo_sz = 128, +}; + +int board_usb_init(int index, enum usb_init_type init) +{ + int node; + const char *mode; + bool matched = false; + const void *blob = gd->fdt_blob; + + /* find the usb_otg node */ + node = fdt_node_offset_by_compatible(blob, -1, + "rockchip,rv1108-usb"); + + while (node > 0) { + mode = fdt_getprop(blob, node, "dr_mode", NULL); + if (mode && strcmp(mode, "otg") == 0) { + matched = true; + break; + } + + node = fdt_node_offset_by_compatible(blob, node, + "rockchip,rv1108-usb"); + } + if (!matched) { + debug("Not found usb_otg device\n"); + return -ENODEV; + } + + rv1108_otg_data.regs_otg = fdtdec_get_addr(blob, node, "reg"); + + return dwc2_udc_probe(&rv1108_otg_data); +} + +int board_usb_cleanup(int index, enum usb_init_type init) +{ + return 0; +} +#endif

This patch implements board_usb_init() for dwc2 gadget, it generally called from do_fastboot to do dwc2 udc probe and support fastboot over USB.
Signed-off-by: William Wu william.wu@rock-chips.com
board/rockchip/evb_rv1108/evb_rv1108.c | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
Acked-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
participants (2)
-
Philipp Tomsich
-
William Wu