[U-Boot] [PATCH 08/11] dwc3: Add support for USB device boot

Vignesh R vigneshr at ti.com
Tue May 23 11:55:43 UTC 2017


Add support to for USB device boot for dwc3 gadget, so that RNDIS can be
used in SPL to download next stage.
Provide a way to read MAC address for usb_ether device from board
function.

Signed-off-by: Vignesh R <vigneshr at ti.com>
---
 drivers/usb/gadget/ether.c        | 9 ++++++++-
 drivers/usb/gadget/gadget_chips.h | 2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 4137d76c42af..aa219a50dae6 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -2383,6 +2383,7 @@ static int _usb_eth_init(struct ether_priv *priv)
 #ifdef CONFIG_USBNET_HOST_ADDR
 	strlcpy(host_addr, CONFIG_USBNET_HOST_ADDR, sizeof(host_addr));
 #endif
+
 	/* Check if the user overruled the MAC addresses */
 	if (getenv("usbnet_devaddr"))
 		strlcpy(dev_addr, getenv("usbnet_devaddr"),
@@ -2619,6 +2620,10 @@ int usb_eth_initialize(bd_t *bi)
 	return 0;
 }
 #else
+void __weak board_set_usbnet_devaddr(void)
+{
+}
+
 static int usb_eth_start(struct udevice *dev)
 {
 	struct ether_priv *priv = dev_get_priv(dev);
@@ -2683,6 +2688,8 @@ static int usb_eth_probe(struct udevice *dev)
 
 	priv->netdev = dev;
 	l_priv = priv;
+	/* Get MAC address for USB ETH interface */
+	board_set_usbnet_devaddr();
 
 	get_ether_addr(CONFIG_USBNET_DEVADDR, pdata->enetaddr);
 	eth_setenv_enetaddr("usbnet_devaddr", pdata->enetaddr);
@@ -2726,6 +2733,6 @@ U_BOOT_DRIVER(eth_usb) = {
 	.ops	= &usb_eth_ops,
 	.priv_auto_alloc_size = sizeof(struct ether_priv),
 	.platdata_auto_alloc_size = sizeof(struct eth_pdata),
-	.flags = DM_FLAG_ALLOC_PRIV_DMA,
+	.flags = DM_FLAG_ALLOC_PRIV_DMA | DM_FLAG_PRE_RELOC,
 };
 #endif /* CONFIG_DM_ETH */
diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
index 973cd971ad19..c09d30e0253c 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;
 }
-- 
2.13.0



More information about the U-Boot mailing list