apu-ehci/README.md

1.8 KiB

apu-ehci - route AMD APU USB ports to EHCI instaed of XHCI

This repository contains the source code to a small C-language program that can be compiled + executed on a Linux system running the AMD APU SoC such as those used in the APU2/3/4 boards of PC-Engines.

The tool will re-configure the USB ports of the APU SoC to route USB Ports 8+9 (those exposed on the physical USB-A connectors of the PC-Engines boards) from XHCI to EHCI.

Why would one want to do this? To work around bugs in the XHCI controller firmware, such as miscalculation of the available isochronous bandwidth for full-speed devices. For OHCI/UHCI/EHCI, the operating system (Linux kernel) is responsible for this, and it does tend to get it right. With XHCI, this is implemented in proprietary vendor firmware, which does tend to get it wrong.

Homepage

The official homepage / repository of the project is https://git.sysmocom.de/sysmocom/apu-ehci

GIT Repository

You can clone from the official libosmocore.git repository using

git clone https:///git.sysmocom.de/apu-ehci

Building

As long as you have a C compiler and make installed, all you need to do is to run make to build this.

Running

The following command will enable the USB-to-EHCI routing:

./apu-ehci enable

You can disable it again with

./apu-ehci disable

WARNING:: The tool meddles with low-level internals of the APU SoC, so there is a risk it may crash, lock up or otherwise behave strangely. If you want to be safe, it is recommended to first unload the ehci_pci and xhci_pci modules before calling the apu-ehci tool. YMMV.

Further Reading

Official AMD BIOS and Kernel Developer Guide available from https://www.amd.com/system/files/TechDocs/52740_16h_Models_30h-3Fh_BKDG.pdf