Re: MUSB/OMAP: gadget does not start when cable is plugged after the driver is started

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Felipe,

On 04.04.2014 17:35, Stefan Roese wrote:
>>> I'm currently seeing a problem on an OMAP3530 based board (Technexion
>>> TAO3530). Where the MUSB is configured as device/peripheral and the 
>>> ethernet
>>> gadget is compiled into the kernel. This works without any problems 
>>> and usb0
>>> is available when the USB cable is connected to a PC upon startup. 
>>> But when
>>> the cable is disconnected when the driver is started (doesn't matter 
>>> if the
>>> gadget is included in the kernel or if the gadget driver module is 
>>> loaded)
>>> and the cable is plugged in later, the ethernet gadget does not start 
>>> up.
>>> This is 100% reproducible.
>>>
>>> Before digging deeper into this, I wanted to check here if this is a 
>>> known
>>> issue. And if anybody already has a solution/hint for it.
>>>
>>> FYI: I'm using v3.14 right now.
>>
>> Can you see if this helps ?
>>
>> commit e8fbe7b90021960907e885e0b7a9b52d378b0202
>> Author: Felipe Balbi <balbi@xxxxxx>
>> Date:   Fri Mar 28 14:31:47 2014 -0500
>>
>>      usb: musb: fix PHY power on/off
>>
>>      commi 30a70b0 (usb: musb: fix obex in g_nokia.ko
>>      causing kernel panic) removed phy_power_on()
>>      and phy_power_off() calls from runtime PM callbacks
>>      but it failed to note that the driver depended
>>      on pm_runtime_get_sync() calls to power up the PHY,
>>      thus leaving some platforms without any means to
>>      have a working PHY.
>>
>>      Fix that by enabling the phy during omap2430_musb_init()
>>      and killing it in omap2430_musb_exit().
>>
>>      Fixes: 30a70b0 (usb: musb: fix obex in g_nokia.ko causing kernel 
>> panic)
>>      Cc: <stable@xxxxxxxxxxxxxxx> # v3.14
>>      Cc: Pali Rohár <pali.rohar@xxxxxxxxx>
>>      Cc: Ivaylo Dimitrov <ivo.g.dimitrov.75@xxxxxxxxx>
>>      Reported-by: Michael Scott <hashcode0f@xxxxxxxxx>
>>      Tested-by: Michael Scott <hashcode0f@xxxxxxxxx>
>>      Reported-by: Rabin Vincent <rabin@xxxxxx>
>>      Signed-off-by: Felipe Balbi <balbi@xxxxxx>
> 
> Yes, this patch fixes this problem. Thanks a lot!
> 
> Tested-by: Stefan Roese <sr@xxxxxxx>

I just noticed that I still seem to have a problem. With your patch
above applied, I do get an Kernel Oops when the USB cable is not
connected upon kernel start (gadget compiled into the kernel). This
oops happens upon the first MUSB register access in
omap2430_musb_set_vbus():

	devctl = musb_readb(musb->mregs, MUSB_DEVCTL);

