From: Tom Rini <tr...@ti.com> Add in code to initialize the DWC3 gadget controller so that we can do RNDIS in SPL on these platforms.
Signed-off-by: Tom Rini <tr...@ti.com> Signed-off-by: Kishon Vijay Abraham I <kis...@ti.com> --- board/ti/am43xx/board.c | 39 ++++++++++++++++++++++++++++++++++--- drivers/usb/gadget/gadget_chips.h | 2 ++ include/configs/am43xx_evm.h | 9 +++++++++ scripts/Makefile.spl | 2 ++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c index 770726c..8125c9f 100644 --- a/board/ti/am43xx/board.c +++ b/board/ti/am43xx/board.c @@ -777,8 +777,8 @@ int usb_gadget_handle_interrupts(int index) } #endif -#ifdef CONFIG_DRIVER_TI_CPSW - +#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ + (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) static void cpsw_control(int enabled) { /* Additional controls can be added here */ @@ -816,7 +816,24 @@ static struct cpsw_platform_data cpsw_data = { .host_port_num = 0, .version = CPSW_CTRL_VERSION_2, }; +#endif +/* + * This function will: + * Read the eFuse for MAC addresses, and set ethaddr/eth1addr/usbnet_devaddr + * in the environment + * Perform fixups to the PHY present on certain boards. We only need this + * function in: + * - SPL with either CPSW or USB ethernet support + * - Full U-Boot, with either CPSW or USB ethernet + * Build in only these cases to avoid warnings about unused variables + * when we build an SPL that has neither option but full U-Boot will. + */ +#if ((defined(CONFIG_SPL_ETH_SUPPORT) || \ + defined(CONFIG_SPL_USBETH_SUPPORT)) && \ + defined(CONFIG_SPL_BUILD)) || \ + ((defined(CONFIG_DRIVER_TI_CPSW) || \ + defined(CONFIG_USB_ETHER)) && !defined(CONFIG_SPL_BUILD)) int board_eth_init(bd_t *bis) { int rv; @@ -833,12 +850,15 @@ int board_eth_init(bd_t *bis) mac_addr[4] = mac_lo & 0xFF; mac_addr[5] = (mac_lo & 0xFF00) >> 8; +#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ + (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) if (!getenv("ethaddr")) { puts("<ethaddr> not set. Validating first E-fuse MAC\n"); if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("ethaddr", mac_addr); } +#ifndef CONFIG_SPL_BUILD mac_lo = readl(&cdev->macid1l); mac_hi = readl(&cdev->macid1h); mac_addr[0] = mac_hi & 0xFF; @@ -852,6 +872,7 @@ int board_eth_init(bd_t *bis) if (is_valid_ethaddr(mac_addr)) eth_setenv_enetaddr("eth1addr", mac_addr); } +#endif if (board_is_eposevm()) { writel(RMII_MODE_ENABLE | RMII_CHIPCKL_ENABLE, &cdev->miisel); @@ -873,8 +894,20 @@ int board_eth_init(bd_t *bis) } rv = cpsw_register(&cpsw_data); - if (rv < 0) + if (rv < 0) { printf("Error %d registering CPSW switch\n", rv); + return rv; + } +#endif +#if defined(CONFIG_USB_ETHER) && \ + (!defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_USBETH_SUPPORT)) + if (is_valid_ethaddr(mac_addr)) + eth_setenv_enetaddr("usbnet_devaddr", mac_addr); + + rv = usb_eth_initialize(bis); + if (rv < 0) + printf("Error %d registering USB_ETHER\n", rv); +#endif return rv; } diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h index e9811c3..9c2232e 100644 --- a/drivers/usb/gadget/gadget_chips.h +++ b/drivers/usb/gadget/gadget_chips.h @@ -231,5 +231,7 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget) return 0x21; else if (gadget_is_fotg210(gadget)) return 0x22; + else if (gadget_is_dwc3(gadget)) + return 0x23; return -ENOENT; } diff --git a/include/configs/am43xx_evm.h b/include/configs/am43xx_evm.h index 15fa3e3..f0040e8 100644 --- a/include/configs/am43xx_evm.h +++ b/include/configs/am43xx_evm.h @@ -122,12 +122,17 @@ /* USB GADGET */ #if !defined(CONFIG_SPL_BUILD) || \ (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_USBETH_SUPPORT)) +#undef CONFIG_ENV_IS_IN_FAT +#define CONFIG_ENV_IS_NOWHERE #define CONFIG_USB_DWC3_PHY_OMAP #define CONFIG_USB_DWC3_OMAP #define CONFIG_USB_DWC3 #define CONFIG_USB_DWC3_GADGET #define CONFIG_USB_GADGET +#define CONFIG_USB_ETHER +#define CONFIG_USB_ETH_RNDIS +#define CONFIG_USBNET_HOST_ADDR "de:ad:be:af:00:00" #define CONFIG_USB_GADGET_DOWNLOAD #define CONFIG_USB_GADGET_VBUS_DRAW 2 #define CONFIG_G_DNL_MANUFACTURER "Texas Instruments" @@ -136,6 +141,10 @@ #define CONFIG_USB_GADGET_DUALSPEED #endif +#if defined(CONFIG_SPL_USBETH_SUPPORT) || defined(CONFIG_SPL_ETH_SUPPORT) +#define CONFIG_SPL_NET_SUPPORT +#endif + #ifndef CONFIG_SPL_BUILD /* USB Device Firmware Update support */ #define CONFIG_USB_FUNCTION_DFU diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl index b1047b5..5a7c92e 100644 --- a/scripts/Makefile.spl +++ b/scripts/Makefile.spl @@ -82,6 +82,8 @@ libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/ libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/ libs-$(CONFIG_SPL_RAM_SUPPORT) += drivers/ram/ libs-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/ +libs-$(CONFIG_USB_DWC3_GADGET) += drivers/usb/dwc3/ +libs-$(CONFIG_USB_DWC3_GADGET) += drivers/usb/gadget/udc/ libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/ libs-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/ libs-$(CONFIG_SPL_USB_HOST_SUPPORT) += drivers/usb/host/ -- 1.7.9.5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot