USB Ethernet initialization for U-boot.

I have been looking at how everything (such as PCI, cpu etc) is being initialized for the Jetson TX1.
The file I was looking at is from U-boot_source/board/nvidia/p2371-2180.c There is driver support for the R8169 which is a PCI Ethernet. But to actually make use of the driver it seems like the PCI port needs to be initialized first according to the file mentioned above.

Basically I want to use the USB ethernet for PXE booting, and to do that I need to use the R8152 driver.

I’m guessing before I do that I need to initialize the USB ethernet for the TX1. Are there any steps or a guide on how to initialize the USB ethernet?

It seems like the net.h file could be useful for this but I would like some guidance please.

I’m not positive, but I think one of the reasons why there is support for some USB boot devices, but perhaps not PCIe, is because the there is already USB support in the boot loader. I think the SATA controller is not a PCIe device, and probably avoids the need for PCIe during boot loader stage…which is why perhaps a USB SATA external drive works.

I’m unsure of USB structure in the boot loader. In a running Linux kernel there is a hot plug layer which announces devices as they enumerate…this is a non-intrusive generalized mechanism. I don’t know if u-boot has any kind of general messaging mechanism, or if each individual driver has to somehow be directly coded (without a general asynchronous messaging system) into USB enumeration in an intrusive way.

It would be really good if there is a previous code for the JTX1 that uses the USB NIC. The only drivers I see being used in terms of networking are the PCI network drivers so it’s hard to see how I can enable the USB ethernet drivers such as the R8152 driver. I tried going through all the related code make sense of how its being initialized but it’s getting hairy…

It seems like it will be impossible without getting some help from some nvidia staff.
Your help has still been very useful though so thanks for replying to all my threads.

Hi teg5926,

The USB used for Ethernet requires loading of the NVIDIA XHCI firmware to enable the host port. This was implemented in the Linux kernel, but was not implemented within U-Boot. The kernel implementation and provided firmware could be used as a reference. As well, the u-USB (flashing) port can be used with a USB-Ethernet dongle, or PCIe Ethernet can be used.
To have this feature implemented within U-Boot, it’s under planning, however there is no firm schedule yet.
I will share the information once any clear status update for this feature.


Hi kayccc,
Could you please share the current status of loading the NVIDIA XHCI firmware to enable the host port? I also want to use Ethernet port on u-boot.

Best regards

Is there any progress on enabling XUSB and Ethernet in U-boot for the Jetson TX1 ? Currently, having ethernet working in U-Boot is a feature expected by any hardware-related developer.

Thanks in advance

I believe USB2 works, but I have not heard of any plans to support USB3 (which is what xusb controller makes available). It would be nice to have USB3 available in U-Boot (this would add a number of useful boot options), but without that you would need to use USB2 mode…if continuity of service during boot is required (such as if using a boot device on USB would require), then you’d have to make sure the controller never switches to USB3 mode and remains in USB2 mode when the Linux kernel loads.