Re: linux 3.6-rc2, undefined reference to omap_musb_mailbox
Felipe, That seems like what this patch of mine fixes (was about to send it when I saw this on my mailbox). It is not enough to just do a dependency; the patch fixes it by having a helper that's always resident, and also making sure we don't drop events. Regards -- Pantelis On Aug 24, 2012, at 10:27 AM, Felipe Balbi wrote: > On Thu, Aug 23, 2012 at 10:38:59PM +0200, Peter Meerwald wrote: >> On Mon, 20 Aug 2012, Felipe Balbi wrote: >> >>> On Mon, Aug 20, 2012 at 04:37:28PM +0530, ABRAHAM, KISHON VIJAY wrote: >>>> Hi, >>>> >>>> On Mon, Aug 20, 2012 at 3:56 PM, Felipe Balbi wrote: >>>>> On Mon, Aug 20, 2012 at 03:46:07PM +0530, ABRAHAM, KISHON VIJAY wrote: >>>>>> Hi, >>>>>> >>>>>> On Mon, Aug 20, 2012 at 3:24 PM, Felipe Balbi wrote: >>>>>>> On Mon, Aug 20, 2012 at 11:06:34AM +0530, ABRAHAM, KISHON VIJAY wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> On Sat, Aug 18, 2012 at 9:34 PM, Peter Meerwald >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> 3.6-rc2 fails to compile with >>>>>>>>> CONFIG_USB_MUSB_HDRC=m >>>>>>>>> CONFIG_USB_MUSB_OMAP2PLUS=m >>>>>>>>> >>>>>>>>> LD init/built-in.o >>>>>>>>> drivers/built-in.o: In function `twl4030_usb_irq': >>>>>>>>> /home/pmeerw/linux-3.6-rc2/drivers/usb/otg/twl4030-usb.c:518: >>>>>>>>> undefined reference to `omap_musb_mailbox' >>>>>>>>> drivers/built-in.o: In function `twl4030_usb_phy_init': >>>>>>>>> /home/pmeerw/linux-3.6-rc2/drivers/usb/otg/twl4030-usb.c:540: >>>>>>>>> undefined reference to `omap_musb_mailbox' >>>>>>>> >>>>>>>> Having TWL4030_USB as a module will get rid of this. >>>>>>>> I'll see how this can be resolved when some modules are *built-in* and >>>>>>>> some are made as *modules*. >>>>>>> >>>>>>> EXPORT_SYMBOL_GPL() should sort that out, right ? >>>>>> >>>>>> No :-( I already have EXPORT_SYMBOL_GPL() in omap2430.c. >>>>> >>>>> I see you're missing an "extern" on the function prototype (on the >>>>> header). Not sure how modules.dep is generated, but maybe it needs the >>>>> "extern" there. Can you check it out ? >>>> >>>> That isn't helping either. >>> >>> oh, ok... twl4030-usb is built-in... now that makes sense. Since >>> twl4030-usb uses a symbol from omap2430, then it should depend on it, >>> otherwise this will always happen. >> >> so add USB_MUSB_OMAP2PLUS to the depends of TWL4030_USB in >> drivers/usb/otg/Kconfig? > > correct ;-) > > -- > balbi commit e191e7226099d90ba077719313d4964cf42834ca Author: Pantelis Antoniou Date: Fri Aug 10 13:07:43 2012 + musb: Introduce mailbox helper When MUSB_OMAP2 is compiled as a module while the musb mailbox callers are not build fails. Introduce a helper to get around the problem. diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index f5ed3d7..6a868bc 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -53,6 +53,7 @@ obj-$(CONFIG_USB_ATM) += atm/ obj-$(CONFIG_USB_SPEEDTOUCH) += atm/ obj-$(CONFIG_USB_MUSB_HDRC)+= musb/ +obj-$(CONFIG_USB_MUSB_OMAP2PLUS_MBOX_HELPER) += musb/ obj-$(CONFIG_USB_CHIPIDEA) += chipidea/ obj-$(CONFIG_USB_RENESAS_USBHS)+= renesas_usbhs/ obj-$(CONFIG_USB_GADGET) += gadget/ diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index 6259f0d..9201c3e 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig @@ -50,6 +50,7 @@ config USB_MUSB_TUSB6010 config USB_MUSB_OMAP2PLUS tristate "OMAP2430 and onwards" depends on ARCH_OMAP2PLUS + select USB_MUSB_OMAP2PLUS_MBOX_HELPER config USB_MUSB_AM35X tristate "AM35x" @@ -69,6 +70,9 @@ config USB_MUSB_UX500 endchoice +config USB_MUSB_OMAP2PLUS_MBOX_HELPER + bool + choice prompt 'MUSB DMA mode' default USB_UX500_DMA if USB_MUSB_UX500 diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile index 3b85871..9126fa2 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile @@ -12,6 +12,7 @@ musb_hdrc-$(CONFIG_DEBUG_FS) += musb_debugfs.o # Hardware Glue Lay
[PATCH] musb: Kill __init from function that are called at other times as well.
Marking functions as __init or __devinit and calling them at other times leads to predictable crashes (if you're lucky). Remove them for now. Signed-off-by: Pantelis Antoniou --- drivers/usb/musb/musb_core.c| 16 drivers/usb/musb/musb_debugfs.c | 2 +- drivers/usb/musb/musb_dma.h | 2 +- drivers/usb/musb/musb_gadget.c | 6 +++--- drivers/usb/musb/musbhsdma.c| 2 +- drivers/usb/musb/omap2430.c | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 26f1bef..215d2d5 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1160,7 +1160,7 @@ static struct musb_fifo_cfg __devinitdata mode_5_cfg[] = { * * returns negative errno or offset for next fifo. */ -static int __devinit +static int fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep, const struct musb_fifo_cfg *cfg, u16 offset) { @@ -1235,7 +1235,7 @@ static struct musb_fifo_cfg __devinitdata ep0_cfg = { .style = FIFO_RXTX, .maxpacket = 64, }; -static int __devinit ep_config_from_table(struct musb *musb) +static int ep_config_from_table(struct musb *musb) { const struct musb_fifo_cfg *cfg; unsignedi, n; @@ -1326,7 +1326,7 @@ done: * ep_config_from_hw - when MUSB_C_DYNFIFO_DEF is false * @param musb the controller */ -static int __devinit ep_config_from_hw(struct musb *musb) +static int ep_config_from_hw(struct musb *musb) { u8 epnum = 0; struct musb_hw_ep *hw_ep; @@ -1373,7 +1373,7 @@ enum { MUSB_CONTROLLER_MHDRC, MUSB_CONTROLLER_HDRC, }; /* Initialize MUSB (M)HDRC part of the USB hardware subsystem; * configure endpoints, or take their config from silicon */ -static int __devinit musb_core_init(u16 musb_type, struct musb *musb) +static int musb_core_init(u16 musb_type, struct musb *musb) { u8 reg; char *type; @@ -1797,7 +1797,7 @@ static void musb_irq_work(struct work_struct *data) * Init support */ -static struct musb *__devinit +static struct musb * allocate_instance(struct device *dev, struct musb_hdrc_config *config, void __iomem *mbase) { @@ -1873,7 +1873,7 @@ static void musb_free(struct musb *musb) * @mregs: virtual address of controller registers, * not yet corrected for platform-specific offsets */ -static int __devinit +static int musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) { int status; @@ -2101,7 +2101,7 @@ fail0: static u64 *orig_dma_mask; #endif -static int __devinit musb_probe(struct platform_device *pdev) +static int musb_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; int irq = platform_get_irq_byname(pdev, "mc"); @@ -2397,7 +2397,7 @@ static struct platform_driver musb_driver = { /*-*/ -static int __init musb_init(void) +static int /* __init */ musb_init(void) { if (usb_disabled()) return 0; diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c index 40a37c9..8f8597d 100644 --- a/drivers/usb/musb/musb_debugfs.c +++ b/drivers/usb/musb/musb_debugfs.c @@ -235,7 +235,7 @@ static const struct file_operations musb_test_mode_fops = { .release= single_release, }; -int __devinit musb_init_debugfs(struct musb *musb) +int musb_init_debugfs(struct musb *musb) { struct dentry *root; struct dentry *file; diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h index 3a97c4e..69254c8 100644 --- a/drivers/usb/musb/musb_dma.h +++ b/drivers/usb/musb/musb_dma.h @@ -178,7 +178,7 @@ struct dma_controller { extern void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit); -extern struct dma_controller *__init +extern struct dma_controller * /* __init */ dma_controller_create(struct musb *, void __iomem *); extern void dma_controller_destroy(struct dma_controller *); diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index f7194cf..f3d9f4e 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -1795,7 +1795,7 @@ static void musb_gadget_release(struct device *dev) } -static void __devinit +static void init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in) { struct musb_hw_ep *hw_ep = musb->endpoints + epnum; @@ -1832,7 +1832,7 @@ init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in) * Initialize the endpoints exposed to peripheral drivers, with backlinks * to the rest of the driver state. */ -static inline void __devinit musb_g_init_endpoints(struct musb *musb) +static inline void musb_g_init_endpoints(struct musb *musb) { u8 epnum;
Re: [PATCH] musb: Kill __init from function that are called at other times as well.
Hi Felipe, A proper answer required some instrumentation printks(). So what I did is that I peppered each function marked with a removed __init or __devinit with a > printk(KERN_INFO "%s:%d (%s) %s\n", __FILE__, __LINE__, KBUILD_MODNAME, > __func__); > Both omap2430 & musb_hdrc are compiled as module, and I issued the following commands on a beagleboard xm. # modprobe omap2430 # modprobe g_mass_storage file=backing_file # rmmod g_mass_storage # rmmod omap2430 # modprobe omap2430 The problem is obvious when you see that functions marked as init or devinit are called when re-loading the omap2430 module again. Those functions if marked as much can (and will as I have witnessed) be removed from memory, leading to a crash. What do you think? Regards -- Pantelis On Sep 6, 2012, at 4:04 PM, Felipe Balbi wrote: > On Thu, Sep 06, 2012 at 05:01:46PM +0300, Pantelis Antoniou wrote: >> Marking functions as __init or __devinit and calling them at other times >> leads to predictable crashes (if you're lucky). >> >> Remove them for now. >> >> Signed-off-by: Pantelis Antoniou >> --- >> drivers/usb/musb/musb_core.c| 16 >> drivers/usb/musb/musb_debugfs.c | 2 +- >> drivers/usb/musb/musb_dma.h | 2 +- >> drivers/usb/musb/musb_gadget.c | 6 +++--- >> drivers/usb/musb/musbhsdma.c| 2 +- >> drivers/usb/musb/omap2430.c | 2 +- >> 6 files changed, 15 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c >> index 26f1bef..215d2d5 100644 >> --- a/drivers/usb/musb/musb_core.c >> +++ b/drivers/usb/musb/musb_core.c >> @@ -1160,7 +1160,7 @@ static struct musb_fifo_cfg __devinitdata mode_5_cfg[] >> = { >> * >> * returns negative errno or offset for next fifo. >> */ >> -static int __devinit >> +static int >> fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep, >> const struct musb_fifo_cfg *cfg, u16 offset) > > Are you sure all these functions are called from outside .init.text ? At > least fifo_setup(), ep_config_from_table() and musb_core_init() are only > during probe(), which sits in .init.text too. > > -- > balbi Log... > root@beagleboard:~# modprobe omap2430 > [ 114.643920] drivers/usb/musb/omap2430.c:584 (omap2430) omap2430_init > [ 114.650939] drivers/usb/musb/omap2430.c:445 (omap2430) omap2430_probe > [ 114.792205] drivers/usb/musb/musb_core.c:2409 (musb_hdrc) musb_init > [ 114.798889] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) > [ 114.805358] drivers/usb/musb/musb_core.c:2118 (musb_hdrc) musb_probe > [ 114.812225] drivers/usb/musb/musb_core.c:1888 (musb_hdrc) > musb_init_controller > [ 114.819824] drivers/usb/musb/musb_core.c:1813 (musb_hdrc) allocate_instance > [ 114.835723] twl4030_usb twl4030_usb: twl4030_phy_resume > [ 114.841339] drivers/usb/musb/musbhsdma.c:391 (musb_hdrc) > dma_controller_create > [ 114.848999] drivers/usb/musb/musb_core.c:1388 (musb_hdrc) musb_core_init > [ 114.856079] musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, > bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn) > [ 114.867095] musb-hdrc: MHDRC RTL version 1.800 > [ 114.871887] drivers/usb/musb/musb_core.c:1246 (musb_hdrc) > ep_config_from_table > [ 114.879486] musb-hdrc: setup fifo_mode 4 > [ 114.883666] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.890319] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.897033] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.903686] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.910369] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.917083] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.923767] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.930480] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.937133] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.943817] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.950500] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.957183] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.963867] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.970550] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.977264] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.983947] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.990631] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 114.997314] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 115.003997] drivers/usb/musb/musb_core.c:1173
Re: [PATCH] musb: Kill __init from function that are called at other times as well.
Hi Felipe I see about __devinit. There's no crash because in those logs the __init modifiers are gone. Regards -- Pantelis On Sep 6, 2012, at 8:07 PM, Felipe Balbi wrote: > Hi, > > On Thu, Sep 06, 2012 at 05:58:27PM +0300, Pantelis Antoniou wrote: >> Hi Felipe, >> >> A proper answer required some instrumentation printks(). >> >> So what I did is that I peppered each function marked with a removed >> __init or __devinit with a >> >>> printk(KERN_INFO "%s:%d (%s) %s\n", __FILE__, __LINE__, KBUILD_MODNAME, >>> __func__); >>> >> >> Both omap2430 & musb_hdrc are compiled as module, and I issued the following >> commands on a beagleboard xm. >> >> # modprobe omap2430 >> # modprobe g_mass_storage file=backing_file >> # rmmod g_mass_storage >> # rmmod omap2430 >> # modprobe omap2430 >> >> The problem is obvious when you see that functions marked as init or devinit >> are >> called when re-loading the omap2430 module again. Those functions if marked >> as >> much can (and will as I have witnessed) be removed from memory, leading to a >> crash. >> >> What do you think? > > the problem would be with usage of __init. __devinit will only drop > .devinit.text if HOTPLUG and MODULE isn't set, AFAICT. I also can't see > a crash on below logs. > > -- > balbi -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] musb: Kill __init from function that are called at other times as well.
On Sep 6, 2012, at 8:37 PM, Felipe Balbi wrote: > Hi, > > On Thu, Sep 06, 2012 at 08:36:39PM +0300, Pantelis Antoniou wrote: >> Hi Felipe >> >> I see about __devinit. >> There's no crash because in those logs the __init modifiers are gone. > > it'd be cool to see the crash, though ;-) > > -- > balbi Heh, OK, My word is not enough? :) Gimme a few minutes... -- Pantelis -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] musb: Kill __init from function that are called at other times as well.
Hi Felipe, On Sep 6, 2012, at 8:41 PM, Felipe Balbi wrote: > Hi, > > On Thu, Sep 06, 2012 at 08:42:56PM +0300, Pantelis Antoniou wrote: >> >> On Sep 6, 2012, at 8:37 PM, Felipe Balbi wrote: >> >>> Hi, >>> >>> On Thu, Sep 06, 2012 at 08:36:39PM +0300, Pantelis Antoniou wrote: >>>> Hi Felipe >>>> >>>> I see about __devinit. >>>> There's no crash because in those logs the __init modifiers are gone. >>> >>> it'd be cool to see the crash, though ;-) >>> >>> -- >>> balbi >> >> Heh, OK, >> >> My word is not enough? :) >> >> Gimme a few minutes... > > Didn't say that, but I don't know what issue you're talking about since > __devinit is supposed to keep .devinit.text intact unless !HOTPLUG. > > This could be a bug on some linker script (though unlikely) just trying > to get understand the issue before I apply the patch, that's all. > > -- > balbi With my init removal patch reverted, but with the instrumentation printk still in Board hanged this time. It is not certain you will crash, you might get a hang or anything else. It all depends on what kind of garbage is there in memory when you start calling into the void. The results are boundedly undefined :) Regards -- Pantelis > root@beagleboard:~# modprobe omap2430 > [ 119.741851] drivers/usb/musb/omap2430.c:584 (omap2430) omap2430_init > [ 119.748870] drivers/usb/musb/omap2430.c:445 (omap2430) omap2430_probe > root@beagleboard:~# [ 119.797760] drivers/usb/musb/musb_core.c:2409 > (musb_hdrc) musb_init > [ 119.804504] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host) > [ 119.811004] drivers/usb/musb/musb_core.c:2118 (musb_hdrc) musb_probe > [ 119.817962] drivers/usb/musb/musb_core.c:1888 (musb_hdrc) > musb_init_controller > [ 119.825622] drivers/usb/musb/musb_core.c:1813 (musb_hdrc) allocate_instance > [ 119.841735] twl4030_usb twl4030_usb: twl4030_phy_resume > [ 119.847290] drivers/usb/musb/musbhsdma.c:391 (musb_hdrc) > dma_controller_create > [ 119.855041] drivers/usb/musb/musb_core.c:1388 (musb_hdrc) musb_core_init > [ 119.862121] musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, > bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn) > [ 119.873229] musb-hdrc: MHDRC RTL version 1.800 > [ 119.877990] drivers/usb/musb/musb_core.c:1246 (musb_hdrc) > ep_config_from_table > [ 119.885620] musb-hdrc: setup fifo_mode 4 > [ 119.889801] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.896514] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.903228] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.909912] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.916625] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.923339] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.930084] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.936798] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.943542] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.950256] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.956939] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.963653] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.970367] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.977081] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.983825] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.990539] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 119.997253] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.003936] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.010650] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.017364] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.024078] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.030792] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.037536] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.044250] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.050933] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.057678] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.064392] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.071105] drivers/usb/musb/musb_core.c:1173 (musb_hdrc) fifo_setup > [ 120.077819] musb-hdrc: 28/31 max ep, 16384/16384 memory > [ 120.083587] drivers/usb/musb/musb_gadget.c:1879 (musb_hdrc) > musb_gadget_setup > [ 120.091156] d