skip needing a custom USB driver and use a USB UART chip on your product instead (not always possible).
That's the funny thing: i bought the H3 board specifically for a project where there is a custom USB device. It's a Cypress FX2 one, but the protocol is completely custom.
I also bought an old Atheros5 MIPS32r2 SoC, it comes with EHCI, and it's very very simple. The kernel is not mainline but rather only supported by OpenWRT, hence I installed it only to grab the patches, then I applied them to a Vanilla kernel, and compiled it manually.
Result? In 45 minus, everything works and I didn't have to look into several forks, repositories, whereas with bloody H3 SoC ... I have been struggling for two weeks, even because I destroyed the previous chip due to a kernel bad support for the CPU freq auto scaling, and had to buy a new one.
But again I am lost with the "proprietary" device tree file, and with too many forks, patch, and unclear comments.
I'd rather use the Atheros5 chip, but it's clocked at 180-200Mhz, it only provides one EHCI port (H3 has 3 ports) and it cannot address more than 128Mbyte of ram.