...
[    2.457061] musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn)
[    2.468170] musb-hdrc: MHDRC RTL version 1.400 
[    2.473052] musb-hdrc: setup fifo_mode 4
[    2.477172] musb-hdrc: 28/31 max ep, 16384/16384 memory
[    2.482849] musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver
[    2.489440] musb-hdrc musb-hdrc.0.auto: new USB bus registered, assigned bus number 1
[    2.497985] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    2.505157] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    2.512786] usb usb1: Product: MUSB HDRC host driver
[    2.517974] usb usb1: Manufacturer: Linux 3.14.0-00067-g17ec48c-dirty musb-hcd
[    2.525573] usb usb1: SerialNumber: musb-hdrc.0.auto
[    2.532196] hub 1-0:1.0: USB hub found
[    2.536193] hub 1-0:1.0: 1 port detected
[    2.571777] udc musb-hdrc.0.auto: registering UDC driver [g_ether]
[    2.578369] using random self ethernet address
[    2.583190] using random host ethernet address
[    2.587860] g_ether gadget: adding config #1 'CDC Ethernet (ECM)'/c088f36c
[    2.595123] g_ether gadget: adding 'cdc_ethernet'/c67a5a80 to config 'CDC Ethernet (ECM)'/c088f36c
[    2.605773] usb0: HOST MAC be:25:6c:0b:9c:f6
[    2.610412] usb0: MAC 8e:1b:c7:a5:7c:69
[    2.614532] g_ether gadget: CDC Ethernet: dual speed IN/ep1in OUT/ep1out NOTIFY/ep2in
[    2.622802] g_ether gadget: cfg 1/c088f36c speeds: high full
[    2.628692] g_ether gadget:   interface 0 = cdc_ethernet/c67a5a80
[    2.635437] g_ether gadget:   interface 1 = cdc_ethernet/c67a5a80
[    2.641906] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[    2.648834] g_ether gadget: g_ether ready
[    2.654602] mousedev: PS/2 mouse device common for all mice
[    2.662597] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
[    2.670623] Internal error: : 1028 [#1] PREEMPT ARM
[    2.675720] Modules linked in:
[    2.678924] CPU: 0 PID: 52 Comm: kworker/0:1 Tainted: G        W    3.14.0-00067-g17ec48c-dirty #36
[    2.688385] Workqueue: events omap_musb_mailbox_work
[    2.693603] task: c655e000 ti: c6576000 task.ti: c6576000
[    2.699249] PC is at omap2430_musb_set_vbus+0x30/0x158
[    2.704620] LR is at omap2430_musb_set_vbus+0x20/0x158
[    2.709960] pc : [<c0402544>]    lr : [<c0402534>]    psr: 20000113
[    2.709960] sp : c6577ec8  ip : 00000000  fp : c08a2200
[    2.721984] r10: c67959d0  r9 : ffff8bda  r8 : 00000064
[    2.727447] r7 : c085d030  r6 : c6589810  r5 : c6764010  r4 : 00000000
[    2.734252] r3 : fa0ab000  r2 : 333333fd  r1 : 00000000  r0 : 00000064
[    2.741088] Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[    2.748718] Control: 10c5387d  Table: 80004019  DAC: 00000017
[    2.754730] Process kworker/0:1 (pid: 52, stack limit = 0xc6576240)
[    2.761260] Stack: (0xc6577ec8 to 0xc6578000)
[    2.765838] 7ec0:                   c66cac00 c00efa58 c00503e8 c6764010 c65f1490 c6589810
[    2.774383] 7ee0: c65f1410 c6576010 00000000 00000000 c08a2200 c04027fc c04028c0 c65f149c
[    2.782928] 7f00: c656ea80 c085d624 c7dcc300 c004f3cc c005f764 00000001 c64c5eb8 00000000
[    2.791473] 7f20: c64c5eac c656ea80 c085d624 c085d634 c6576008 c656ea98 c08a1ea4 00000009
[    2.800018] 7f40: c085d624 c0050324 c655e000 c656ff00 00000000 c656ea80 c0050210 00000000
[    2.808593] 7f60: 00000000 00000000 00000000 c0055c24 00000000 00000000 c0863c10 c656ea80
[    2.817138] 7f80: 00000000 c6577f84 c6577f84 00000000 c6577f90 c6577f90 c6577fac c656ff00
[    2.825683] 7fa0: c0055b60 00000000 00000000 c000e4b8 00000000 00000000 00000000 00000000
[    2.834228] 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[    2.842773] 7fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
[    2.851348] [<c0402544>] (omap2430_musb_set_vbus) from [<c04027fc>] (omap_musb_set_mailbox+0xcc/0x190)
[    2.861083] [<c04027fc>] (omap_musb_set_mailbox) from [<c004f3cc>] (process_one_work+0x13c/0x458)
[    2.870391] [<c004f3cc>] (process_one_work) from [<c0050324>] (worker_thread+0x114/0x400)
[    2.878936] [<c0050324>] (worker_thread) from [<c0055c24>] (kthread+0xc4/0xe0)
[    2.886505] [<c0055c24>] (kthread) from [<c000e4b8>] (ret_from_fork+0x14/0x3c)
[    2.894042] Code: e59f7120 e5953274 e5979000 e1a08000 (e5d3b060) 
[    2.900421] ---[ end trace e1fcc80bd44c7d71 ]---
[    2.905273] In-band Error seen by MPU  at address 0
[    2.910369] ------------[ cut here ]------------
...


I didn't notice it at first since I had some additional debug
printk's built into the kernel. And it seems that with the addition
of this printk the Oops does not occur.

diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index d4aa779..d58bc61 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1844,6 +1844,7 @@ static int musb_gadget_start(struct usb_gadget *g,
        unsigned long           flags;
        int                     retval = 0;
 
+       printk("xxxxxxxxxxx %s (%d)\n", __func__, __LINE__);
        if (driver->max_speed < USB_SPEED_HIGH) {
                retval = -EINVAL;
                goto err;


I wanted to report this before this patch hits mainline so it might
get updated/fixed. Any ideas?

Thanks,
Stefan

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux