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 <vigne...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to