From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Date: Fri, 02 Sep 2016 17:58:54 +0800 Subject: [U-Boot] [PATCH v4 2/4] board: evb-rk3399: add api to support dwc3 gadget In-Reply-To: References: <1472696063-17470-1-git-send-email-kever.yang@rock-chips.com> <1472696063-17470-3-git-send-email-kever.yang@rock-chips.com> Message-ID: <57C94D5E.5060007@rock-chips.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Marek, On 09/01/2016 04:59 PM, Marek Vasut wrote: > On 09/01/2016 04:14 AM, Kever Yang wrote: >> This patch add board_usb_init() and interrupt callback >> for dwc3 gadget. >> >> Signed-off-by: Kever Yang >> --- >> >> Changes in v4: >> - parse DT for quirk, base address and maximum speed >> >> Changes in v3: >> - remove utmi width DT parse from borad init >> >> Changes in v2: >> - parse dt for utmi width >> >> board/rockchip/evb_rk3399/evb-rk3399.c | 51 ++++++++++++++++++++++++++++++++++ >> 1 file changed, 51 insertions(+) >> >> diff --git a/board/rockchip/evb_rk3399/evb-rk3399.c b/board/rockchip/evb_rk3399/evb-rk3399.c >> index d394276..58bfa78 100644 >> --- a/board/rockchip/evb_rk3399/evb-rk3399.c >> +++ b/board/rockchip/evb_rk3399/evb-rk3399.c >> @@ -7,6 +7,8 @@ >> #include >> #include >> #include >> +#include >> +#include >> >> DECLARE_GLOBAL_DATA_PTR; >> >> @@ -54,3 +56,52 @@ void dram_init_banksize(void) >> gd->bd->bi_dram[0].start = 0x200000; >> gd->bd->bi_dram[0].size = 0x80000000; >> } >> + >> +#ifdef CONFIG_USB_DWC3 >> +static struct dwc3_device dwc3_device_data = { >> + .index = 0, >> +}; >> + >> +int usb_gadget_handle_interrupts(void) >> +{ >> + dwc3_uboot_handle_interrupt(0); >> + return 0; >> +} >> + >> +int board_usb_init(int index, enum usb_init_type init) >> +{ >> + const void *blob = gd->fdt_blob; >> + int node; >> + const char *string; >> + >> + node = fdt_node_offset_by_compatible(blob, -1, >> + "rockchip,rk3399-xhci"); >> + if (node < 0) { >> + debug("%s dwc3 node not found\n", __func__); >> + } else { >> + dwc3_device_data.base = fdtdec_get_addr(blob, node, "reg"); >> + dwc3_device_data.dis_u2_susphy_quirk = >> + fdtdec_get_int(blob, node, >> + "snps,dis-u2-susphy-quirk", -1); >> + >> + string = fdt_getprop(blob, node, "maximum-speed", NULL); >> + if (string) { >> + if (0 == strcmp(string, "super-speed")) >> + dwc3_device_data.maximum_speed = USB_SPEED_SUPER; >> + else if (0 == strcmp(string, "high-speed")) >> + dwc3_device_data.maximum_speed = USB_SPEED_HIGH; >> + else if (0 == strcmp(string, "full-speed")) >> + dwc3_device_data.maximum_speed = USB_SPEED_FULL; >> + else >> + debug("%s: Cannot decode speed'%s'\n", __func__, >> + string); >> + } else { >> + dwc3_device_data.maximum_speed = USB_SPEED_HIGH; >> + } >> + /* Hardcode controller in peripheral mode */ >> + dwc3_device_data.dr_mode = USB_DR_MODE_PERIPHERAL; >> + } >> + >> + return dwc3_uboot_init(&dwc3_device_data); >> +} >> +#endif >> > So will every board have a copy of this exact code, verbatim ? > Yes for rk3399 based board. Not sure why you ask this question, but I guess you still want these parse happen in driver instead of board_init()? I didn't make these code in dwc3 driver because other SoC dts are different now, they are init in platdata data structure. To be honest, I want to make the upstream code to support rk3399 dwc3, but I don't want to touch too much code in other SoC. Thanks, - Kever