
Current MUSB driver in U-Boot uses old UDC API while new gagdet client drivers need new gadget API. Also current MUSB driver has some significant limitations (like inability to handle tx for endpoints other than ep0). So I think port of new Linux driver is desirable.
This is initial port, performed mostly by putting DM and OTG code under #ifndef __UBOOT__ clauses. My intention was to be as close as possible to the original to ease of possible resyncs. Some warnings are suppressed via CFLAGS. There are some style problems but I'm not touching them for now for the above mentioned reason. There is obviously some room for optimisation, some structure fields are unused as well as (probably) some code.
This is not a replacement for existing MUSB driver (at least for now), cause there are still consumers of the old interface and the only ported backend is for TI AM335X (while the old code has a bunch of other backends).
OTG and DMA are not supported. The only ported driver is for TI AM33xx, but others should be easy to port too.
Virtual root hub is not implemented but this shouldn't be a big problem as the old code has virtual root hub support enabled only for Blackfin platform.
Tested it on AM335x EVM and BeagleBone with CDC Ethernet gadget and a bunch of storage devices.
Pathes are rather big because of the original code size (and I didn't delete unused code, just disabled it). So it's probably better to look at changes as compared to Linux code. I prepared such version also, you can find it at [1]. Hopefully it will be also useful if resync with the kernel will be needed in future.
[1] https://github.com/yanok/u-boot/tree/musb-changes-from-linux
Changes in v2: - add missing linux-compat.h header - added host support - glue code moved from musb_gadget_uboot.c to musb_uboot.c and cleaned up slightly. - added check for malloc return value - define is_{host,peripheral}_capable conditionally to support compilation with only host or gadget enabled - added some more is_{host,peripheral}_capable guards to core code to support compilation with only host or gadget enabled - rename backend config option to CONFIG_USB_MUSB_DSPS - we are providing host support now so add yourself to usb.h - init both musb IPs (conditionally) from arch_init not from eth_initialize - host support enabled - define CONFIG_ARCH_INIT as now musb_register() is called from arch_init() - use new config options
Ilya Yanok (6): linux/usb/ch9.h: update with the version from Linux tree usb: use linux/usb/ch9.h instead of usbdescriptors.h musb-new: port of Linux musb driver musb-new: dsps backend driver am33xx: init OTG hardware and new musb gadget driver am335x_evm: enable both musb gadget and host
Makefile | 1 + arch/arm/cpu/arm920t/s3c24x0/usb_ohci.c | 2 +- arch/arm/cpu/armv7/am33xx/board.c | 107 +- arch/arm/cpu/armv7/am33xx/clock.c | 8 + arch/arm/include/asm/arch-am33xx/cpu.h | 11 +- arch/arm/include/asm/arch-am33xx/hardware.h | 4 + arch/arm/include/asm/omap_musb.h | 25 + arch/mips/cpu/mips32/au1x00/au1x00_usb_ohci.c | 2 +- arch/powerpc/cpu/mpc5xxx/usb_ohci.c | 2 +- arch/powerpc/cpu/ppc4xx/usb_ohci.c | 2 +- common/cmd_usb.c | 2 +- common/usb.c | 4 +- drivers/usb/gadget/config.c | 1 - drivers/usb/gadget/epautoconf.c | 1 - drivers/usb/gadget/ether.c | 1 - drivers/usb/gadget/gadget_chips.h | 2 + drivers/usb/gadget/s3c_udc_otg.c | 1 - drivers/usb/gadget/usbstring.c | 1 - drivers/usb/host/ehci-hcd.c | 16 +- drivers/usb/host/isp116x-hcd.c | 2 +- drivers/usb/host/ohci-hcd.c | 2 +- drivers/usb/host/sl811-hcd.c | 2 +- drivers/usb/musb-new/Makefile | 37 + drivers/usb/musb-new/linux-compat.h | 109 ++ drivers/usb/musb-new/musb_core.c | 2497 +++++++++++++++++++++++++ drivers/usb/musb-new/musb_core.h | 623 ++++++ drivers/usb/musb-new/musb_debug.h | 58 + drivers/usb/musb-new/musb_dma.h | 186 ++ drivers/usb/musb-new/musb_dsps.c | 771 ++++++++ drivers/usb/musb-new/musb_gadget.c | 2333 +++++++++++++++++++++++ drivers/usb/musb-new/musb_gadget.h | 130 ++ drivers/usb/musb-new/musb_gadget_ep0.c | 1089 +++++++++++ drivers/usb/musb-new/musb_host.c | 2400 ++++++++++++++++++++++++ drivers/usb/musb-new/musb_host.h | 114 ++ drivers/usb/musb-new/musb_io.h | 146 ++ drivers/usb/musb-new/musb_regs.h | 645 +++++++ drivers/usb/musb-new/musb_uboot.c | 237 +++ drivers/usb/musb-new/usb-compat.h | 88 + drivers/usb/musb/musb_hcd.c | 4 +- include/configs/am335x_evm.h | 27 + include/linux/usb/ch9.h | 514 ++++- include/linux/usb/musb.h | 162 ++ include/usb.h | 18 +- include/usb/s3c_udc.h | 1 - include/usb_defs.h | 6 - 45 files changed, 12336 insertions(+), 58 deletions(-) create mode 100644 arch/arm/include/asm/omap_musb.h create mode 100644 drivers/usb/musb-new/Makefile create mode 100644 drivers/usb/musb-new/linux-compat.h create mode 100644 drivers/usb/musb-new/musb_core.c create mode 100644 drivers/usb/musb-new/musb_core.h create mode 100644 drivers/usb/musb-new/musb_debug.h create mode 100644 drivers/usb/musb-new/musb_dma.h create mode 100644 drivers/usb/musb-new/musb_dsps.c create mode 100644 drivers/usb/musb-new/musb_gadget.c create mode 100644 drivers/usb/musb-new/musb_gadget.h create mode 100644 drivers/usb/musb-new/musb_gadget_ep0.c create mode 100644 drivers/usb/musb-new/musb_host.c create mode 100644 drivers/usb/musb-new/musb_host.h create mode 100644 drivers/usb/musb-new/musb_io.h create mode 100644 drivers/usb/musb-new/musb_regs.h create mode 100644 drivers/usb/musb-new/musb_uboot.c create mode 100644 drivers/usb/musb-new/usb-compat.h create mode 100644 include/linux/usb/musb.h