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 <[email protected]>
>> 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: <[email protected]> # v3.14
>> Cc: Pali Rohár <[email protected]>
>> Cc: Ivaylo Dimitrov <[email protected]>
>> Reported-by: Michael Scott <[email protected]>
>> Tested-by: Michael Scott <[email protected]>
>> Reported-by: Rabin Vincent <[email protected]>
>> Signed-off-by: Felipe Balbi <[email protected]>
>
> Yes, this patch fixes this problem. Thanks a lot!
>
> Tested-by: Stefan Roese <[email protected]>
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html