Hi, Norman!
I've reimplemented the writes{l,b,w} calls to perform proper IO port access as opposed to using memcpy, and now usb works without ugly hacks. As for the io_port driver, it is completely irrelevant in this case for musb driver is not pci, and dde_kit had no previous implementation of writes{l,b,w} for ARM, so we never ended up calling out{l,b,w} functions. Moreover, io_port expects the addresses to be limited to 16 bits which is ok for x86 reserved range but will blow up on anything else when used with arbitrary IO range.
For now, I'll finish porting ethernet or rndis usb gadget and prepare the patches for the dde kit. Currently I would like to make usb otg a separate service inside the usb_drv (just as nic and input) for simplicity, but I would like to hear your opinion on how we should rework the makefile and dde_linux to make it possible to build drivers into separate binaries. Also, in future it would be nice to add more granularity to the platform code in dde_kit as well as in other genode services because eventually we'll have to think of how to keep multiple boards with the same SoC in one tree.
One thing we've found is that the at the header preprocessing stage genode makefile fails on the "musb_regs.file" at the following line: #include "tusb6010.h" /* Needed "only" for TUSB_EP0_CONF */ It is confused by the quotes there. If we remove them, it works fine. If we do not, a strace shows that an emtpy line appears somewhere, as if the opening quotation mark terminates a string somewhere in the preprocessing stage.
Btw, I've found some time to write down my thoughts about what I want to see in genode one day, but it had boiled down to what's being discussed here lately - power management and graceful service restart on errors (http://t.co/14KBWz7X)
Have a nice day!