[U-Boot] i.MX6Q USB OTG Gadget and Fastboot?

Adam Ford aford173 at gmail.com
Fri Jun 30 21:39:35 UTC 2017


I am trying to add in Android Fastboot to my i.MX6Q.

I am using DM_USB to enable the USB through the device tree.  This
device tree works in Linux, so I am assumming I've missed some
configuration somewhere:

I've added the following the defconfig file:

+CONFIG_CMD_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_GADGET=y
+CONFIG_CI_UDC=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_G_DNL_MANUFACTURER="FSL"
+CONFIG_G_DNL_VENDOR_NUM=0x0525
+CONFIG_G_DNL_PRODUCT_NUM=0xa4a5

Based on stuff I found in imx6q sabresd, I have also added the
following to my configs header file:

+/* USB Configs */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_ASIX
+#define CONFIG_MXC_USB_PORTSC           (PORT_PTS_UTMI | PORT_PTS_PTW)
+#define CONFIG_MXC_USB_FLAGS            0
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 1 /* Enabled USB controller number */
+#endif
+
+#ifndef CONFIG_SPL
+#define CONFIG_USBD_HS
+#define CONFIG_USB_FUNCTION_MASS_STORAGE
+#define CONFIG_USB_FUNCTION_FASTBOOT
+#define CONFIG_CMD_FASTBOOT
+#define CONFIG_ANDROID_BOOT_IMAGE
+#define CONFIG_FASTBOOT_BUF_ADDR   CONFIG_SYS_LOAD_ADDR
+#define CONFIG_FASTBOOT_BUF_SIZE   0x07000000
+#endif


I can start the USB system and it appears to find 2 USB controllers.
I have the OTG and USB H1 enabled in my device tree.

When I start the board, the USB log on my host Ubuntu PC shows:
[26450.012906] usb 3-2: new high-speed USB device number 37 using xhci_hcd
[26455.176596] usb 3-2: device descriptor read/64, error -110

But it doesn't appear to be working correctly.

i.MX6 Logic # usb start
starting USB...
USB0:   USB1:   USB EHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
i.MX6 Logic #

USB Info seems to show the same controller twice:

i.MX6 Logic # usb info
1: Hub,  USB Revision 2.0
 - u-boot EHCI Host Controller
 - Class: Hub
 - PacketSize: 64  Configurations: 1
 - Vendor: 0x0000  Product 0x0000 Version 1.0
   Configuration: 1
   - Interfaces: 1 Self Powered 0mA
     Interface: 0
     - Alternate Setting 0, Endpoints: 1
     - Class Hub
     - Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms

1: Hub,  USB Revision 2.0
 - u-boot EHCI Host Controller
 - Class: Hub
 - PacketSize: 64  Configurations: 1
 - Vendor: 0x0000  Product 0x0000 Version 1.0
   Configuration: 1
   - Interfaces: 1 Self Powered 0mA
     Interface: 0
     - Alternate Setting 0, Endpoints: 1
     - Class Hub
     - Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms

And the Ubuntu Host machine shows more errors:
[26507.789535] xhci_hcd 0000:00:14.0: Timeout while waiting for setup
device command
[26513.165249] xhci_hcd 0000:00:14.0: Timeout while waiting for setup
device command
[26513.373225] usb 3-2: device not accepting address 40, error -62
[26513.373252] usb usb3-port2: unable to enumerate USB device

I am wondering if I need to do something special to initialize the OTG
controller beyond DM_USB.  I am guessing that once I get the gadget
working, the Fastboot would follow.

My endgame is to use the Fastboot gadget to load the Android images,
so attempted to run Fastboot from U-boot:

i.MX6 Logic # fastboot USB0
g_dnl_register: failed!, error: -19
exit not allowed from main input shell.
i.MX6 Logic #

Maybe I am not using the correct syntax, but if I fun fastboot by
itself, it requests a USB bus.

Does anyone have any suggestions?
adam


More information about the U-Boot mailing list