[U-Boot] [PATCH 3/3] usb: gadget: add usb phy control to support fastboot for rk3036
Frank Wang
frank.wang at rock-chips.com
Tue Dec 22 09:25:52 CET 2015
Used dwc2 usb otg device driver frame and added USB PHY handle function.
Signed-off-by: Frank Wang <frank.wang at rock-chips.com>
---
board/evb_rk3036/evb_rk3036/evb_rk3036.c | 30 +++++++++++++++++++
drivers/usb/gadget/Makefile | 1 +
drivers/usb/gadget/dwc2_udc_otg_regs.h | 5 ++++
drivers/usb/gadget/rk_otg_phy.c | 48 ++++++++++++++++++++++++++++++
include/configs/rk3036_common.h | 20 +++++++++++++
5 files changed, 104 insertions(+)
create mode 100644 drivers/usb/gadget/rk_otg_phy.c
diff --git a/board/evb_rk3036/evb_rk3036/evb_rk3036.c b/board/evb_rk3036/evb_rk3036/evb_rk3036.c
index f5758b1..ec3f973 100644
--- a/board/evb_rk3036/evb_rk3036/evb_rk3036.c
+++ b/board/evb_rk3036/evb_rk3036/evb_rk3036.c
@@ -10,6 +10,11 @@
#include <asm/arch/uart.h>
#include <asm/arch/sdram_rk3036.h>
+#ifdef CONFIG_USB_GADGET
+#include <usb.h>
+#include <usb/dwc2_udc.h>
+#endif
+
DECLARE_GLOBAL_DATA_PTR;
void get_ddr_config(struct rk3036_ddr_config *config)
@@ -47,3 +52,28 @@ void enable_caches(void)
dcache_enable();
}
#endif
+
+#ifdef CONFIG_USB_GADGET
+#define RKIO_GRF_PHYS 0x20008000
+#define RKIO_USBOTG_BASE 0x10180000
+#define RK_USB_PHY_CONTROL 0x10180e00
+
+static struct dwc2_plat_otg_data rk_otg_data = {
+ .regs_phy = RKIO_GRF_PHYS,
+ .regs_otg = RKIO_USBOTG_BASE,
+ .usb_phy_ctrl = RK_USB_PHY_CONTROL,
+ .usb_gusbcfg = 0x00001408
+};
+
+int board_usb_init(int index, enum usb_init_type init)
+{
+ debug("%s: performing dwc2_udc_probe\n", __func__);
+ return dwc2_udc_probe(&rk_otg_data);
+}
+
+int board_usb_cleanup(int index, enum usb_init_type init)
+{
+ debug("%s\n", __func__);
+ return 0;
+}
+#endif
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index c915c79..54eb89b 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -22,6 +22,7 @@ obj-$(CONFIG_USB_FUNCTION_THOR) += f_thor.o
obj-$(CONFIG_USB_FUNCTION_DFU) += f_dfu.o
obj-$(CONFIG_USB_FUNCTION_MASS_STORAGE) += f_mass_storage.o
obj-$(CONFIG_USB_FUNCTION_FASTBOOT) += f_fastboot.o
+obj-$(CONFIG_USB_GADGET_RK_OTG_PHY) += rk_otg_phy.o
endif
ifdef CONFIG_USB_ETHER
obj-y += ether.o
diff --git a/drivers/usb/gadget/dwc2_udc_otg_regs.h b/drivers/usb/gadget/dwc2_udc_otg_regs.h
index 78ec90e..34a29be 100644
--- a/drivers/usb/gadget/dwc2_udc_otg_regs.h
+++ b/drivers/usb/gadget/dwc2_udc_otg_regs.h
@@ -130,8 +130,13 @@ struct dwc2_usbotg_reg {
#define HIGH_SPEED_CONTROL_PKT_SIZE 64
#define HIGH_SPEED_BULK_PKT_SIZE 512
+#ifndef CONFIG_ARCH_ROCKCHIP
#define RX_FIFO_SIZE (1024*4)
#define NPTX_FIFO_SIZE (1024*4)
+#else
+#define RX_FIFO_SIZE ((512+16)*4)
+#define NPTX_FIFO_SIZE (64)
+#endif
#define PTX_FIFO_SIZE (1536*1)
#define DEPCTL_TXFNUM_0 (0x0<<22)
diff --git a/drivers/usb/gadget/rk_otg_phy.c b/drivers/usb/gadget/rk_otg_phy.c
new file mode 100644
index 0000000..af45555
--- /dev/null
+++ b/drivers/usb/gadget/rk_otg_phy.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2015 Rockchip Electronics Co., Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <asm/io.h>
+
+#include "dwc2_udc_otg_regs.h"
+#include "dwc2_udc_otg_priv.h"
+
+/* UOC control */
+#define GRF_UOC0_CON5 0x017c
+
+void otg_phy_init(struct dwc2_udc *dev)
+{
+ struct dwc2_usbotg_reg *reg =
+ (struct dwc2_usbotg_reg *)dev->pdata->regs_otg;
+
+ /* Disable usb-uart bypass */
+ writel(0x34000000, (dev->pdata->regs_phy + GRF_UOC0_CON5));
+
+ /* soft disconnect */
+ writel(readl(®->dctl) | ~0x02, ®->dctl);
+
+ /* Phy PLL recovering */
+ writel(0x00030001, (dev->pdata->regs_phy + GRF_UOC0_CON5));
+ udelay(15);
+ writel(0x00030002, (dev->pdata->regs_phy + GRF_UOC0_CON5));
+ udelay(1500);
+
+ /* Restart the Phy Clock */
+ writel(0x00, (u32 *)dev->pdata->usb_phy_ctrl);
+
+ /* soft connect */
+ writel(readl(®->dctl) & ~0x02, ®->dctl);
+}
+
+void otg_phy_off(struct dwc2_udc *dev)
+{
+ /* usbphy0 bypass disable and otg enable */
+ writel(0x34000000, (dev->pdata->regs_phy + GRF_UOC0_CON5));
+
+ /* usb phy enter suspend */
+ writel(0x007f0055, (dev->pdata->regs_phy + GRF_UOC0_CON5));
+}
diff --git a/include/configs/rk3036_common.h b/include/configs/rk3036_common.h
index f753e68..d804b60 100644
--- a/include/configs/rk3036_common.h
+++ b/include/configs/rk3036_common.h
@@ -71,6 +71,26 @@
#define CONFIG_CMD_I2C
+/* FASTBOOT */
+#define CONFIG_CMD_FASTBOOT
+#define CONFIG_USB_GADGET
+#define CONFIG_USB_GADGET_DOWNLOAD
+#define CONFIG_USB_GADGET_DUALSPEED
+#define CONFIG_USB_GADGET_DWC2_OTG
+#define CONFIG_USB_GADGET_RK_OTG_PHY
+#define CONFIG_USB_FUNCTION_FASTBOOT
+#define CONFIG_USB_FUNCTION_MASS_STORAGE
+#define CONFIG_FASTBOOT_FLASH
+#define CONFIG_FASTBOOT_FLASH_MMC_DEV 0
+#define CONFIG_FASTBOOT_BUF_ADDR (CONFIG_SYS_SDRAM_BASE \
+ + SDRAM_BANK_SIZE)
+#define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
+#define CONFIG_USB_GADGET_VBUS_DRAW 0
+#define CONFIG_SYS_CACHELINE_SIZE 64
+#define CONFIG_G_DNL_MANUFACTURER "Rockchip"
+#define CONFIG_G_DNL_VENDOR_NUM 0x2207
+#define CONFIG_G_DNL_PRODUCT_NUM 0x0006
+
#ifndef CONFIG_SPL_BUILD
#include <config_distro_defaults.h>
--
1.7.9.5
More information about the U-Boot
mailing list